[adios] 183/207: upstream 1.8.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 06:04:56 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 9d577829e040b658e5370cbf4fad7cd7bbf1f919
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Thu Jan 8 22:04:13 2015 +0000

    upstream 1.8.0
---
 CMakeLists.txt                                     |  272 +-
 INSTALL                                            |    4 +-
 Makefile.am                                        |   19 +-
 Makefile.in                                        |   44 +-
 NEWS                                               |   19 +
 aclocal.m4                                         | 7956 +-------------------
 adios_config => adios_config.in                    |   19 +-
 cmake_init                                         |  560 +-
 config.h.cmake                                     |   19 +-
 config.h.in                                        |   21 +-
 config/ac_alacrity.m4                              |    2 +-
 config/ac_bzip2.m4                                 |   69 +-
 config/ac_dimes.m4                                 |   11 +-
 config/ac_fastbit.m4                               |   73 +
 config/ac_ncsu_timer.m4                            |    5 +-
 config/ac_nssi.m4                                  |    4 +-
 config/ac_portals.m4                               |   14 +-
 config/ac_ridcompress.m4                           |   73 +
 config/ac_zlib.m4                                  |   71 +-
 aclocal.m4 => config/libtool.m4                    | 1679 +----
 config/ltoptions.m4                                |  368 +
 config/ltsugar.m4                                  |  123 +
 config/ltversion.m4                                |   23 +
 config/lt~obsolete.m4                              |   92 +
 configure                                          | 1815 +++--
 configure.ac                                       |  154 +-
 examples/C/CMakeLists.txt                          |    4 +
 examples/C/Makefile.am                             |    2 +-
 examples/C/Makefile.in                             |   19 +-
 examples/C/arrays/Makefile.am                      |    4 +-
 examples/C/arrays/Makefile.in                      |   19 +-
 examples/C/attributes/Makefile.am                  |    4 +-
 examples/C/attributes/Makefile.in                  |   19 +-
 examples/C/compression_test/Makefile.am            |   37 -
 examples/C/compression_test/adios_global.c         |   87 -
 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 -
 .../C/compression_test/conf_simple/amr_bzip2.xml   |   18 -
 .../compression_test/conf_simple/amr_identity.xml  |   18 -
 .../C/compression_test/conf_simple/amr_isobar.xml  |   18 -
 .../C/compression_test/conf_simple/amr_none.xml    |   18 -
 .../C/compression_test/conf_simple/amr_zlib.xml    |   18 -
 .../conf_simple/bak/adios_global.xml               |   18 -
 .../C/compression_test/conf_simple/bak/mpi.xml     |   18 -
 .../C/compression_test/conf_simple/bak/posix.xml   |   18 -
 .../conf_simple/bak_2/amr_bzip2.xml                |   18 -
 .../conf_simple/bak_2/amr_identity.xml             |   18 -
 .../conf_simple/bak_2/amr_isobar.xml               |   18 -
 .../conf_simple/bak_2/amr_none.xml                 |   18 -
 .../conf_simple/bak_2/amr_szip.xml                 |   18 -
 .../conf_simple/bak_2/amr_zlib.xml                 |   18 -
 .../conf_simple/bak_2/mpi_bzip2.xml                |   18 -
 .../conf_simple/bak_2/mpi_identity.xml             |   18 -
 .../conf_simple/bak_2/mpi_isobar.xml               |   18 -
 .../conf_simple/bak_2/mpi_none.xml                 |   18 -
 .../conf_simple/bak_2/mpi_szip.xml                 |   18 -
 .../conf_simple/bak_2/mpi_zlib.xml                 |   18 -
 .../conf_simple/bak_2/posix_bzip2.xml              |   18 -
 .../conf_simple/bak_2/posix_identity.xml           |   18 -
 .../conf_simple/bak_2/posix_isobar.xml             |   18 -
 .../conf_simple/bak_2/posix_none.xml               |   18 -
 .../conf_simple/bak_2/posix_szip.xml               |   18 -
 .../conf_simple/bak_2/posix_zlib.xml               |   18 -
 .../C/compression_test/conf_simple/mpi_bzip2.xml   |   18 -
 .../compression_test/conf_simple/mpi_identity.xml  |   18 -
 .../C/compression_test/conf_simple/mpi_isobar.xml  |   18 -
 .../C/compression_test/conf_simple/mpi_none.xml    |   18 -
 .../C/compression_test/conf_simple/mpi_zlib.xml    |   18 -
 .../C/compression_test/conf_simple/posix_bzip2.xml |   18 -
 .../conf_simple/posix_identity.xml                 |   18 -
 .../compression_test/conf_simple/posix_isobar.xml  |   18 -
 .../C/compression_test/conf_simple/posix_none.xml  |   18 -
 .../C/compression_test/conf_simple/posix_zlib.xml  |   18 -
 examples/C/compression_test/genarray3D.c           |  205 -
 examples/C/compression_test/gread_temperature.ch   |    4 -
 examples/C/compression_test/gwrite_temperature.ch  |    9 -
 examples/C/compression_test/read_test.h            |  155 -
 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/CMakeLists.txt          |    2 +
 examples/C/flexpath_arrays/Makefile.in             |   17 +-
 .../global_range_select/CMakeLists.txt             |   21 +
 .../global_range_select/Makefile.am                |    4 +-
 .../global_range_select/Makefile.in                |   19 +-
 .../flexpath_arrays/process_select/CMakeLists.txt  |   21 +
 .../C/flexpath_arrays/process_select/Makefile.am   |    6 +-
 .../C/flexpath_arrays/process_select/Makefile.in   |   21 +-
 examples/C/global-array-time/Makefile.am           |    4 +-
 examples/C/global-array-time/Makefile.in           |   19 +-
 examples/C/global-array/Makefile.am                |    4 +-
 examples/C/global-array/Makefile.in                |   19 +-
 .../global-array/adios_global_aggregate_by_color.c |   10 +-
 examples/C/icee_arrays/CMakeLists.txt              |    1 +
 examples/C/icee_arrays/Makefile.am                 |    1 +
 .../C/{flexpath_arrays => icee_arrays}/Makefile.in |   25 +-
 examples/C/icee_arrays/array/CMakeLists.txt        |   25 +
 examples/C/icee_arrays/array/Makefile.am           |   20 +
 .../C/{arrays => icee_arrays/array}/Makefile.in    |   77 +-
 examples/C/icee_arrays/array/README.txt            |   99 +
 examples/C/icee_arrays/array/adios_read.c          |  210 +
 examples/C/icee_arrays/array/adios_write.c         |  194 +
 examples/C/manual/Makefile.am                      |    4 +-
 examples/C/manual/Makefile.in                      |   19 +-
 examples/C/query/CMakeLists.txt                    |   20 +
 examples/C/query/Makefile.am                       |   34 +
 .../maya_append => examples/C/query}/Makefile.in   |  120 +-
 examples/C/query/README_table.txt                  |   83 +
 examples/C/query/README_vars.txt                   |   79 +
 examples/C/query/query_table.c                     |  193 +
 examples/C/query/query_vars.c                      |  126 +
 examples/C/query/write_table.c                     |  123 +
 examples/C/query/write_vars.c                      |   98 +
 examples/C/read_all/Makefile.am                    |    8 +-
 examples/C/read_all/Makefile.in                    |   23 +-
 examples/C/scalars/Makefile.am                     |    4 +-
 examples/C/scalars/Makefile.in                     |   19 +-
 examples/C/schema/Makefile.am                      |    4 +-
 examples/C/schema/Makefile.in                      |   19 +-
 examples/C/schema/rectilinear2d.c                  |    3 +
 examples/C/schema/structured2d.c                   |    3 +
 examples/C/schema/tri2d.c                          |    3 +
 examples/C/schema/tri2d.readme                     |    2 +-
 examples/C/schema/tri2d_noxml.c                    |    2 +-
 examples/C/schema/uniform2d.c                      |    3 +
 examples/C/stat/Makefile.am                        |    4 +-
 examples/C/stat/Makefile.in                        |   19 +-
 examples/C/transforms/CMakeLists.txt               |   29 +
 examples/C/transforms/Makefile.am                  |   19 +-
 examples/C/transforms/Makefile.in                  |   63 +-
 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_read_all_3D.c          |  260 -
 examples/C/transforms/adios_write_all_3D.c         |  198 -
 examples/Fortran/CMakeLists.txt                    |    2 +-
 examples/Fortran/Makefile.am                       |    2 +-
 examples/Fortran/Makefile.in                       |   19 +-
 examples/Fortran/arrays/Makefile.am                |    4 +-
 examples/Fortran/arrays/Makefile.in                |   19 +-
 examples/Fortran/arrays/arrays_read.F90            |    8 +-
 examples/Fortran/global-array-time/Makefile.am     |    4 +-
 examples/Fortran/global-array-time/Makefile.in     |   19 +-
 examples/Fortran/global-array/Makefile.am          |    4 +-
 examples/Fortran/global-array/Makefile.in          |   19 +-
 examples/Fortran/scalars/Makefile.am               |    4 +-
 examples/Fortran/scalars/Makefile.in               |   19 +-
 examples/Fortran/scalars/scalars_read.F90          |   18 +-
 examples/Fortran/schema/CMakeLists.txt             |   13 +
 examples/Fortran/schema/Makefile.am                |   43 +
 .../Fortran/{global-array => schema}/Makefile.in   |  172 +-
 examples/Fortran/schema/rectilinear2d_noxml.F90    |  197 +
 examples/Fortran/schema/structured2d_noxml.F90     |  198 +
 examples/Fortran/schema/tri2d_noxml.F90            |  340 +
 examples/Fortran/schema/tri2d_noxml_seperate.F90   |  399 +
 examples/Fortran/schema/uniform2d_noxml.F90        |  205 +
 examples/Makefile.in                               |   17 +-
 examples/coupling/job1                             |   91 -
 examples/skel/picongpu/test/Makefile               |   46 -
 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/make.settings         |    2 +-
 examples/staging/stage_write/stage_write.c         |   15 +-
 examples/staging/stage_write/writer_adios          |    1 -
 examples/staging/stage_write_varyingsize/Makefile  |   22 +
 .../Makefile.genarray_varying                      |   22 +
 .../stage_write_varyingsize/Makefile.stage_write   |   29 +
 examples/staging/stage_write_varyingsize/README    |   54 +
 .../staging/stage_write_varyingsize/decompose.h    |   17 +
 .../stage_write_varyingsize/decompose_block.c      |   91 +
 .../stage_write_varyingsize/decompose_single.c     |   27 +
 .../stage_write_varyingsize/genarray_varying.F90   |  324 +
 .../stage_write_varyingsize/genarray_varying.xml   |   58 +
 .../job.32 => stage_write_varyingsize/job}         |   44 +-
 .../job.32                                         |   15 +-
 .../staging/stage_write_varyingsize/make.settings  |   19 +
 .../stage_write.c                                  |   74 +-
 .../stage_write_varyingsize/test_decompose.c       |  134 +
 examples/staging/stage_write_varyingsize/utils.c   |  211 +
 examples/staging/stage_write_varyingsize/utils.h   |   50 +
 runconf                                            |  582 +-
 scripts/FindADIOS.cmake                            |   14 +-
 src/CMakeLists.txt                                 |  195 +-
 src/Makefile.am                                    |  137 +-
 src/Makefile.in                                    | 2194 ++++--
 src/core/adios.c                                   |   29 +-
 src/core/adios_copyspec.c                          |   25 +-
 src/core/adios_error.c                             |    6 +
 src/core/adios_icee.h                              |  270 +
 src/core/adios_infocache.c                         |  131 +
 src/core/adios_infocache.h                         |   35 +
 src/core/adios_internals.c                         |  196 +-
 src/core/adios_internals.h                         |   16 +-
 src/core/adios_internals_mxml.c                    |   63 +-
 src/core/adios_read_ext.c                          |  269 +
 src/core/adios_read_hooks.c                        |    5 +
 src/core/adios_read_hooks.h                        |    8 +-
 src/core/adios_read_v1.c                           |    1 +
 src/core/adios_selection_util.c                    |  198 +-
 src/core/adios_selection_util.h                    |   16 +-
 src/core/adios_subvolume.c                         |    4 +-
 src/core/adios_subvolume.h                         |   21 +-
 src/core/adios_timing.c                            |  474 +-
 src/core/adios_timing.h                            |   18 +-
 src/core/adios_transport_hooks.c                   |   17 +
 src/core/adios_transport_hooks.h                   |    6 +-
 src/core/adiosf.c                                  |  331 +
 src/core/adiosf_defs_mod.f90                       |    1 +
 src/core/adiosf_read.c                             |    2 +-
 src/core/adiosf_read_v1.c                          |    2 +-
 src/core/adiosf_write_mod.f90                      |  144 +-
 src/core/bp_types.h                                |    2 +-
 src/core/bp_utils.c                                |  201 +-
 src/core/bp_utils.h                                |   28 +-
 src/core/buffer.c                                  |    7 +-
 src/core/common_adios.c                            |   57 +-
 src/core/common_read.c                             |  854 ++-
 src/core/common_read.h                             |   18 +-
 src/core/flexpath.h                                |   29 +
 src/core/globals.c                                 |  144 +-
 src/core/globals.h                                 |   25 +-
 src/core/transforms/adios_patchdata.c              |  234 +-
 src/core/transforms/adios_patchdata.h              |   14 +-
 src/core/transforms/adios_transforms_common.c      |   14 +-
 src/core/transforms/adios_transforms_common.h      |    2 +-
 src/core/transforms/adios_transforms_datablock.c   |   29 +-
 src/core/transforms/adios_transforms_datablock.h   |    6 +
 src/core/transforms/adios_transforms_hooks_read.h  |   16 +-
 src/core/transforms/adios_transforms_hooks_write.c |   19 +-
 src/core/transforms/adios_transforms_hooks_write.h |   65 +-
 src/core/transforms/adios_transforms_read.c        |  822 +-
 src/core/transforms/adios_transforms_read.h        |    6 +-
 src/core/transforms/adios_transforms_reqgroup.c    |   41 +-
 src/core/transforms/adios_transforms_reqgroup.h    |   19 +-
 src/core/transforms/adios_transforms_specparse.c   |  132 +-
 src/core/transforms/adios_transforms_specparse.h   |   15 +-
 src/core/transforms/adios_transforms_transinfo.h   |   15 +-
 src/core/transforms/adios_transforms_util.c        |    2 +-
 src/core/transforms/adios_transforms_write.c       |  181 +-
 src/core/transforms/adios_transforms_write.h       |   11 +-
 src/core/util.c                                    |   26 +-
 src/public/adios.h                                 |    8 +
 src/public/adios_error.h                           |    6 +
 src/public/adios_query.h                           |  147 +
 src/public/adios_read_ext.h                        |  126 +
 src/public/adios_read_v1.h                         |    6 +
 src/public/adios_read_v1_defs.h                    |    1 +
 src/public/adios_read_v2.h                         |    9 +-
 src/query/Makefile.plugins                         |    9 +
 src/query/Makefile.plugins.cmake                   |    8 +
 src/query/adios_query.c                            |   56 +
 src/query/adios_query_hooks.c                      |   48 +
 src/query/adios_query_hooks.h                      |   36 +
 src/query/adios_query_mod.f90                      |  198 +
 src/query/adiosf_query.c                           |  111 +
 src/query/common_query.c                           |  825 ++
 src/query/common_query.h                           |   50 +
 src/query/fastbit_adios.c                          |  489 ++
 src/query/fastbit_adios.h                          |   84 +
 src/query/query_alac.c                             | 1415 ++++
 src/query/query_fastbit.c                          | 1582 ++++
 src/query/query_utils.c                            |   37 +
 src/query/query_utils.h                            |   27 +
 src/read/read_bp.c                                 |  531 +-
 src/read/read_bp_staged.c                          |   14 +-
 src/read/read_bp_staged1.c                         |   59 +-
 src/read/read_dataspaces.c                         |   45 +-
 src/read/read_datatap.c                            |    5 +
 src/read/read_dimes.c                              |   46 +-
 src/read/read_flexpath.c                           |  392 +-
 src/read/read_icee.c                               | 1476 ++++
 src/read/read_nssi.c                               |    6 +
 src/transforms/adios_transform_alacrity_common.h   |   92 +
 src/transforms/adios_transform_alacrity_read.c     |  169 +-
 src/transforms/adios_transform_alacrity_write.c    |  332 +-
 src/transforms/adios_transform_aplod_read.c        |   38 +-
 src/transforms/adios_transform_aplod_write.c       |   22 +-
 src/transforms/adios_transform_bzip2_read.c        |   13 +-
 src/transforms/adios_transform_bzip2_write.c       |   22 +-
 src/transforms/adios_transform_identity_read.c     |  137 +-
 src/transforms/adios_transform_identity_read.h     |   31 +
 src/transforms/adios_transform_identity_write.c    |   14 +-
 src/transforms/adios_transform_isobar_read.c       |   13 +-
 src/transforms/adios_transform_isobar_write.c      |   22 +-
 src/transforms/adios_transform_szip_read.c         |    9 +-
 src/transforms/adios_transform_szip_write.c        |   19 +-
 ...rity_read.c => adios_transform_template_read.c} |   42 +-
 src/transforms/adios_transform_template_write.c    |   72 +
 src/transforms/adios_transform_zlib_read.c         |   19 +-
 src/transforms/adios_transform_zlib_write.c        |   20 +-
 src/write/adios_dataspaces.c                       |  407 +-
 src/write/adios_dimes.c                            |  539 +-
 src/write/adios_flexpath.c                         |  169 +-
 src/write/adios_icee.c                             | 1194 +++
 src/write/adios_mpi_amr.c                          |  771 +-
 src/write/adios_mpi_bgq.c                          |   15 +-
 src/write/adios_mpi_lustre.c                       |   40 +-
 src/write/adios_posix.c                            |   60 +-
 tests/C/CMakeLists.txt                             |    2 +
 tests/C/Makefile.am                                |    8 +-
 tests/C/Makefile.in                                |   23 +-
 tests/C/fgr_tests/CMakeLists.txt                   |   10 +
 tests/C/fgr_tests/Makefile.am                      |   16 +
 {utils/bp2ascii => tests/C/fgr_tests}/Makefile.in  |   75 +-
 tests/C/fgr_tests/posix_fgr.c                      |  129 +
 tests/C/flexpath_tests/1D_arr_global/Makefile.am   |    4 +-
 tests/C/flexpath_tests/1D_arr_global/Makefile.in   |   19 +-
 .../flexpath_tests/1D_arr_global_noxml/Makefile.am |    4 +-
 .../flexpath_tests/1D_arr_global_noxml/Makefile.in |   19 +-
 tests/C/flexpath_tests/Makefile.in                 |   17 +-
 .../flexpath_tests/global_range_select/Makefile.am |    4 +-
 .../flexpath_tests/global_range_select/Makefile.in |   19 +-
 tests/C/flexpath_tests/maya_append/Makefile.am     |    4 +-
 tests/C/flexpath_tests/maya_append/Makefile.in     |   19 +-
 tests/C/flexpath_tests/maya_noxml/Makefile.am      |    4 +-
 tests/C/flexpath_tests/maya_noxml/Makefile.in      |   19 +-
 tests/C/flexpath_tests/scalar/Makefile.am          |    4 +-
 tests/C/flexpath_tests/scalar/Makefile.in          |   19 +-
 tests/C/query/CMakeLists.txt                       |   12 +
 tests/C/query/Makefile.am                          |   19 +
 tests/{suite => C/query}/Makefile.in               |   46 +-
 tests/C/query/alacrity/CMakeLists.txt              |   29 +
 tests/C/query/alacrity/Makefile.am                 |   51 +
 .../maya_append => query/alacrity}/Makefile.in     |  178 +-
 tests/C/query/alacrity/adios_alac_query.c          |  167 +
 tests/C/query/alacrity/adios_build_alac_index.c    |  729 ++
 tests/C/query/alacrity/adios_read_block.c          |   64 +
 tests/C/query/alacrity/adios_read_ext_test.c       |  165 +
 tests/C/query/alacrity/adios_show_bp_file.c        |  117 +
 tests/C/query/common/CMakeLists.txt                |   15 +
 tests/C/query/common/Makefile.am                   |   25 +
 .../C/query/common}/Makefile.in                    |  170 +-
 tests/C/query/common/adios_query_test.c            |  193 +
 tests/C/query/common/adios_query_xml_parse.c       |  463 ++
 tests/C/query/common/adios_query_xml_parse.h       |   26 +
 .../query/common/compute_expected_query_results.c  |  615 ++
 tests/C/query/fastbit/CMakeLists.txt               |   14 +
 tests/C/query/fastbit/Makefile.am                  |   24 +
 .../maya_append => query/fastbit}/Makefile.in      |   95 +-
 tests/C/query/fastbit/fastbit_tests.c              | 1019 +++
 tests/C/query/query-xmls/DS-1D/query0.xml          |   12 +
 tests/C/query/query-xmls/DS-1D/query1.xml          |   14 +
 tests/C/query/query-xmls/DS-2D/query0.xml          |   12 +
 tests/C/query/query-xmls/DS-2D/query1.xml          |   14 +
 tests/C/query/query-xmls/DS-3D/query-wb0.xml       |   16 +
 tests/C/query/query-xmls/DS-3D/query-wb1.xml       |   16 +
 tests/C/query/query-xmls/DS-3D/query0.xml          |   12 +
 tests/C/query/query-xmls/DS-3D/query1.xml          |   25 +
 .../query-xmls/DS-particle/DS-particle-query0.xml  |   25 +
 .../query-xmls/DS-particle/DS-particle-query1.xml  |   27 +
 tests/C/query/query-xmls/DS-unevenpg/query0.xml    |   12 +
 tests/C/query/query-xmls/DS-unevenpg/query1.xml    |   14 +
 tests/Fortran/Makefile.am                          |    6 +-
 tests/Fortran/Makefile.in                          |   21 +-
 tests/Makefile.in                                  |   17 +-
 tests/bp_read/Makefile.am                          |   16 +-
 tests/bp_read/Makefile.in                          |   31 +-
 tests/bp_read/genbp.c                              |    2 +-
 tests/bp_read/testbp_c.xml                         |    2 +-
 tests/genarray/Makefile.am                         |   12 +-
 tests/genarray/Makefile.in                         |   27 +-
 tests/genarray/copyarray.F90                       |   20 +-
 tests/genarray/copyarray2D.F90                     |   20 +-
 tests/suite/CMakeLists.txt                         |    4 -
 tests/suite/Makefile.in                            |   17 +-
 tests/suite/programs/CMakeLists.txt                |   48 +-
 tests/suite/programs/Makefile.am                   |   59 +-
 tests/suite/programs/Makefile.in                   |  126 +-
 tests/suite/programs/adios_amr_write.c             |    1 -
 tests/suite/programs/adios_amr_write_2vars.c       |    1 -
 tests/suite/programs/adios_staged_read.c           |    1 -
 tests/suite/programs/adios_staged_read_2vars.c     |    1 -
 tests/suite/programs/adios_staged_read_v2.c        |    1 -
 tests/suite/programs/adios_transforms_read_write.c |    3 +-
 tests/suite/programs/big_file.c                    |    1 -
 tests/suite/programs/blocks.c                      |  521 ++
 tests/suite/programs/build_standard_dataset.c      |  767 ++
 tests/suite/programs/connect_to_space_subset.c     |    1 -
 tests/suite/programs/copy_subvolume.c              |    2 +-
 tests/suite/programs/group_free_test.c             |    3 +-
 tests/suite/programs/local_array_time.c            |    2 -
 tests/suite/programs/many_vars.c                   |    1 -
 tests/suite/programs/path_test.c                   |    1 -
 tests/suite/programs/reuse_dim.c                   |    1 -
 tests/suite/programs/selections.c                  |    6 +-
 tests/suite/programs/set_path.c                    |    1 -
 tests/suite/programs/set_path.xml                  |   28 +
 tests/suite/programs/set_path_var.c                |    1 -
 tests/suite/programs/set_path_var.xml              |   25 +
 tests/suite/programs/steps_read_file.c             |    1 -
 tests/suite/programs/steps_read_stream.c           |    1 -
 tests/suite/programs/steps_write.c                 |    1 -
 tests/suite/programs/transforms_writeblock_read.c  |  129 +
 tests/suite/programs/two_groups.c                  |    1 -
 tests/suite/programs/two_groups.xml                |   23 +
 tests/suite/programs/write_alternate.c             |    1 -
 tests/suite/programs/write_read.c                  |    3 +-
 tests/suite/tests/17_blockinfo.sh                  |   37 +
 tests/suite/tests/18_aggregation_by_color.sh       |   33 +
 tests/suite/tests/19_query.sh                      |  297 +
 tests/suite/tests/20_transforms_writeblock.sh      |  149 +
 toolchain.cmake                                    |   13 -
 toolchain/cray/LICENSE                             |  201 +
 toolchain/cray/Platform/ComputeNodeLinux.cmake     |   67 +
 toolchain/cray/README.md                           |   18 +
 .../cray/ToolChain/CrayPrgEnv-ToolChain.cmake      |   52 +
 utils/CMakeLists.txt                               |    4 +
 utils/Makefile.am                                  |    8 +-
 utils/Makefile.in                                  |   28 +-
 utils/adios_lint/Makefile.am                       |    6 +-
 utils/adios_lint/Makefile.in                       |   21 +-
 utils/bp2ascii/Makefile.am                         |    6 +-
 utils/bp2ascii/Makefile.in                         |   21 +-
 utils/bp2bp/Makefile.am                            |    6 +-
 utils/bp2bp/Makefile.in                            |   21 +-
 utils/bp2h5/Makefile.am                            |    8 +-
 utils/bp2h5/Makefile.in                            |   23 +-
 utils/bp2ncd/Makefile.am                           |    8 +-
 utils/bp2ncd/Makefile.in                           |   23 +-
 utils/bpdiff/Makefile.am                           |    6 +-
 utils/bpdiff/Makefile.in                           |   21 +-
 utils/bpdump/Makefile.am                           |    6 +-
 utils/bpdump/Makefile.in                           |   21 +-
 utils/bpdump/bpdump.c                              |    8 +-
 utils/bpls/Makefile.am                             |    6 +-
 utils/bpls/Makefile.in                             |   21 +-
 utils/bpls/bpls.c                                  |    8 +-
 utils/bpmeta/CMakeLists.txt                        |   12 +
 utils/bpmeta/Makefile.am                           |   17 +
 utils/{bpdump => bpmeta}/Makefile.in               |   63 +-
 utils/bpmeta/bpmeta.c                              |  757 ++
 utils/bpsplit/Makefile.am                          |   10 +-
 utils/bpsplit/Makefile.in                          |   25 +-
 utils/fastbit/CMakeLists.txt                       |   12 +
 utils/fastbit/Makefile.am                          |   19 +
 utils/{bp2bp => fastbit}/Makefile.in               |   75 +-
 utils/fastbit/README                               |   14 +
 utils/fastbit/adios_index_fastbit.c                |  566 ++
 utils/gpp/Makefile.in                              |   17 +-
 utils/gpp/gpp.py                                   |    9 +-
 utils/list_methods/Makefile.am                     |   12 +-
 utils/list_methods/Makefile.in                     |   27 +-
 utils/list_methods/list_methods.c                  |   11 +
 utils/skel/Makefile.in                             |   17 +-
 utils/skel/bin/skel                                |   29 +-
 utils/skel/etc/Makefile.in                         |   17 +-
 utils/skel/etc/templates/source_write_fortran.tmpl |    6 +-
 utils/skel/lib/skel_bpy.py                         |    2 +-
 utils/skel/lib/skel_have_adios_timing.py           |    2 +-
 utils/skel/lib/skel_template.py                    |    4 +-
 utils/skel/src/Makefile.am                         |    1 -
 utils/skel/src/Makefile.in                         |   19 +-
 utils/skeldump/Makefile.am                         |    6 +-
 utils/skeldump/Makefile.in                         |   21 +-
 utils/skeldump/skeldump.c                          |   43 +-
 wrappers/matlab/Makefile                           |   12 +-
 wrappers/matlab/adiosopenc_staging.c               |  427 --
 wrappers/matlab/writer.bp                          |  Bin 23064 -> 0 bytes
 wrappers/numpy/Makefile                            |    2 +-
 wrappers/numpy/adios.cpp                           | 6398 ++++++++++------
 wrappers/numpy/adios.pyx                           |  143 +-
 wrappers/numpy/adios_mpi.cpp                       | 6425 ++++++++++------
 wrappers/numpy/adios_mpi.pyx                       |  128 +-
 wrappers/numpy/adios_mpi2serial.sed                |   15 +
 wrappers/numpy/conf/CMakeLists.txt                 |  205 -
 wrappers/numpy/conf/MANIFEST.in                    |   15 -
 wrappers/numpy/conf/__init__.py                    |    0
 wrappers/numpy/conf/__init__.pyc                   |  Bin 149 -> 0 bytes
 wrappers/numpy/conf/cythonize.bat                  |    4 -
 wrappers/numpy/conf/cythonize.py                   |   72 -
 wrappers/numpy/conf/cythonize.sh                   |    4 -
 wrappers/numpy/conf/epydoc.cfg                     |  149 -
 wrappers/numpy/conf/epydocify.py                   |  110 -
 wrappers/numpy/conf/mpiconfig.py                   |  363 -
 wrappers/numpy/conf/mpiconfig.pyc                  |  Bin 11220 -> 0 bytes
 wrappers/numpy/conf/mpidistutils.py                | 1534 ----
 wrappers/numpy/conf/mpidistutils.pyc               |  Bin 54064 -> 0 bytes
 wrappers/numpy/conf/mpiregexes.py                  |   75 -
 wrappers/numpy/conf/mpiregexes.pyc                 |  Bin 2495 -> 0 bytes
 wrappers/numpy/conf/mpiscanner.py                  |  342 -
 wrappers/numpy/conf/mpiscanner.pyc                 |  Bin 15203 -> 0 bytes
 wrappers/numpy/example/staging/README              |   35 +
 wrappers/numpy/example/staging/adios_read.py       |   43 +
 wrappers/numpy/example/staging/adios_write.py      |   48 +
 wrappers/numpy/example/utils/README                |   26 +
 wrappers/numpy/example/utils/bpls.py               |   38 +
 wrappers/numpy/example/{ => utils}/ncdf2bp.py      |   61 +-
 wrappers/numpy/tests/README                        |   27 +
 wrappers/numpy/tests/config.xml                    |    2 +-
 507 files changed, 42019 insertions(+), 26442 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0861c48..cccfb32 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,11 @@
 cmake_minimum_required(VERSION 2.8.0)
+
+#move here bedore project, otherwise SET(CMAKE_INSTALL_PREFIX < install_path>) will not work
+if(NOT CMAKE_INSTALL_PREFIX)
+  # if CMAKE_INSTALL_PREFIX isn't set, try to get it from the INSTALL_PREFIX environment variable
+  set(CMAKE_INSTALL_PREFIX $ENV{INSTALL_PREFIX} CACHE PATH "Prefix prepended to install directories" FORCE)
+endif()
+
 project(ADIOS_PROJECT)
 
 SET_PROPERTY(GLOBAL PROPERTY ALLOW_DUPLICATE_CUSTOM_TARGETS 1)
@@ -14,14 +21,17 @@ link_directories(${PROJECT_BINARY_DIR})
 
 #set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR})
 
-set(CMAKE_INSTALL_PREFIX $ENV{INSTALL_PREFIX} CACHE PATH "Prefix prepended to install directories" FORCE)
+#if(NOT CMAKE_INSTALL_PREFIX)
+#  set(CMAKE_INSTALL_PREFIX $ENV{INSTALL_PREFIX} CACHE PATH "Prefix prepended to install directories" FORCE)
+#endif()
+
 set(prefix ${CMAKE_INSTALL_PREFIX})
 set(exec_prefix ${prefix})
 set(bindir ${exec_prefix}/bin)
 #set(datadir ${prefix}/share)
 set(libdir ${exec_prefix}/lib)
 set(includedir ${prefix}/include)
-
+set(sysconfdir ${prefix}/etc)
 
 if(DEFINED ENV{MACRODEFFLAG})
   set(MACRODEFFLAG $ENV{MACRODEFFLAG})
@@ -66,31 +76,49 @@ else()
   set(BUILD_FORTRAN ON CACHE BOOL "")
 endif()
 
-if(DEFINED ENV{skel_timing})
-  if("$ENV{skel_timing}" STREQUAL "")
-#    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)
+if(DEFINED ENV{adios_timers})
+  if("$ENV{adios_timers}" STREQUAL "")
+    set(ADIOS_TIMERS 0)
+  elseif("$ENV{adios_timers}" STREQUAL "ON")
+    set(ADIOS_TIMERS 1)
+  elseif("$ENV{adios_timers}" STREQUAL "on")
+    set(ADIOS_TIMERS 1)
+  elseif("$ENV{adios_timers}" STREQUAL "OFF")
+    set(ADIOS_TIMERS 0)
+  elseif("$ENV{adios_timers}" STREQUAL "off")
+    set(ADIOS_TIMERS 0)
   else()
-    set(SKEL_TIMING 0)
+    set(ADIOS_TIMERS 0)
   endif()
-  if(SKEL_TIMING)
+  if(ADIOS_TIMERS)
     set(SKEL_HAVE_ADIOS_TIMING True)
   else()
     set(SKEL_HAVE_ADIOS_TIMING False)
   endif()
 else()
-  set(SKEL_HAVE_ADIOS_TIMING False)
-#  message("SKEL is not enabled")
+  # default is on if not specified
+  set(ADIOS_TIMERS 1)
+  set(SKEL_HAVE_ADIOS_TIMING True)
+endif()
+
+if(DEFINED ENV{adios_timer_events})
+  if("$ENV{adios_timer_events}" STREQUAL "")
+    set(ADIOS_TIMER_EVENTS 0)
+  elseif("$ENV{adios_timer_events}" STREQUAL "ON")
+    set(ADIOS_TIMER_EVENTS 1)
+  elseif("$ENV{adios_timer_events}" STREQUAL "on")
+    set(ADIOS_TIMER_EVENTS 1)
+  elseif("$ENV{adios_timer_events}" STREQUAL "OFF")
+    set(ADIOS_TIMER_EVENTS 0)
+  elseif("$ENV{adios_timer_events}" STREQUAL "off")
+    set(ADIOS_TIMER_EVENTS 0)
+  else()
+    set(ADIOS_TIMER_EVENTS 0)
+  endif()
+else()
+  #default is off if not specified
+  set(ADIOS_TIMER_EVENTS 0)
 endif()
-#message("SKEL_HAVE_ADIOS_TIMING is ${SKEL_HAVE_ADIOS_TIMING}")
 
 if(DEFINED ENV{bgq})
   if("$ENV{bgq}" STREQUAL "")
@@ -333,13 +361,27 @@ if("${FLEXPATH}" STREQUAL "OFF")
       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")
+    if(NOT "$ENV{FLEXPATH}" STREQUAL "")
+      set(FLEXPATH_DIR $ENV{FLEXPATH} CACHE FILEPATH "path to flexpath dir")
       set(FLEXPATH ON CACHE BOOL "" FORCE)
     endif()
   endif()
 endif()
 
+if(DEFINED ENV{FASTBIT_DIR})
+  if(NOT "$ENV{FASTBIT_DIR}" STREQUAL "")
+    set(FASTBIT ON CACHE BOOL "")
+    set(FASTBIT_DIR "$ENV{FASTBIT_DIR}" CACHE FILEPATH "path to fastbit dir")
+  else()
+    set(FASTBIT OFF CACHE BOOL "")
+  endif()
+else()
+  if(NOT "$ENV{FASTBIT}" STREQUAL "")
+    set(FASTBIT_DIR $ENV{FASTBIT} CACHE FILEPATH "path to fastbit dir")
+    set(FASTBIT ON CACHE BOOL "" FORCE)
+  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")
@@ -487,6 +529,22 @@ elseif(DEFINED ENV{ALACRITY})
   endif()
 endif()
 
+if(DEFINED ENV{RIDCOMPRESS_DIR})
+  if("$ENV{RIDCOMPRESS_DIR}" STREQUAL "")
+    set(RIDCOMPRESS OFF CACHE BOOL "")
+  else()
+    set(RIDCOMPRESS ON CACHE BOOL "")
+    set(RIDCOMPRESS_DIR $ENV{RIDCOMPRESS_DIR})
+  endif()
+elseif(DEFINED ENV{RIDCOMPRESS})
+  if("$ENV{RIDCOMPRESS}" STREQUAL "")
+    set(RIDCOMPRESS OFF CACHE BOOL "")
+  else()
+    set(RIDCOMPRESS ON CACHE BOOL "")
+    set(RIDCOMPRESS_DIR $ENV{RIDCOMPRESS})
+  endif()
+endif()
+
 if(DEFINED ENV{NCSU_TIMER_DIR})
   if("$ENV{NCSU_TIMER_DIR}" STREQUAL "")
     set(NCSU_TIMER OFF CACHE BOOL "")
@@ -736,6 +794,8 @@ CHECK_INCLUDE_FILES(dmalloc.h HAVE_DMALLOC_H)
 CHECK_FUNCTION_EXISTS(fdatasync HAVE_FDATASYNC)
 
 set(HAVE_FLEXPATH 0)
+set(NO_FLEXPATH 1)
+set(HAVE_FLEXPATH_H 0)
 if(FLEXPATH)
   if(DEFINED FLEXPATH_INCDIR)
     if("${FLEXPATH_INCDIR}" STREQUAL "")
@@ -777,6 +837,7 @@ if(FLEXPATH)
   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(NO_FLEXPATH 0)
     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}")
@@ -787,6 +848,33 @@ if(FLEXPATH)
   endif()
 endif()
 
+if(HAVE_FLEXPATH)
+  set(HAVE_ICEE 1)
+else()
+  set(HAVE_ICEE 0)
+endif()
+
+set(HAVE_FASTBIT 0)
+if(FASTBIT)
+  set(FASTBIT_INCDIR "${FASTBIT_DIR}/include")
+  set(FASTBIT_LIBDIR "${FASTBIT_DIR}/lib")
+  find_path(FASTBIT_INCLUDE_DIR NAMES iapi.h PATHS ${FASTBIT_INCDIR})
+  if(NOT FASTBIT_INCLUDE_DIR)
+    message("Cannot find iapi.h from the FastBit lib. Make sure it has been
+    properly installed at the path specified ${FASTBIT_DIR}")
+  else()
+    set(HAVE_IAPI_H 1)
+  endif()  
+  find_library(FASTBIT_LIBS NAMES fastbit PATHS ${FASTBIT_LIBDIR})
+  if(FASTBIT_INCLUDE_DIR AND FASTBIT_LIBS)
+    set(HAVE_FASTBIT 1)
+    set(FASTBIT_CPPFLAGS "-I${FASTBIT_INCDIR}")
+    set(FASTBIT_LIBS ${FASTBIT_LIBS} CACHE STRING "") 
+  else()
+    set(FASTBIT OFF CACHE BOOL "" FORCE)
+  endif()
+endif()
+
 # Define to 1 if you have the `gettimeofday' function.
 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
 
@@ -996,7 +1084,7 @@ set(HAVE_PABLO 0)
 
 # Define if you have PHDF5.
 if(PHDF5)
-  set(PHDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "" FORCE)
+  set(PHDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "paralllel hdf5 libs")
   set(HAVE_PHDF5 1)
   find_path(PHDF5_INCLUDE_DIR hdf5.h ${PHDF5_DIR}/include)
   if(PHDF5_INCLUDE_DIR)
@@ -1195,9 +1283,6 @@ if(ISOBAR)
   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()
 
@@ -1211,9 +1296,6 @@ if(APLOD)
   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()
 
@@ -1224,8 +1306,16 @@ if(ALACRITY)
   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_RIDCOMPRESS 0)
+if(RIDCOMPRESS)
+  set(RIDCOMPRESS_INCLUDE_DIR ${RIDCOMPRESS_DIR}/include)
+  find_library(RIDCOMPRESS_LIBS NAMES ridcompress PATHS ${RIDCOMPRESS_DIR}/lib)
+  if(RIDCOMPRESS_INCLUDE_DIR AND RIDCOMPRESS_LIBS)
+    set(HAVE_RIDCOMPRESS 1)
+    set(RIDCOMPRESS_CPPFLAGS "-I${RIDCOMPRESS_INCLUDE_DIR}")
   endif()
 endif()
 
@@ -1236,8 +1326,6 @@ if(NCSU_TIMER)
   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()
 
@@ -1259,7 +1347,7 @@ set(PACKAGE adios)
 # Define to the necessary symbol if this constant uses a non-standard name on
 # your system.
 
-# Skel timing is enable
+# ADIOS timing is enable
 
 # Define to 1 if you have the ANSI C header files.
 
@@ -1269,7 +1357,7 @@ set(PACKAGE adios)
 set(VERSION_MAJOR 1)
 
 # Minor version number
-set(VERSION_MINOR 6)
+set(VERSION_MINOR 8)
 
 # Micro version number
 set(VERSION_MICRO 0)
@@ -1584,7 +1672,7 @@ if(HAVE_ISOBAR)
   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_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})
@@ -1632,6 +1720,42 @@ if(HAVE_ALACRITY)
   set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS})
 endif()
 
+if(HAVE_RIDCOMPRESS)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS}-DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${RIDCOMPRESS_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${RIDCOMPRESS_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${RIDCOMPRESS_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${RIDCOMPRESS_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS})
+endif()
+
+if(HAVE_FASTBIT)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${FASTBIT_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${FASTBIT_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${FASTBIT_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${FASTBIT_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${FASTBIT_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${FASTBIT_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${FASTBIT_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${FASTBIT_LIBS})
+endif()
+
 if(HAVE_NCSU_TIMER)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${TIMER_CFLAGS}")
@@ -1714,14 +1838,17 @@ set(ADIOS_INT_CLIB "-L${ADIOS_DIR}/lib -ladios_internal_nompi ${ADIOSLIB_INT_LDA
 
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/adios_config.flags.in ${CMAKE_CURRENT_BINARY_DIR}/adios_config.flags)
 #####################end of processing adios_config.flags.in #####################
-install(FILES ${CMAKE_BINARY_DIR}/adios_config.flags DESTINATION ${bindir})
-install(PROGRAMS adios_config DESTINATION ${bindir})
-install(FILES ${PROJECT_SOURCE_DIR}/scripts/FindADIOS.cmake DESTINATION ${libdir}) 
+#####################start processing adios_config.flags.in #####################
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/adios_config.in ${CMAKE_CURRENT_BINARY_DIR}/adios_config)
+#####################end of processing adios_config.flags.in #####################
+install(FILES ${CMAKE_BINARY_DIR}/adios_config.flags DESTINATION ${sysconfdir})
+install(PROGRAMS ${CMAKE_BINARY_DIR}/adios_config DESTINATION ${bindir})
+install(FILES ${PROJECT_SOURCE_DIR}/scripts/FindADIOS.cmake DESTINATION ${sysconfdir}) 
+#install(FILES ${PROJECT_SOURCE_DIR}/adios_git_status DESTINATION ${sysconfdir})
 
 add_subdirectory(utils)
 add_subdirectory(tests)
 add_subdirectory(examples)
-#set_source_files_properties
 ############################### end of top CMakeLists.txt ###############################
 
 message("*********************************")
@@ -1749,11 +1876,19 @@ message("      - CXXFLAGS = ${CXXFLAGS}")
 message("      - FCFLAGS  = ${FCFLAGS}")
 message("      - LIBS     = ${LIBS}")
 message("      - MPILIBS = ${MPILIBS}")
-if(SKEL_HAVE_ADIOS_TIMING)
- message("  - Skel Timing Mechanism Enabled")
+
+if(ADIOS_TIMERS)
+ message("  - ADIOS Timers Enabled")
 else()
-  message("  - Skel Timing Mechanism Disabled")
+  message("  - ADIOS Timers Disabled")
 endif()
+
+if(ADIOS_TIMER_EVENTS)
+ message("  - ADIOS Timer Events Enabled")
+else()
+  message("  - ADIOS Timer Events Disabled")
+endif()
+
 if(HAVE_MXML)
   message("  - MXML")
   message("      - MXML_CFLAGS = ${MXML_CFLAGS}")
@@ -1764,6 +1899,7 @@ else()
   message("")
   message("  - No MXML")
 endif()
+
 if(HAVE_LUSTRE)
   message("  - LUSTRE")
   message("      - LUSTRE_CFLAGS = ${LUSTRE_CFLAGS}")
@@ -1774,6 +1910,7 @@ else()
   message("  - No LUSTRE")
   message("")
 endif()
+
 if(HAVE_FGR)
     message("  - FGR")
     message("      - FGR_CFLAGS = ${FGR_CFLAGS}")
@@ -1784,6 +1921,7 @@ else()
   message("  - No FGR")
   message("")
 endif()
+
 if(HAVE_GLIB)
   message("  - GLIB")
   message("      - GLIB_CFLAGS = ${GLIB_CFLAGS}")
@@ -1794,6 +1932,7 @@ else()
   message("  - No GLIB")
   message("")
 endif()
+
 message("  - Networking library for staging methods:")
 if(HAVE_PORTALS)
   message("    - PORTALS")
@@ -1802,6 +1941,7 @@ if(HAVE_PORTALS)
   message("      - PORTALS_LIBS = ${PORTALS_LIBS}")
   message("")
 endif()
+
 if(HAVE_INFINIBAND)
   message("    - INFINIBAND")
   message("      - INFINIBAND_CFLAGS = ${INFINIBAND_CFLAGS}")
@@ -1809,6 +1949,7 @@ if(HAVE_INFINIBAND)
   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}")
@@ -1816,6 +1957,7 @@ if(HAVE_CRAY_PMI AND HAVE_CRAY_UGNI)
   message("      - LIBS = ${CRAY_PMI_LIBS} ${CRAY_UGNI_LIBS}")
   message("")
 endif()
+
 if(HAVE_DCMF)
   message("    - IBM DCMF")
   message("      - DCMF_CFLAGS = ${DCMF_CFLAGS}")
@@ -1823,6 +1965,7 @@ if(HAVE_DCMF)
   message("      - DCMF_LIBS = ${DCMF_LIBS}")
   message("")
 endif()
+
 if(HAVE_DATASPACES)
   message("  - DATASPACES transport method")
   message("      - DATASPACES_CFLAGS = ${DATASPACES_CFLAGS}")
@@ -1833,6 +1976,7 @@ else()
   message("  - No DATASPACES to build DATASPACES transport method")
   message("")
 endif()
+
 if(HAVE_DIMES)
   message("  - DIMES transport method")
   message("      - DIMES_CFLAGS = ${DIMES_CFLAGS}")
@@ -1843,6 +1987,7 @@ else()
   message("  - No DIMES to build DIMES transport method")
   message("")
 endif()
+
 if(HAVE_PHDF5)
   message("  - PHDF5")
   message("      - PHDF5_CFLAGS = ${PHDF5_CFLAGS}")
@@ -1853,6 +1998,7 @@ else()
   message("  - No PHDF5 to build PHDF5 transport method")
   message("")
 endif()
+
 if(HAVE_HDF5)
   message("  - HDF5")
   message("      - HDF5_CFLAGS = ${HDF5_CFLAGS}")
@@ -1863,6 +2009,7 @@ else()
   message("  - No HDF5")
   message("")
 endif()
+
 if(HAVE_NC4PAR)
   message("  - NetCDF 4 Parallel")
   message("      - NC4PAR_CFLAGS = ${NC4PAR_CFLAGS}")
@@ -1873,6 +2020,7 @@ else()
   message("  - No NETCDF 4 Parallel to build NC4 transport method")
   message("")
 endif()
+
 if(HAVE_NETCDF)
   message("  - NetCDF")
   message("      - NETCDF_CFLAGS = ${NETCDF_CFLAGS}")
@@ -1883,6 +2031,7 @@ else()
   message("  - No NSSI to build NSSI transport method")
   message("")
 endif()
+
 if(HAVE_FLEXPATH)
   message("  - FLEXPATH")
   message("      - FP_CFLAGS = ${FP_CFLAGS}")
@@ -1892,6 +2041,17 @@ if(HAVE_FLEXPATH)
 else()
   message("  - No FLEXPATH to build FLEXPATH transport method")
 endif()
+
+if(HAVE_ICEE)
+  message("  - ICEE")
+  message("      - FP_CFLAGS = ${FP_CFLAGS}")
+  message("      - FP_CPPFLAGS = ${FP_CPPFLAGS}")
+  message("      - FP_LIBS = ${FP_LIBS}")
+  message("")
+else()
+  message("  - No ICEE to build ICEE transport method")
+endif()
+
 if(HAVE_ZLIB)
   message("  - ZLIB")
   message("      - ZLIB_CFLAGS = ${ZLIB_CFLAGS}")
@@ -1901,6 +2061,7 @@ if(HAVE_ZLIB)
 else()
   message("  - No ZLIB to build ZLIB transform method")
 endif()
+
 if(HAVE_BZIP2)
   message("  - BZIP2")
   message("      - BZIP2_CFLAGS = ${BZIP2_CFLAGS}")
@@ -1910,6 +2071,7 @@ if(HAVE_BZIP2)
 else()
   message("  - No BZIP2 to build BZIP2 transform method")
 endif()
+
 if(HAVE_SZIP)
   message("  - SZIP")
   message("      - SZIP_CFLAGS = ${SZIP_CFLAGS}")
@@ -1919,6 +2081,7 @@ if(HAVE_SZIP)
 else()
   message("  - No SZIP to build SZIP transform method")
 endif()
+
 if(HAVE_ISOBAR)
   message("  - ISOBAR")
   message("      - ISOBAR_CFLAGS = ${ISOBAR_CFLAGS}")
@@ -1928,6 +2091,7 @@ if(HAVE_ISOBAR)
 else()
   message("  - No ISOBAR to build ISOBAR transform method")
 endif()
+
 if(HAVE_APLOD)
   message("  - APLOD")
   message("      - APLOD_CFLAGS = ${APLOD_CFLAGS}")
@@ -1937,6 +2101,16 @@ message("")
 else()
   message("  - No APLOD to build APLOD transform method")
 endif()
+
+if(HAVE_FASTBIT)
+  message("  - FASTBIT")
+  message("      - FASTBIT_CFLAGS = ${FASTBIT_CFLAGS}")
+  message("      - FASTBIT_CPPFLAGS = ${FASTBIT_CPPFLAGS}")
+  message("      - FASTBIT_LIBS = ${FASTBIT_LIBS}")
+else()
+  message("  - No FASTBIT to build FASTBIT query method")
+endif()
+
 if(HAVE_ALACRITY)
   message("  - ALACRITY")
   message("      - ALACRITY_CFLAGS = ${ALACRITY_CFLAGS}")
@@ -1944,8 +2118,18 @@ if(HAVE_ALACRITY)
   message("      - ALACRITY_LIBS = ${ALACRITY_LIBS}")
   message("")
 else()
-  message("  - No ALACRITY to build ALACRITY transform method")
+  message("  - No ALACRITY to build ALACRITY transform & query method")
 endif()
+
+if(HAVE_RIDCOMPRESS)
+  message("  - RIDCOMPRESS")
+  message("      - RIDCOMPRESS_CFLAGS = $RIDCOMPRESS_CFLAGS")
+  message("      - RIDCOMPRESS_CPPFLAGS = $RIDCOMPRESS_CPPFLAGS")
+  message("      - RIDCOMPRESS_LIBS = $RIDCOMPRESS_LIBS")
+else()
+  message("  - No RIDCOMPRESS to build RIDCOMPRESS transform method")
+endif()
+
 if(HAVE_NCSU_TIMER)
   message("  - NCSU timer lib")
   message("      - TIMER_CFLAGS = ${TIMER_CFLAGS}")
@@ -1955,10 +2139,12 @@ 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/INSTALL b/INSTALL
index c5a2a51..6df2e34 100644
--- a/INSTALL
+++ b/INSTALL
@@ -92,8 +92,8 @@ Quick Installation
    For example, to install ADIOS to /usr/local/adios on a machine where
    mpicc and mpif90 are the compilers:
 
-   $ tar zxf adios-1.7.0.tar.gz
-   $ cd adios-1.7.0
+   $ tar zxf adios-1.8.0.tar.gz
+   $ cd adios-1.8.0
    $ CC=mpicc FC=mpif90 ./configure --prefix=/usr/local/adios 
        --with-mxml=<location of mini-xml installation>
        --with-hdf5=<location of HDF5 installation>
diff --git a/Makefile.am b/Makefile.am
index e730ec0..04c0734 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,7 +4,7 @@ SUBDIRS=src utils tests examples
 
 EXTRA_DIST = runconf \
              KNOWN_BUGS \
-             adios_config \
+             adios_config.in \
              scripts/create.nssi.config.sh \
              scripts/kill.nssi.staging.sh \
              scripts/start.nssi.staging.sh \
@@ -42,15 +42,16 @@ sysconf_DATA = scripts/FindADIOS.cmake
 install-data-hook:
 	echo "SRCDIR=\"$(PWD)\"" >> adios_config.flags; \
 	if git rev-parse --git-dir &>/dev/null; then \
-	    echo "GITLOG=\"`git log -n 1 --format=\"Last commit on %ad hash %h\"`\"" > git.status; \
-	    echo "read -d '' GITSTAT <<'_EOF_'" >> git.status; \
-	    git status -uno >> git.status; \
-	    echo "_EOF_" >> git.status; \
+	    echo "GITLOG=\"`git log -n 1 --format=\"Last commit on %ad hash %h\"`\"" > adios_git_status; \
+	    echo "read -d '' GITSTAT <<'_EOF_'" >> adios_git_status; \
+	    git status -uno >> adios_git_status; \
+	    echo "_EOF_" >> adios_git_status; \
 	else \
-	    echo "GITLOG=\"git log not available\"" >> git.status; \
-	    echo "GITSTAT=\"git status not available\"" >> git.status; \
+	    echo "GITLOG=\"git log not available\"" >> adios_git_status; \
+	    echo "GITSTAT=\"git status not available\"" >> adios_git_status; \
 	    echo "Note: git command not found or $(PWD) is not a git repository."; \
 	fi 
-	cp adios_config.flags $(DESTDIR)$(bindir)
-	cp git.status $(DESTDIR)$(bindir)
+	$(INSTALL_DATA) adios_config.flags $(DESTDIR)$(sysconfdir)
+	$(INSTALL_DATA) adios_git_status $(DESTDIR)$(sysconfdir)
         
+CLEANFILES = adios_config adios_config.flags
diff --git a/Makefile.in b/Makefile.in
index fec1d2c..485d2cb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -42,7 +42,8 @@ host_triplet = @host@
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/adios_config.flags.in \
-	$(srcdir)/config.h.in $(top_srcdir)/configure \
+	$(srcdir)/adios_config.in $(srcdir)/config.h.in \
+	$(top_srcdir)/configure \
 	$(top_srcdir)/utils/skel/lib/skel_have_adios_timing.py.in \
 	AUTHORS COPYING ChangeLog INSTALL NEWS TODO config/compile \
 	config/config.guess config/config.sub config/depcomp \
@@ -59,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -75,11 +77,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -87,7 +94,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = utils/skel/lib/skel_have_adios_timing.py \
-	adios_config.flags
+	adios_config adios_config.flags
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -188,6 +195,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -245,6 +254,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -344,11 +356,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -418,7 +432,7 @@ ACLOCAL_AMFLAGS = -I config
 SUBDIRS = src utils tests examples
 EXTRA_DIST = runconf \
              KNOWN_BUGS \
-             adios_config \
+             adios_config.in \
              scripts/create.nssi.config.sh \
              scripts/kill.nssi.staging.sh \
              scripts/start.nssi.staging.sh \
@@ -435,6 +449,7 @@ EXTRA_DIST = runconf \
 #             wrappers/matlab/adiosreadc.c 
 bin_SCRIPTS = adios_config $(am__append_1)
 sysconf_DATA = scripts/FindADIOS.cmake
+CLEANFILES = adios_config adios_config.flags
 all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
@@ -492,6 +507,8 @@ distclean-hdr:
 	-rm -f config.h stamp-h1
 utils/skel/lib/skel_have_adios_timing.py: $(top_builddir)/config.status $(top_srcdir)/utils/skel/lib/skel_have_adios_timing.py.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+adios_config: $(top_builddir)/config.status $(srcdir)/adios_config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 adios_config.flags: $(top_builddir)/config.status $(srcdir)/adios_config.flags.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 install-binSCRIPTS: $(bin_SCRIPTS)
@@ -893,6 +910,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -1008,17 +1026,17 @@ uninstall-am: uninstall-binSCRIPTS uninstall-sysconfDATA
 install-data-hook:
 	echo "SRCDIR=\"$(PWD)\"" >> adios_config.flags; \
 	if git rev-parse --git-dir &>/dev/null; then \
-	    echo "GITLOG=\"`git log -n 1 --format=\"Last commit on %ad hash %h\"`\"" > git.status; \
-	    echo "read -d '' GITSTAT <<'_EOF_'" >> git.status; \
-	    git status -uno >> git.status; \
-	    echo "_EOF_" >> git.status; \
+	    echo "GITLOG=\"`git log -n 1 --format=\"Last commit on %ad hash %h\"`\"" > adios_git_status; \
+	    echo "read -d '' GITSTAT <<'_EOF_'" >> adios_git_status; \
+	    git status -uno >> adios_git_status; \
+	    echo "_EOF_" >> adios_git_status; \
 	else \
-	    echo "GITLOG=\"git log not available\"" >> git.status; \
-	    echo "GITSTAT=\"git status not available\"" >> git.status; \
+	    echo "GITLOG=\"git log not available\"" >> adios_git_status; \
+	    echo "GITSTAT=\"git status not available\"" >> adios_git_status; \
 	    echo "Note: git command not found or $(PWD) is not a git repository."; \
 	fi 
-	cp adios_config.flags $(DESTDIR)$(bindir)
-	cp git.status $(DESTDIR)$(bindir)
+	$(INSTALL_DATA) adios_config.flags $(DESTDIR)$(sysconfdir)
+	$(INSTALL_DATA) adios_git_status $(DESTDIR)$(sysconfdir)
 
 # 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/NEWS b/NEWS
index 09acc23..1b82243 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,22 @@
+1.8.0 Release Dec 2014
+    - Query API 
+      - extends the read API with queries
+    - Staging over WAN (wide-area-network)
+      - ICEE method (requires FLEXPATH) 
+    - skeldump utility
+      - to generate info and code from output data to replay 
+        the I/O pattern
+    - bpmeta utility
+      - generates metadata file (.bp) separately after writing the 
+        data using MPI_AGGREGATE method with metadata writing turned off
+    - I/O timing statistics and timing events can be collected
+    - New stage writer code for staged I/O, where output data 
+      (list of variables and their sizes) is changing 
+      at every timestep. See examples/stage_write_varying
+    - fix: staging with multiple streams allowed
+    - fix: parallel build (make -j <n>) completes without breaking 
+        
+
 1.7.0 Release June 2014
     - Support for more than 64k variables in a file 
     - File system topology aware I/O method for Titan at OLCF
diff --git a/aclocal.m4 b/aclocal.m4
index 0d5abd2..17bfa5a 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -19,7955 +19,6 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool at gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   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.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Add ABI-specific directories to the system library path.
-  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3017 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -8984,6 +1035,7 @@ m4_include([config/ac_datatap.m4])
 m4_include([config/ac_dcmf.m4])
 m4_include([config/ac_dimes.m4])
 m4_include([config/ac_dmalloc.m4])
+m4_include([config/ac_fastbit.m4])
 m4_include([config/ac_fgr.m4])
 m4_include([config/ac_flexpath.m4])
 m4_include([config/ac_glib.m4])
@@ -9000,8 +1052,14 @@ m4_include([config/ac_pablo.m4])
 m4_include([config/ac_pami.m4])
 m4_include([config/ac_phdf5.m4])
 m4_include([config/ac_portals.m4])
+m4_include([config/ac_ridcompress.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])
+m4_include([config/libtool.m4])
+m4_include([config/ltoptions.m4])
+m4_include([config/ltsugar.m4])
+m4_include([config/ltversion.m4])
+m4_include([config/lt~obsolete.m4])
diff --git a/adios_config b/adios_config.in
similarity index 94%
rename from adios_config
rename to adios_config.in
index 0327a35..78df456 100755
--- a/adios_config
+++ b/adios_config.in
@@ -8,18 +8,29 @@
 
 MYDIR=`dirname $0`
 
-FLAGSFILE=${MYDIR}/adios_config.flags
+prefix="@prefix@"
+FLAGSFILE="@sysconfdir@/adios_config.flags"
 if [ ! -f ${FLAGSFILE} ]; then
-    echo "ERROR: settings file ${FLAGSFILE} not found."
-    exit 1
+    FLAGSFILE2=${MYDIR}/adios_config.flags
+    if [ ! -f ${FLAGSFILE2} ]; then
+        echo "ERROR: settings file ${FLAGSFILE} not found."
+        exit 1
+    else
+        FLAGSFILE=${FLAGSFILE2}
+    fi
 fi
 . ${FLAGSFILE}
 
-GITSTATFILE=${MYDIR}/git.status
+GITSTATFILE=@sysconfdir@/adios_git_status
+if [ ! -f ${GITSTATFILE} ]; then
+    GITSTATFILE=${MYDIR}/adios_git_status
+fi
 if [ -f ${GITSTATFILE} ]; then
     . ${GITSTATFILE}
 fi
 
+
+
 function Usage () {
     echo "`basename $0` [-d | -c | -l] [-f] [-r] [-s] [-1] [-m] [-v] [-i]
 Arguments
diff --git a/cmake_init b/cmake_init
index 29041e5..4bc51f3 100755
--- a/cmake_init
+++ b/cmake_init
@@ -32,11 +32,11 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     module load szip
     module load bzip2
     export LUSTRE_DIR="/usr/lib64"
-    export FGR_DIR="/ccs/proj/e2e/qliu/tap"
+#    export FGR_DIR="/ccs/proj/e2e/qliu/tap"
     export GLIB_DIR="/ccs/proj/e2e/qliu/glib"
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
-    export skel_timing=ON
+    export adios_timers=ON
     export research_transports=ON
     export CC=mpicc
     export CXX=mpiCC
@@ -66,6 +66,7 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
 
         export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
         export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
+        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.7.2"
     elif [ "$TARGET" == "gnu" ]; then
         module load hdf5/1.8.10
         export SEQ_HDF5_DIR=$HDF5_DIR
@@ -83,9 +84,9 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
 #        export PAR_NC_DIR=$NETCDF_DIR
 #        export PAR_NC_LIBS=""
 #        module unload netcdf/4.1.3_par
-
 #        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
         export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
+        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.7.2"
     elif [ "$TARGET" == "intel" ]; then
         module load hdf5/1.8.10
         export SEQ_HDF5_DIR=$HDF5_DIR
@@ -113,86 +114,6 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-g -fPIC" 
 
-elif [ `hostname | cut -c 1-4` == "yona" ]; then
-
-    ########
-    # Yona #
-    ########
-    TARGET=pgi
-    echo "Configure on Yona for $TARGET env."
-    source /etc/profile.d/modules.sh
-    module unload hdf5
-    module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-intel
-    module unload PE-pathscale
-    module unload pgi gcc intel pathscale
-    #module unload python
-    module load PE-$TARGET
-    module load mxml
-    #module load python
-    # Use both seq hdf5 (for utils) and 
-    #   parallel hdf5 (for PHDF5 method)
-    module load hdf5/1.8.5
-    SEQ_HDF5_DIR=$HDF5_DIR
-    SEQ_HDF5_CLIB=$HDF5_CLIB
-    module unload hdf5
-    #module load hdf5/1.8.5_par
-    #PAR_HDF5_DIR=$HDF5_DIR
-    #PAR_HDF5_CLIB=$HDF5_CLIB
-    #module unload hdf5
-    # Seq. and Parallel NetCDF 4 
-    module load netcdf/3.6.2
-    SEQ_NC_DIR=$NETCDF_DIR
-    SEQ_NC_CLIB=$NETCDF_CLIB
-    module unload netcdf
-    #module load netcdf/4.1.1_par
-    #PAR_NC_DIR=$NETCDF_DIR
-    #PAR_NC_CLIB=$NETCDF_CLIB
-    #module unload netcdf
-    export CC=mpicc
-    export CXX=mpiCC
-    export FC=mpif90
-    if [ "$TARGET" == "pgi" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=icc
-        export CXX=icpc
-        export FC=ifort
-    else
-        echo "TARGET must be pgi or gnu or intel"
-        exit 1
-    fi
-        
-    export CFLAGS="-g -fPIC" 
-#    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
-#        --enable-dependency-tracking \
-#        --enable-research-transports  \
-#        --with-hdf5=${SEQ_HDF5_DIR} \
-#        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-#        --with-netcdf=${SEQ_NC_DIR} \
-#        --with-netcdf-libs="${SEQ_NC_CLIB}" \
-#        --with-lustre=/usr \
-#        --without-datatap --without-infiniband
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_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` == "lens" ]; then
     source /etc/profile.d/modules.sh
@@ -233,7 +154,7 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
 
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
-    export skel_timing=ON
+    export adios_timers=ON
     export INSTALL_PREFIX="/ccs/home/jya/ADIOS/lens.$TARGET"
     export CC=mpicc
     export CXX=mpiCC
@@ -255,13 +176,6 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
     fi
 
     export CFLAGS="-g -fPIC"
-#    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/lens.$TARGET \
-#        --enable-dependency-tracking \
-#        --enable-research-transports  \
-#        --with-hdf5=${SEQ_HDF5_DIR} \
-#        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-#        --without-datatap
-        #--with-mxml=/ccs/proj/e2e/pnorbert/mxml \
 
 
 elif [ `hostname | cut -c 1-5` == "titan" ]; then
@@ -286,25 +200,21 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         module unload PrgEnv-pgi
         module unload PrgEnv-intel
         module unload PrgEnv-cray
-        #module unload papi
         module load PrgEnv-$TARGET
-        module swap craype-interlagos craype-istanbul
+        module load craype-target-compute_node
+        module load craype-interlagos
+        module load cmake
+        export CRAYPE_LINK_TYPE=static
+        module load cray-mpich
         module load szip
-        #module load xt-papi
         module load mxml
-    	# 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 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 DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET-1.3.0"
-        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/titan/$TARGET"
-    	export skel_timing=ON
+    	export adios_timers=ON
     	export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET"
             
     else 
@@ -325,104 +235,53 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         module unload PrgEnv-pgi
         module unload PrgEnv-intel
         module unload PrgEnv-cray
-        #module unload papi
-        #module unload xtpe-quadcore
         module load PrgEnv-$TARGET
-        module swap craype-interlagos craype-istanbul
-	    #module load xtpe-istanbul
+        module load craype-target-compute_node
+        module load craype-interlagos
+        module load cmake
+        export CRAYPE_LINK_TYPE=static
+        module load cray-mpich
+        module load cray-netcdf-hdf5parallel
+        module load mxml
+        module load szip
+
         unset EXTRA_LIBS
         unset LDFLAGS
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS=${HDF5_DIR}/lib/libhdf5_parallel.a
+        export PAR_NC_DIR=${NETCDF_DIR}
+        export PAR_NC_LIBS=${NETCDF_DIR}/lib/libnetcdf_parallel.a
+        export LUSTRE_DIR=/usr/lib64
+        export BZIP2_DIR=${SYSROOT_DIR}/usr
         if [ "$TARGET" == "pgi" ]; then
-            #module swap pgi pgi/11.8.0
-            # NSSI needs -pgcpplibs flag 
-            module unload hdf5
-            module load cray-hdf5
-#            module load hdf5/1.8.8
-            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"
-#            export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.8/pgi/119/lib  -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-            module unload hdf5/1.8.8
-#            module unload cray-hdf5
-#            module load cray-hdf5-parallel
-#            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 cray-hdf5-parallel
-            module unload netcdf
-            module load cray-netcdf
-            export SEQ_NC_DIR=$NETCDF_DIR
-            export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.3.0/PGI/121/lib -lnetcdf"
-            module unload cray-netcdf
-#            module load cray-netcdf-hdf5parallel
-#            export PAR_NC_DIR=$NETCDF_DIR
-#            export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.3.0/PGI/121/lib -lnetcdf"
-#            module unload cray-netcdf-hdf5parallel
+            module load dataspaces/1.4.0
+            export DATASPACES_LIBDIR=${DATASPACES_DIR}/lib
             export LDFLAGS="-pgcpplibs -Wl,-Bstatic" 
-            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
-            export FLEXPATH_DIR="/ccs/proj/e2e/chaos/titan/$TARGET"
+#            export FLEXPATH_DIR="/ccs/proj/e2e/chaos/titan/$TAGET"
+            export EXTRA_LIBS="/opt/gcc/4.8.2/snos/lib64/libstdc++.a"
         elif [ "$TARGET" == "gnu" ]; then
+            # currently dependencies are not available for > 4.7.2
+            module load gcc/4.7.2
+            module load dataspaces/1.4.0
+            export DATASPACES_DIR=$DATASPACES_DIR
+            export FLEXPATH_DIR="/ccs/proj/e2e/chaos/titan/gnu"
+#            module load fastbit/svn
+#            export FASTBIT_DIR=$FASTBIT_DIR
             # NSSI needs libstdc++
-            module unload hdf5
-            module load cray-hdf5
-            export SEQ_HDF5_DIR=$HDF5_DIR
-            export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/GNU/48/lib  -L/sw/xk6/szip/2.1/sles11.1_gnu4.7.2/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-            module unload cray-hdf5
-#            module unload hdf5-parallel
-#            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/gnu/47/lib -L/sw/xk6/szip/2.1/sles11.1_gnu4.7.2/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#            module unload hdf5-parallel/1.8.8
-            module unload netcdf
-            module load cray-netcdf
-            export SEQ_NC_DIR=$NETCDF_DIR
-            export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.3.0/GNU/48/lib -lnetcdf"
-            module unload cray-netcdf
-#            module unload netcdf-hdf5parallel
-#            module load cray-netcdf-hdf5parallel
-#            export PAR_NC_DIR=$NETCDF_DIR
-#            export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.3.0/GNU/48/lib -lnetcdf"
-#            module unload cray-netcdf-hdf5parallel
-
-            export EXTRA_LIBS="/opt/gcc/4.7.2/snos/lib64/libstdc++.a"
-            #module swap gcc gcc/4.4.4
-            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
-        elif [ "$TARGET" == "intel" ]; then
-            module unload hdf5
-            module load cray-hdf5
-            export SEQ_HDF5_DIR=$HDF5_DIR
-            export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/INTEL/130/lib -L/sw/xk6/szip/2.1/sles11.1_intel12.1.3.293/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-            module unload cray-hdf5
-#            module load cray-hdf5-parallel
-#            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 cray-hdf5-parallel
-            module unload netcdf
-            module load cray-netcdf
-            export SEQ_NC_DIR=$NETCDF_DIR
-            export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.3.0/INTEL/130/lib -lnetcdf"
-            module unload cray-netcdf
-#            module load cray-netcdf-hdf5parallel
-#            export PAR_NC_DIR=$NETCDF_DIR
-#            export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.3.0/PGI/121/lib -lnetcdf"
-#            module unload cray-netcdf-hdf5parallel 
+            export EXTRA_LIBS="${GCC_PATH}/snos/lib64/libstdc++.a"
         else
             unset DATASPACES_DIR
         fi
      
         # NOTE hdf5-parallel module does not work with C++ compiler
-        #module load papi
-        module load mxml
         # use the two lines below for openmpi
         export CRAY_UGNI_DIR="/opt/cray/ugni/default"
         export CRAY_PMI_DIR="/opt/cray/pmi/default"
-        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 adios_timers=ON
         export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET" 
     fi
     
@@ -434,23 +293,24 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
       #################
       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 mxml
       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
+      module load craype-target-compute_node
+      module load cmake
+      export CRAYPE_LINK_TYPE=static
+      module load cray-mpich
+      module load mxml
       export BUILD_WRITE=ON
       export BUILD_FORTRAN=ON
       if [ "$TARGET" == "pgi" ]; then
@@ -481,10 +341,7 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       ###############
       TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
       echo "Configure on Chester (XK6) 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
@@ -497,230 +354,48 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       module unload PrgEnv-cray
       module unload papi
       module unload pmi
+      module unload ugni
       module load PrgEnv-$TARGET
-      module load dataspaces/1.0.0
-      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"
+      module load craype-target-compute_node
+      module load cmake
+      export CRAYPE_LINK_TYPE=static
+      module load cray-mpich
+      module load cray-netcdf-hdf5parallel
+      module load mxml
+      module load szip
+      module load pmi
+      module load ugni
+      export PAR_HDF5_DIR=$HDF5_DIR
+      export PAR_HDF5_LIBS=${HDF5_DIR}/lib/libhdf5_parallel.a
+      export PAR_NC_DIR=${NETCDF_DIR}
+      export PAR_NC_LIBS=${NETCDF_DIR}/lib/libnetcdf_parallel.a
+      export LUSTRE_DIR=/usr/lib64
+      export BZIP2_DIR=${SYSROOT_DIR}/usr
+      export CRAY_PMI_DIR=$(echo "${CRAY_PMI_POST_LINK_OPTS}" | sed 's|.*-L\([^ ]*\)/lib64.*|\1|')
+      export CRAY_UGNI_DIR=$(echo "${CRAY_UGNI_POST_LINK_OPTS}" | sed 's|.*-L\([^ ]*\)/lib64.*|\1|')
+      export BUILD_WRITE=ON
+      export BUILD_FORTRAN=ON
       if [ "$TARGET" == "pgi" ]; then
-          module swap pgi pgi/11.8.0
           # NSSI needs -pgcpplibs flag 
           export LDFLAGS="-pgcpplibs" 
+          module load dataspaces/1.4.0
+          export DATASPACES_LIBDIR=${DATASPACES_DIR}/lib
           unset EXTRA_LIBS 
-#          WITHDART="--with-dataspaces=$DATASPACES_DIR"
       elif [ "$TARGET" == "gnu" ]; then
           # NSSI needs libstdc++
           unset LDFLAGS 
           export EXTRA_LIBS="/opt/gcc/4.7.1/snos/lib64/libstdc++.a"
+          module load dataspaces/1.4.0
+          export DATASPACES_LIBDIR=${DATASPACES_DIR}/lib
           #module swap gcc gcc/4.4.4
-#          WITHDART="--with-dataspaces=$DATASPACES_DIR"
       else
           unset LDFLAGS 
           unset EXTRA_LIBS 
 #          WITHDART=""
       fi
-      #module load szip
-      #module load xt-papi
-      module load mxml
-      module load pmi
-      # 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
-#            --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" 
             
 
-elif [ `hostname | cut -c 1-5` == "smoky" ]; then
-
-    #########
-    # Smoky #
-    #########
-    echo "Configure on SMOKY"
-    source /etc/profile.d/modules.sh
-    module unload hdf5
-    module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-intel
-    module unload PE-pathscale
-    module unload pgi gcc intel pathscale
-    TARGET=pgi
-    module load PE-$TARGET
-    # Use both seq hdf5 (for utils) and 
-    #   parallel hdf5 (for PHDF5 method)
-    #module load hdf5/1.8.5
-    #SEQ_HDF5_DIR=$HDF5_DIR
-    #SEQ_HDF5_DIR=/sw/smoky/hdf5/1.8.5/centos5.5_pgi10.4
-    #SEQ_HDF5_CLIB=$HDF5_CLIB
-    #module unload hdf5/1.8.5
-    #module load hdf5/1.8.5_ompi1.4.2
-    #PAR_HDF5_DIR=$HDF5_DIR
-    #PAR_HDF5_DIR=/sw/smoky/hdf5/1.8.5/centos5.5_pgi10.4_ompi1.4.2
-    #PAR_HDF5_CLIB=$HDF5_CLIB
-    export CC=mpicc
-    export CXX=mpiCC
-    export FC=mpif90
-#    if [ "$TARGET" == "pgi" ]; then
-#        export CC=pgcc
-#        export CXX=pgCC
-#        export FC=pgf90
-#    elif [ "$TARGET" == "gnu" ]; then
-#        export CC=gcc
-#        export CXX=g++
-#        export FC=gfortran
-#    elif [ "$TARGET" == "intel" ]; then
-#        export CC=icc
-#        export CXX=icpc
-#        export FC=ifort
-#    else
-#        echo "TARGET must be pgi or gnu"
-#        exit 1
-#    fi
-        
-    export CFLAGS="-g -fPIC" 
-#    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/smoky.$TARGET \
-#        --enable-dependency-tracking \
-#        --enable-research-transports  \
-#        --with-mxml=/ccs/proj/e2e/pnorbert/mxml.smoky.$TARGET \
-#        --without-hdf5 --without-phdf5 \
-#        --without-netcdf --without-nc4par \
-#        --with-lustre=/usr \
-#        --without-datatap --without-infiniband \
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
-        #--with-hdf5=${SEQ_HDF5_DIR} \
-        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        #--with-netcdf=${SEQ_NC_DIR} \
-        #--with-netcdf-libs="${SEQ_NC_CLIB}" \
-        #--with-nc4par=${PAR_NC_DIR} \
-        #--with-nc4par-libs="${PAR_NC_CLIB}" \
-
-
-elif [ `hostname | cut -c 1-6` == "jaguar" ]; then
-
-    BUILD_STAGING=false
-    if [ $BUILD_STAGING == "false" ]; then
-    
-        ##########
-        # Jaguar #
-        ##########
-        TARGET=pgi
-        echo "Configure on JAGUAR (XT5) 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 xt-papi
-        module load PrgEnv-$TARGET
-        module swap xtpe-interlagos xtpe-istanbul
-        #module load szip
-        #module load xt-papi
-        module load mxml
-        # 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 \
-#            --enable-dependency-tracking \
-#            --with-mxml=/ccs/proj/e2e/pnorbert/mxml.xt5.pgi \
-#            --with-hdf5=/opt/cray/hdf5/1.8.7/pgi/109 \
-#            --with-phdf5=/opt/cray/hdf5-parallel/1.8.7/pgi/109 \
-#            --without-portals
-#            --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 \
-            
-    else 
-    
-        ##########
-        # Jaguar #
-        ##########
-        TARGET=pgi
-        echo "Configure on JAGUAR 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
-        module unload netcdf
-        module unload hdf5-parallel
-        module unload netcdf-hdf5parallel
-        module unload PrgEnv-gnu
-        module unload PrgEnv-pgi
-        module unload PrgEnv-intel
-        module unload PrgEnv-cray
-        module unload xt-papi
-        #module unload xtpe-quadcore
-        module load PrgEnv-$TARGET
-        if [ "$TARGET" == "pgi" ]; then
-            module swap pgi pgi/10.4.0
-            # NSSI needs -pgcpplibs flag 
-            export LDFLAGS="-pgcpplibs" 
-#            WITHDART="--with-dart=/sw/xt5/adios/1.2.1/cnl2.2_pgi10.4/spaces"
-        elif [ "$TARGET" == "gnu" ]; then
-            # NSSI needs libstdc++
-            export EXTRA_LIBS="/opt/gcc/4.4.4/snos/lib64/libstdc++.a"
-            module swap gcc gcc/4.4.4
-#            WITHDART="--with-dart=/sw/xt5/adios/1.2.1/cnl2.2_gnu4.4.4/spaces"
-        fi
-     
-        # NOTE hdf5-parallel module does not work with C++ compiler
-        #module load hdf5-parallel
-        #module load netcdf-hdf5parallel
-        module load szip
-        module load xt-papi
-        module load mxml
-        # 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/e2e/pnorbert/ADIOS/xt5.$TARGET \
-#        ./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} \
-#        --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 \
-#        $WITHDART \
-#        --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 \
-    
-    fi
-    
 elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
     #####################
     # Intrepid BlueGene #
@@ -732,38 +407,6 @@ elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
 #    export FC=xlf90
 #    export CC=xlc_r
     export MXML_DIR = /home/jya/mxml
-#    ./configure --prefix=/home/qliu/ADIOS \
-#            --enable-dependency-tracking \
-#            --with-mxml=/home/qliu/mxml
-
-elif [ `hostname | cut -c 1-4` == "euge" ]; then
-    ###################
-    # Eugene BlueGene #
-    ###################
-    echo "Configure on Eugene (BlueGene)"
-    export CC=mpixlc_r
-    export FC=mpixlf90
-    #export CFLAGS="-g -O0"
-    export CFLAGS=""
-#    export FC=xlf90
-#    export CC=xlc_r
-    export MACRODEFFLAG="-WL,-D"
-
-    source /etc/profile.d/modules.sh
-    module load python
-    # NetCDF 3 for bp2ncd
-    module load netcdf/3.6.2-linux
-    # Seq HDF5 for bp2h5 
-    #module load hdf5/1.8.5-linux
-    export HDF5_DIR="/sw/bgp/hdf5/1.8.5/sles10.2_xlc9.0xlf11.1/install"
-    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 \
-#            --enable-dependency-tracking \
-#            --with-hdf5=$HDF5_DIR \
-#            --with-hdf5-libs="$HDF5_CLIB" \
-#            --without-phdf5
 
     
 elif [ `hostname | cut -c 1-4` == "nid0" ]; then
@@ -790,15 +433,6 @@ 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 \
-#        --enable-dependency-tracking \
-#        --with-mxml=$HOME/mxml \
-#        --with-hdf5=/opt/cray/hdf5/1.8.5.0/hdf5-${TARGET} \
-#        --with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
-#        --with-phdf5=/opt/cray/hdf5-parallel/1.8.5.0/hdf5-parallel-${TARGET} \
-#        --with-nc4par=/opt/cray/netcdf-hdf5parallel/4.1.1.0/netcdf-hdf5parallel-${TARGET} \
-#        --with-dart=/global/homes/p/pnorbert/dart.0628.pgi
     
 
 elif [ `hostname | cut -c 1-6` == "hopper" ]; then
@@ -822,39 +456,17 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     module load PrgEnv-$TARGET
     module load python
     if [ "$TARGET" == "pgi" ]; then
-#        export CC=pgcc
-#        export CXX=pgCC
-#        export FC=pgf90
         export LDFLAGS="-pgcpplibs"
-#        WITHDART="--with-dataspaces=/global/homes/p/pnorbert/dataspaces/1.1.0/$TARGET"
     elif [ "$TARGET" == "gnu" ]; then
-#        export CC=gcc
-#        export CXX=g++
-#        export FC=gfortran
         export LDFLAGS=""
-#        WITHDART="--with-dataspaces=/global/homes/p/pnorbert/dataspaces/1.1.0/$TARGET"
     elif [ "$TARGET" == "intel" ]; then
-#        export CC=icc
-#        export CXX=icpc
-#        export FC=ifort
         export LDFLAGS=""
-#        WITHDART=""
     else
         echo "TARGET must be pgi or gnu or intel"
         exit 1
     fi
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
-#    ./configure --prefix=/global/homes/p/pnorbert/adios/1.4.1/hopper/$TARGET \
-#        --enable-dependency-tracking \
-#        --with-mxml=$HOME/mxml/mxml.hopper \
-#        --with-lustre=/usr \
-#        $WITHDART \
-#        --with-cray-pmi-incdir=/opt/cray/pmi/default/include \
-#        --with-cray-pmi-libdir=/opt/cray/pmi/default/lib64 \
-#        --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
-#        --with-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
-#        --without-hdf5 --without-netcdf
 
 
 elif [ `hostname | cut -c 1-6` == "kraken" ]; then
@@ -898,11 +510,6 @@ 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 \
-#        --enable-dependency-tracking \
-#        --with-portals=yes \
-#        --without-netcdf --without-nc4par --without-hdf5 --without-phdf5 \
-#        --with-dataspaces=${HOME}/dataspaces/1.0.0/$TARGET
 
 
 elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ]; then
@@ -922,9 +529,8 @@ elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ];
     CFLAGS="-g -DO_LARGEFILE=0 -fno-common" 
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
-    export skel_timing=ON
+    export adios_timers=ON
     export INSTALL_PREFIX="/opt/adios"
-#    ./configure --prefix=/opt/adios \
 #        --with-mxml=/opt/mxml \
 #        --with-netcdf=/opt/netcdf \
 #        --with-phdf5=/opt/hdf5 \
@@ -938,12 +544,6 @@ elif [ `hostname | cut -c 1-7` == "ubuntu" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
-#    ./configure --prefix=/usr/local/adios \
-#        --enable-dependency-tracking \
-#        --with-mxml=/usr/local/adios 
-        #--with-hdf5=/usr/local/hdf5-serial\
-        #--with-phdf5=/usr/local \
-        #--with-netcdf=/usr 
 
 
 elif [ `hostname | cut -c 1-6` == "tomato" ]; then
@@ -953,12 +553,6 @@ elif [ `hostname | cut -c 1-6` == "tomato" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
-#    ./configure --prefix=/home/thkorde/local \
-#        --enable-dependency-tracking \
-#        --with-mxml=/home/thkorde/local \
-#        --with-phdf5=/home/thkorde/local \
-#        --with-hdf5=/home/thkorde/local \
-#        --with-netcdf=/home/thkorde/local
 
 
 elif [ `hostname | cut -c 1-4` == "qliu" ]; then
@@ -969,12 +563,6 @@ 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 \
-#        --enable-dependency-tracking \
-#        --with-mxml=/home/qliu/mxml \
-        #--with-phdf5=/home/thkorde/local \
-        #--with-hdf5=/home/thkorde/local \
-        #--with-netcdf=/home/thkorde/local
 
 elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
 
@@ -984,7 +572,7 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     echo "Configure on ESIMMON VirtualBox ."
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
-    export skel_timing=ON
+    export adios_timers=ON
     export CC=mpicc
     export CXX=mpicxx
     export FC=mpif90
@@ -1009,11 +597,11 @@ elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
     echo "Configure on adiosVM VirtualBox ."
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
-    export skel_timing=ON
+    export adios_timers=ON
     export CC=mpicc
     export CXX=mpicxx
     export FC=mpif90
-    export INSTALL_PREFIX="/opt/adios/1.7"
+    export INSTALL_PREFIX="/opt/adios/1.8"
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
     export MXML_DIR=/opt/mxml/2.8
diff --git a/config.h.cmake b/config.h.cmake
index d85c7ab..7afa509 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -79,6 +79,9 @@
 /* Define to 1 if you have the <dmalloc.h> header file. */
 #cmakedefine  HAVE_DMALLOC_H 1
 
+/* Define if we have libfastbit */
+#cmakedefine HAVE_FASTBIT 1
+
 /* Define to 1 if you have the `fdatasync' function. */
 #cmakedefine HAVE_FDATASYNC 1
 
@@ -100,11 +103,17 @@
 /* Define to 1 if you have the <hdf5.h> header file. */
 #cmakedefine HAVE_HDF5_H 1
 
+/* Define to 1 if you have the <iapi.h> header file. */
+#cmakedefine HAVE_IAPI_H 1
+
 /* Define to 1 if you have <infiniband/verbs.h>. */
 #cmakedefine HAVE_IBVERBS_H 1
 
 #cmakedefine HAVE_IBVERBS 1
 
+/* icee is enabled */
+#cmakedefine HAVE_ICEE 1
+
 /* Define if you have the Infiniband. */
 #cmakedefine HAVE_INFINIBAND 1
 
@@ -215,6 +224,9 @@
 /* Define to 1 if the system has the type `ptl_time_t'. */
 #cmakedefine HAVE_PTL_TIME_T 1
 
+/* Define if you have RIDCOMPRESS. */
+#cmakedefine HAVE_RIDCOMPRESS 1
+
 /* Define to 1 if you have the `sched_yield' function. */
 #cmakedefine HAVE_SCHED_YIELD 1
 
@@ -266,6 +278,9 @@
 /* Datatap is disabled */
 #cmakedefine NO_DATATAP 1
 
+/* Flexpath is disabled */
+#cmakedefine NO_FLEXPATH 1
+
 /* Define to 1 if your C compiler doesn't accept -c and -o together. */
 #cmakedefine NO_MINUS_C_MINUS_O 1
 
@@ -291,8 +306,8 @@
    your system. */
 #cmakedefine PTHREAD_CREATE_JOINABLE ${PTHREAD_CREATE_JOINABLE}
 
-/* Skel timing is enabled */
-#cmakedefine SKEL_TIMING 1
+/* ADIOS timing is enabled */
+#cmakedefine ADIOS_TIMERS 1
 
 /* research_transports is enabled */
 #define RESEARCH_TRANSPORTS ${RESEARCH_TRANSPORTS}
diff --git a/config.h.in b/config.h.in
index b503611..a5057c9 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,5 +1,11 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* Adios timing is enabled */
+#undef ADIOS_TIMERS
+
+/* Adios timing events are enabled */
+#undef ADIOS_TIMER_EVENTS
+
 /* Define to dummy `main' function (if any) required to link to the Fortran
    libraries. */
 #undef FC_DUMMY_MAIN
@@ -77,6 +83,9 @@
 /* Define to 1 if you have the <dmalloc.h> header file. */
 #undef HAVE_DMALLOC_H
 
+/* Define if we have libfastbit */
+#undef HAVE_FASTBIT
+
 /* Define to 1 if you have the `fdatasync' function. */
 #undef HAVE_FDATASYNC
 
@@ -98,9 +107,15 @@
 /* Define to 1 if you have the <hdf5.h> header file. */
 #undef HAVE_HDF5_H
 
+/* Define to 1 if you have the <iapi.h> header file. */
+#undef HAVE_IAPI_H
+
 /* Define to 1 if you have <infiniband/verbs.h>. */
 #undef HAVE_IBVERBS_H
 
+/* ICEE method is enabled */
+#undef HAVE_ICEE
+
 /* Define if you have the Infiniband. */
 #undef HAVE_INFINIBAND
 
@@ -215,6 +230,9 @@
 /* Define to 1 if the system has the type `ptl_time_t'. */
 #undef HAVE_PTL_TIME_T
 
+/* Define if you have RIDCOMPRESS. */
+#undef HAVE_RIDCOMPRESS
+
 /* Define to 1 if you have the `sched_yield' function. */
 #undef HAVE_SCHED_YIELD
 
@@ -298,9 +316,6 @@
    your system. */
 #undef PTHREAD_CREATE_JOINABLE
 
-/* Skel timing is enabled */
-#undef SKEL_TIMING
-
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
diff --git a/config/ac_alacrity.m4 b/config/ac_alacrity.m4
index fbce7de..7be64ec 100755
--- a/config/ac_alacrity.m4
+++ b/config/ac_alacrity.m4
@@ -24,7 +24,7 @@ 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_LIBS="-lalacrity";
          ALACRITY_CPPFLAGS="-I$withval/include";],
         [with_alacrity=no])
 
diff --git a/config/ac_bzip2.m4 b/config/ac_bzip2.m4
index 10f5f24..9a2267c 100644
--- a/config/ac_bzip2.m4
+++ b/config/ac_bzip2.m4
@@ -12,8 +12,9 @@ dnl     #ifdef BZIP2
 dnl     #include "bzlib.h"
 dnl     #endif
 dnl
-dnl @version 1.0
+dnl @version 2.0
 dnl @author Zhenhuan (Steve) Gong
+dnl dnl @author Norbert Podhorszki
 dnl
 AC_DEFUN([AC_BZIP2],[
 
@@ -23,10 +24,7 @@ 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])
+        [:], [with_bzip2=no])
 
 if test "x$with_bzip2" == "xno"; then
 
@@ -37,7 +35,20 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    LIBS="$LIBS -lbz2"
+
+    if test "x$with_bzip2" == "xyes"; then
+        dnl No path given
+        BZIP2_CPPFLAGS=""
+        BZIP2_LDFLAGS=""
+        BZIP2_LIBS="-lbz2"
+    else
+        dnl Path given, first try path/lib64
+        BZIP2_CPPFLAGS="-I$withval/include"
+        BZIP2_LDFLAGS="-L$withval/lib64"
+        BZIP2_LIBS="-lbz2"
+    fi
+
+    LIBS="$LIBS $BZIP2_LIBS"
     LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $BZIP2_CPPFLAGS"
 
@@ -47,11 +58,47 @@ else
                    [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)])
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+        dnl Try to link an example now
+        AC_MSG_CHECKING([if bzip2 code can be linked with $BZIP2_LDFLAGS])
+        AC_TRY_LINK(
+            [#include <stdlib.h>
+             #include "bzlib.h"],
+            [char* in, *out;
+             unsigned int in_len, *out_len;
+             int blocksize100k = 5;
+             int bzerr = BZ2_bzBuffToBuffCompress (
+                           out, out_len, in, in_len, blocksize100k, 0, 30);
+             return (bzerr != BZ_OK);],
+            [AC_MSG_RESULT(yes)],
+            [AM_CONDITIONAL(HAVE_BZIP2,false)
+             AC_MSG_RESULT(no)
+            ])
+
+        dnl If linking above failed, one reason might be that we looked in lib64/
+        dnl instead of lib/
+        if test -z "${HAVE_BZIP2_FALSE}"; then
+            if test "x$with_lustre" != "xyes"; then
+            BZIP2_LDFLAGS="-L$withval/lib"
+            LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
+            AC_MSG_CHECKING([if bzip2 code can be linked with $BZIP2_LDFLAGS])
+            AC_TRY_LINK(
+                [#include <stdlib.h>
+                 #include "bzlib.h"],
+                [char* in, *out;
+                 unsigned int in_len, *out_len;
+                 int blocksize100k = 5;
+                 int bzerr = BZ2_bzBuffToBuffCompress (
+                               out, out_len, in, in_len, blocksize100k, 0, 30);
+                 return (bzerr != BZ_OK);],
+                [AC_MSG_RESULT(yes)],
+                [AM_CONDITIONAL(HAVE_BZIP2,false)
+                 AC_MSG_RESULT(no)
+                ])
+            fi
+        fi
+    fi
+ 
 
     LIBS="$save_LIBS"
     LDFLAGS="$save_LDFLAGS"
diff --git a/config/ac_dimes.m4 b/config/ac_dimes.m4
index 6b4f1d8..e677dfa 100644
--- a/config/ac_dimes.m4
+++ b/config/ac_dimes.m4
@@ -81,11 +81,7 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_infiniband_lib_ok}" == "xyes"; then 
-        dnl LIBS="$LIBS -ldspaces -ldscommon -ldart"
-	echo "DIMES currently NOT supported for Infiniband!"
-	AM_CONDITIONAL(HAVE_DIMES, false)
-    elif test "x${ac_portals_lib_ok}" == "xyes"; then 
+    if test "x${ac_portals_lib_ok}" == "xyes"; then 
         dnl LIBS="$LIBS -ldart2 -lspaces"
 	echo "DIMES currently NOT supported for Cray Portals!"
 	AM_CONDITIONAL(HAVE_DIMES, false)
@@ -110,6 +106,11 @@ else
                     [int err; dimes_put_sync_all();],
                     [DIMES_LIBS="-ldspaces -ldscommon -ldart"],
                     [AM_CONDITIONAL(HAVE_DIMES,false)])
+	elif test "x${ac_infiniband_lib_ok}" == "xyes"; then 
+            AC_TRY_COMPILE([#include "dimes_interface.h"],
+                    [int err; dimes_put_sync_all();],
+                    [DIMES_LIBS="-ldspaces -ldscommon -ldart"],
+                    [AM_CONDITIONAL(HAVE_DIMES,false)])
 	elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
             AC_TRY_COMPILE([#include "dimes_interface.h"],
                     [int err; dimes_put_sync_all();],
diff --git a/config/ac_fastbit.m4 b/config/ac_fastbit.m4
new file mode 100644
index 0000000..510b077
--- /dev/null
+++ b/config/ac_fastbit.m4
@@ -0,0 +1,73 @@
+AC_DEFUN([AC_FASTBIT], [
+
+dnl Enable the --with-fastbit=path configure argument
+AC_ARG_WITH(
+  [fastbit],
+  [AS_HELP_STRING(
+    [--with-fastbit=DIR],
+    [Location of the FastBit library]
+  )]dnl
+)
+
+dnl If the lib was specified, verify that it exists and can compile
+if test "x$with_fastbit" != xno; then
+    FASTBIT_CPPFLAGS="-I$with_fastbit/include"
+    FASTBIT_LDFLAGS="-L$with_fastbit/lib"
+    FASTBIT_LIBS="-lfastbit"
+
+    saveCPPFLAGS="$CPPFLAGS"
+    saveLDFLAGS="$LDFLAGS"
+
+    AC_LANG_PUSH([C++])
+
+    CPPFLAGS="$CPPFLAGS $FASTBIT_CPPFLAGS"
+    LDFLAGS="$LDFLAGS $FASTBIT_LDFLAGS $FASTBIT_LIBS"
+
+    AC_CHECK_HEADERS(
+      [iapi.h],
+      [HAVE_FASTBIT=y],
+      [HAVE_FASTBIT="";dnl
+       AC_MSG_RESULT(
+        [Cannot find iapi.h from the FastBit lib. Make sure it has been properly installed at the path specified ($with_fastbit).]dnl
+      )]dnl
+    )
+
+dnl Removed this test because FastBit is all C++, and autoconf chokes on C++ lib linking tests
+dnl    AC_CHECK_LIB(
+dnl      [fastbit],
+dnl      [ibis::gParameters],
+dnl      [AC_DEFINE(
+dnl        [HAVE_FASTBIT],
+dnl        [1],
+dnl        [Define if you have FastBit]
+dnl      )],
+dnl      [AC_MSG_FAILURE(
+dnl        [Cannot successfully link with the FastBit lib. Make sure it has been properly installed at the path specified ($with_fastbit).]dnl
+dnl      )],dnl
+dnl    )
+    
+    CPPFLAGS="$saveCPPFLAGS"
+    LDFLAGS="$saveLDFLAGS"
+
+    AC_LANG_POP([C++])
+
+    if test -z "$HAVE_FASTBIT"; then
+      AM_CONDITIONAL(HAVE_FASTBIT,false)
+      AC_MSG_RESULT([Not building with FastBit library])
+    else
+      AC_SUBST(FASTBIT_CPPFLAGS)
+      AC_SUBST(FASTBIT_LDFLAGS)
+      AC_SUBST(FASTBIT_LIBS)
+
+      AM_CONDITIONAL(HAVE_FASTBIT,true)
+      AC_DEFINE([HAVE_FASTBIT], [1], [Define if we have libfastbit])
+
+      AC_MSG_RESULT([FastBit library found at $with_fastbit])
+    fi
+else
+  AM_CONDITIONAL(HAVE_FASTBIT,false)
+
+  AC_MSG_RESULT([Not building with FastBit library])
+fi
+
+]) dnl End of DEFUN
diff --git a/config/ac_ncsu_timer.m4 b/config/ac_ncsu_timer.m4
index 1c5e928..c313aaa 100644
--- a/config/ac_ncsu_timer.m4
+++ b/config/ac_ncsu_timer.m4
@@ -18,7 +18,7 @@ if test "x$with_timer" != xno -a "x$with_timer" != x; then
 
     TIMER_CPPFLAGS="-I$with_timer/include"
     TIMER_LDFLAGS="-L$with_timer/lib"
-    TIMER_LIBS="-ltimer"
+    TIMER_LIBS="-ltimer -lm"
 
     saveLIB="$LIB"
     saveLDFLAGS="$LDFLAGS"
@@ -45,7 +45,8 @@ if test "x$with_timer" != xno -a "x$with_timer" != x; then
       )],
       [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
+      )],
+      [-lm]dnl
     )
 
     LIBS="$saveLIBS"
diff --git a/config/ac_nssi.m4 b/config/ac_nssi.m4
index 289c351..72debf2 100644
--- a/config/ac_nssi.m4
+++ b/config/ac_nssi.m4
@@ -129,12 +129,12 @@ if test x"$ac_nssi_ok" = xyes; then
                 dnl AC_MSG_CHECKING([LIBS=$LIBS])
 
                 dnl Check for various functions.
-                AC_LINK_IFELSE(AC_LANG_PROGRAM(
+                AC_LINK_IFELSE([AC_LANG_PROGRAM(
                             [[#include "nssi_client.h"]],
                             [[nssi_remote_pid server_id;]
                              [uint64_t timeout;]
                              [nssi_service svc;]
-                             [nssi_get_service(server_id, timeout, &svc);]]),
+                             [nssi_get_service(server_id, timeout, &svc);]])],
                         [ac_nssi_ok=yes;],
                         [ac_nssi_ok=no;])
 
diff --git a/config/ac_portals.m4 b/config/ac_portals.m4
index 24c34a0..04b09c8 100644
--- a/config/ac_portals.m4
+++ b/config/ac_portals.m4
@@ -136,7 +136,7 @@ if test x"$ac_with_portals" = xyes; then
 
             AC_MSG_CHECKING([if portals links with $LDFLAGS $LIBS])
 
-            AC_LINK_IFELSE(AC_LANG_CALL([],[PtlInit]),
+            AC_LINK_IFELSE([AC_LANG_CALL([],[PtlInit])],
                         [PORTALS_LIBS=$extra_LIBS;
                         ac_portals_lib_ok=yes;
                         AC_MSG_RESULT(yes)],
@@ -182,8 +182,8 @@ if test x"$ac_with_portals" = xyes; then
                 CPPFLAGS="$CPPFLAGS $PORTALS_CPPFLAGS"
                 LDFLAGS="$LDFLAGS $PORTALS_LDFLAGS"
 
-                dnl See if Portals will link with the provided flags
-                AC_LINK_IFELSE(AC_LANG_CALL([],[PtlInit]),
+                See if Portals will link with the provided flags
+                AC_LINK_IFELSE([AC_LANG_CALL([],[PtlInit])],
                         [PORTALS_CFLAGS="$PORTALS_CFLAGS $EXTRA_CFLAGS";
                         PORTALS_CPPFLAGS="$PORTALS_CPPFLAGS $EXTRA_CPPFLAGS";
                         PORTALS_LIBS="$PORTALS_LIBS $EXTRA_LIBS";
@@ -246,7 +246,7 @@ if test x"$ac_with_portals" = xyes; then
 
                 dnl See if we have PTL_NO_ACK_REQ or PTL_NOACK_REQ
                 AC_MSG_CHECKING([whether portals uses PTL_NO_ACK_REQ])
-                AC_LINK_IFELSE(AC_LANG_PROGRAM(
+                AC_LINK_IFELSE([AC_LANG_PROGRAM(
                         [#if defined(HAVE_PORTALS3_H)
                          #include <portals3.h>
                          #elif defined(HAVE_PORTALS_PORTALS3_H)
@@ -254,7 +254,7 @@ if test x"$ac_with_portals" = xyes; then
                          #else
                          #error Cound not find include file
                          #endif
-                 ],[int a = PTL_NO_ACK_REQ;]),
+                 ],[int a = PTL_NO_ACK_REQ;])],
                  [# Success
                   AC_DEFINE(HAVE_PTL_NO_ACK_REQ,1,[Define if you have PTL_NO_ACK_REQ.])
                   AC_MSG_RESULT(yes)
@@ -262,7 +262,7 @@ if test x"$ac_with_portals" = xyes; then
                  [
                   AC_MSG_RESULT(no)
                   AC_MSG_CHECKING([whether portals uses PTL_NOACK_REQ])
-                  AC_LINK_IFELSE(AC_LANG_PROGRAM(
+                  AC_LINK_IFELSE([AC_LANG_PROGRAM(
                               [#if defined(HAVE_PORTALS3_H)
                                #include <portals3.h>
                                #elif defined(HAVE_PORTALS_PORTALS3_H)
@@ -270,7 +270,7 @@ if test x"$ac_with_portals" = xyes; then
                                #else
                                #error Cound not find include file
                                #endif
-                       ],[int a = PTL_NOACK_REQ;]),
+                       ],[int a = PTL_NOACK_REQ;])],
                        [# Success
                         AC_DEFINE(HAVE_PTL_NOACK_REQ,1,[Define if you have PTL_NOACK_REQ.])
                         AC_MSG_RESULT(yes)
diff --git a/config/ac_ridcompress.m4 b/config/ac_ridcompress.m4
new file mode 100755
index 0000000..d444420
--- /dev/null
+++ b/config/ac_ridcompress.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_RIDCOMPRESS
+#
+#
+#
+dnl @synopsis AC_RIDCOMPRESS
+dnl
+dnl This macro test if RIDCOMPRESS is to be used.
+dnl Use in C code:
+dnl     #ifdef RIDCOMPRESS
+dnl     #include "pfordelta-c-interface.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author David A. Boyuka II
+dnl
+AC_DEFUN([AC_RIDCOMPRESS],[
+
+AC_MSG_NOTICE([=== checking for RIDCOMPRESS ===])
+
+AM_CONDITIONAL(HAVE_RIDCOMPRESS,true)
+
+AC_ARG_WITH([ridcompress],
+        [  --with-ridcompress=DIR      Location of RIDCOMPRESS library],
+        [RIDCOMPRESS_LDFLAGS="-L$withval/ -L$withval/lib";
+         RIDCOMPRESS_LIBS="-lridcompress -lstdc++";
+         RIDCOMPRESS_CPPFLAGS="-I$withval/ -I$withval/include";],
+        [with_RIDCOMPRESS=no])
+
+if test "x$with_RIDCOMPRESS" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_RIDCOMPRESS,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $RIDCOMPRESS_LIBS"
+    LDFLAGS="$LDFLAGS $RIDCOMPRESS_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $RIDCOMPRESS_CPPFLAGS"
+
+    dnl if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+    dnl        AC_CHECK_HEADERS(pfordelta-c-interface.h,
+    dnl                ,
+    dnl                [AM_CONDITIONAL(HAVE_RIDCOMPRESS,false)])
+    dnl fi
+
+    # Check for the RIDCOMPRESS 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        [RIDCOMPRESS_LIBS="-lRIDCOMPRESS"],
+    dnl        [AM_CONDITIONAL(HAVE_RIDCOMPRESS,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(RIDCOMPRESS_LIBS)
+    AC_SUBST(RIDCOMPRESS_LDFLAGS)
+    AC_SUBST(RIDCOMPRESS_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_RIDCOMPRESS,1,[Define if you have RIDCOMPRESS.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_RIDCOMPRESS
diff --git a/config/ac_zlib.m4 b/config/ac_zlib.m4
index 5d6544b..344e6e5 100644
--- a/config/ac_zlib.m4
+++ b/config/ac_zlib.m4
@@ -12,8 +12,9 @@ dnl     #ifdef ZLIB
 dnl     #include "zlib.h"
 dnl     #endif
 dnl
-dnl @version 1.0
+dnl @version 2.0
 dnl @author Zhenhuan (Steve) Gong
+dnl @author Norbert Podhorszki
 dnl
 AC_DEFUN([AC_ZLIB],[
 
@@ -23,10 +24,7 @@ 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])
+        [:], [with_zlib=no])
 
 if test "x$with_zlib" == "xno"; then
 
@@ -37,22 +35,67 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
+
+    if test "x$with_zlib" == "xyes"; then
+        dnl No path given
+        ZLIB_CPPFLAGS=""
+        ZLIB_LDFLAGS=""
+        ZLIB_LIBS="-lz"
+    else
+        dnl Path given, first try path/lib64
+        ZLIB_CPPFLAGS="-I$withval/include"
+        ZLIB_LDFLAGS="-L$withval/lib64"
+        ZLIB_LIBS="-lz"
+    fi
+
     LIBS="$LIBS $ZLIB_LIBS"
     LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
 
+    dnl Find header file first
+    AC_CHECK_HEADERS(zlib.h,
+              ,
+              [AM_CONDITIONAL(HAVE_ZLIB,false)])
+
     if test -z "${HAVE_ZLIB_TRUE}"; then
-           AC_CHECK_HEADERS(zlib.h,
-                   ,
-                   [AM_CONDITIONAL(HAVE_ZLIB,false)])
+        dnl Try to link an example now
+        AC_MSG_CHECKING([if zlib code can be linked with $ZLIB_LDFLAGS])
+        AC_TRY_LINK(
+            [#include <stdlib.h>
+             #include "zlib.h"],
+            [Bytef* in, *out;
+             uLongf in_len, *out_len;
+             int level = 5;
+             int zerr = compress2 (out, out_len, in, in_len, level);
+             return (zerr != Z_OK);],
+            [AC_MSG_RESULT(yes)],
+            [AM_CONDITIONAL(HAVE_ZLIB,false)
+             AC_MSG_RESULT(no)
+            ])
+            
+        dnl If linking above failed, one reason might be that we looked in lib64/
+        dnl instead of lib/
+        if test -z "${HAVE_ZLIB_FALSE}"; then
+            if test "x$with_lustre" != "xyes"; then
+            ZLIB_LDFLAGS="-L$withval/lib"
+            LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+            AC_MSG_CHECKING([if zlib code can be linked with $ZLIB_LDFLAGS])
+            AC_TRY_LINK(
+                [#include <stdlib.h>
+                 #include "zlib.h"],
+                [Bytef* in, *out;
+                 uLongf in_len, *out_len;
+                 int level = 5;
+                 int zerr = compress2 (out, out_len, in, in_len, level);
+                 return (zerr != Z_OK);],
+                [AC_MSG_RESULT(yes)],
+                [AM_CONDITIONAL(HAVE_ZLIB,false)
+                 AC_MSG_RESULT(no)
+                ])
+            fi
+        fi
     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"
diff --git a/aclocal.m4 b/config/libtool.m4
similarity index 80%
copy from aclocal.m4
copy to config/libtool.m4
index 0d5abd2..671cde1 100644
--- a/aclocal.m4
+++ b/config/libtool.m4
@@ -1,24 +1,3 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
-[m4_warning([this file was generated for autoconf 2.63.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
@@ -284,6 +263,9 @@ ltmain="$ac_aux_dir/ltmain.sh"
 ])# _LT_PROG_LTMAIN
 
 
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
 
 # So that we can recreate a full libtool script including additional
 # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
@@ -337,6 +319,9 @@ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
 
 
 
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
 
 
 # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
@@ -5275,6 +5260,10 @@ compiler_DEFAULT=$CC
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
   _LT_COMPILER_NO_RTTI($1)
   _LT_COMPILER_PIC($1)
@@ -6904,6 +6893,10 @@ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
   _LT_COMPILER_NO_RTTI($1)
   _LT_COMPILER_PIC($1)
@@ -7042,10 +7035,12 @@ _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
 ])# _LT_DECL_SED
 
 m4_ifndef([AC_PROG_SED], [
+############################################################
 # NOTE: This macro has been submitted for inclusion into   #
 #  GNU Autoconf as AC_PROG_SED.  When it is available in   #
 #  a released version of Autoconf we should remove this    #
 #  macro and use it instead.                               #
+############################################################
 
 m4_defun([AC_PROG_SED],
 [AC_MSG_CHECKING([for a sed that does not truncate output])
@@ -7363,1645 +7358,3 @@ _LT_EOF
     ;;
   esac
 ])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3017 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 10
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 16
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-			     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_MAINTAINER_MODE([DEFAULT-MODE])
-# ----------------------------------
-# Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless `enable' is passed literally.
-# For symmetry, `disable' may be passed as well.  Anyway, the user
-# can override the default with the --enable/--disable switch.
-AC_DEFUN([AM_MAINTAINER_MODE],
-[m4_case(m4_default([$1], [disable]),
-       [enable], [m4_define([am_maintainer_other], [disable])],
-       [disable], [m4_define([am_maintainer_other], [enable])],
-       [m4_define([am_maintainer_other], [enable])
-        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
-  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
-  AC_ARG_ENABLE([maintainer-mode],
-[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
-			  (and sometimes confusing) to the casual installer],
-      [USE_MAINTAINER_MODE=$enableval],
-      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
-  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
-  MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST([MAINT])dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-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])
-m4_include([config/ac_datatap.m4])
-m4_include([config/ac_dcmf.m4])
-m4_include([config/ac_dimes.m4])
-m4_include([config/ac_dmalloc.m4])
-m4_include([config/ac_fgr.m4])
-m4_include([config/ac_flexpath.m4])
-m4_include([config/ac_glib.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_pami.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/config/ltoptions.m4 b/config/ltoptions.m4
new file mode 100644
index 0000000..34151a3
--- /dev/null
+++ b/config/ltoptions.m4
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/config/ltsugar.m4 b/config/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/config/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/config/ltversion.m4 b/config/ltversion.m4
new file mode 100644
index 0000000..f3c5309
--- /dev/null
+++ b/config/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/config/lt~obsolete.m4 b/config/lt~obsolete.m4
new file mode 100644
index 0000000..637bb20
--- /dev/null
+++ b/config/lt~obsolete.m4
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/configure b/configure
index 058eb8a..ceeb4a9 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Revision.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63.
+# Generated by GNU Autoconf 2.63 for adios 1.8.0.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -742,11 +742,11 @@ MAKEFLAGS=
 SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
+PACKAGE_NAME='adios'
+PACKAGE_TARNAME='adios'
+PACKAGE_VERSION='1.8.0'
+PACKAGE_STRING='adios 1.8.0'
+PACKAGE_BUGREPORT=''
 
 ac_unique_file="configure.ac"
 # Factoring default headers for most tests.
@@ -810,15 +810,20 @@ ADIOSLIB_LDADD
 ADIOSLIB_LDFLAGS
 ADIOSLIB_CFLAGS
 ADIOSLIB_CPPFLAGS
+HAVE_ICEE_FALSE
+HAVE_ICEE_TRUE
 MACRODEFFLAG
 USE_PARALLEL_COMPILER_FALSE
 USE_PARALLEL_COMPILER_TRUE
 HAVE_DATATAP_FALSE
 HAVE_DATATAP_TRUE
-SKEL_TIMING
+ADIOS_TIMER_EVENTS
+ADIOS_TIMER_EVENTS_FALSE
+ADIOS_TIMER_EVENTS_TRUE
+ADIOS_TIMERS
 SKEL_HAVE_ADIOS_TIMING
-SKEL_TIMING_FALSE
-SKEL_TIMING_TRUE
+ADIOS_TIMERS_FALSE
+ADIOS_TIMERS_TRUE
 RESEARCH_TRANSPORTS_FALSE
 RESEARCH_TRANSPORTS_TRUE
 HAVE_BGQ_FALSE
@@ -828,6 +833,16 @@ TIMER_LDFLAGS
 TIMER_CPPFLAGS
 HAVE_NCSU_TIMER_FALSE
 HAVE_NCSU_TIMER_TRUE
+FASTBIT_LIBS
+FASTBIT_LDFLAGS
+FASTBIT_CPPFLAGS
+HAVE_FASTBIT_FALSE
+HAVE_FASTBIT_TRUE
+RIDCOMPRESS_CPPFLAGS
+RIDCOMPRESS_LDFLAGS
+RIDCOMPRESS_LIBS
+HAVE_RIDCOMPRESS_FALSE
+HAVE_RIDCOMPRESS_TRUE
 ALACRITY_CPPFLAGS
 ALACRITY_LDFLAGS
 ALACRITY_LIBS
@@ -1181,10 +1196,13 @@ with_szip
 with_isobar
 with_aplod
 with_alacrity
+with_ridcompress
+with_fastbit
 with_timer
 with_bgq
 enable_research_transports
-enable_skel_timing
+enable_timers
+enable_timer_events
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1244,7 +1262,7 @@ sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1756,7 +1774,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures adios 1.8.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1804,7 +1822,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/adios]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1825,7 +1843,9 @@ _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of adios 1.8.0:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1847,8 +1867,10 @@ Optional Features:
                           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-timers        Disable the adios timing mechanism. By default the
+                          timers are used.
+  --enable-timer-events   Enable adios timing events. By default the events
+                          are not used.
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1919,6 +1941,8 @@ Optional Packages:
   --with-isobar=DIR      Location of ISOBAR library
   --with-aplod=DIR      Location of APLOD library
   --with-alacrity=DIR      Location of ALACRITY library
+  --with-ridcompress=DIR      Location of RIDCOMPRESS library
+  --with-fastbit=DIR      Location of the FastBit library
   --with-timer=DIR        Location of the timer library,,
   with_timer=no
   --with-bgq 	Whether to enable BGQ method or not
@@ -2006,7 +2030,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
+adios configure 1.8.0
 generated by GNU Autoconf 2.63
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -2020,7 +2044,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
+It was created by adios $as_me 1.8.0, which was
 generated by GNU Autoconf 2.63.  Invocation command line was
 
   $ $0 $@
@@ -2373,6 +2397,14 @@ fi
 
 
 
+
+
+
+
+
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2380,6 +2412,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
   if test -f "$ac_dir/install-sh"; then
@@ -2865,8 +2898,8 @@ fi
 
 
 # Define the identity of the package.
- PACKAGE=adios
- VERSION=1.7.0
+ PACKAGE='adios'
+ VERSION='1.8.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -8835,13 +8868,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:8838: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:8871: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8841: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:8874: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8844: output\"" >&5)
+  (eval echo "\"\$as_me:8877: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -10046,7 +10079,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 10049 "configure"' > conftest.$ac_ext
+  echo '#line 10082 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -12698,6 +12731,10 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
@@ -12723,11 +12760,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:12726: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12763: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12730: \$? = $ac_status" >&5
+   echo "$as_me:12767: \$? = $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.
@@ -13062,11 +13099,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:13065: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13102: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13069: \$? = $ac_status" >&5
+   echo "$as_me:13106: \$? = $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.
@@ -13167,11 +13204,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:13170: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13207: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13174: \$? = $ac_status" >&5
+   echo "$as_me:13211: \$? = $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
@@ -13222,11 +13259,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:13225: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13262: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13229: \$? = $ac_status" >&5
+   echo "$as_me:13266: \$? = $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
@@ -16105,7 +16142,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16108 "configure"
+#line 16145 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16201,7 +16238,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16204 "configure"
+#line 16241 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18237,11 +18274,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:18240: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18277: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:18244: \$? = $ac_status" >&5
+   echo "$as_me:18281: \$? = $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.
@@ -18336,11 +18373,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:18339: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18376: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18343: \$? = $ac_status" >&5
+   echo "$as_me:18380: \$? = $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
@@ -18388,11 +18425,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:18391: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18428: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18395: \$? = $ac_status" >&5
+   echo "$as_me:18432: \$? = $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
@@ -19940,11 +19977,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:19943: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19980: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:19947: \$? = $ac_status" >&5
+   echo "$as_me:19984: \$? = $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.
@@ -20039,11 +20076,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:20042: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20079: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:20046: \$? = $ac_status" >&5
+   echo "$as_me:20083: \$? = $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
@@ -20091,11 +20128,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:20094: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20131: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:20098: \$? = $ac_status" >&5
+   echo "$as_me:20135: \$? = $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
@@ -24864,7 +24901,8 @@ $as_echo_n "checking whether portals works with library -l$flag... " >&6; }
                 CPPFLAGS="$CPPFLAGS $PORTALS_CPPFLAGS"
                 LDFLAGS="$LDFLAGS $PORTALS_LDFLAGS"
 
-                                cat >conftest.$ac_ext <<_ACEOF
+                See if Portals will link with the provided flags
+                cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -28881,17 +28919,7 @@ fi
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_infiniband_lib_ok}" == "xyes"; then
-        	echo "DIMES currently NOT supported for Infiniband!"
-	 if false; then
-  HAVE_DIMES_TRUE=
-  HAVE_DIMES_FALSE='#'
-else
-  HAVE_DIMES_TRUE='#'
-  HAVE_DIMES_FALSE=
-fi
-
-    elif test "x${ac_portals_lib_ok}" == "xyes"; then
+    if test "x${ac_portals_lib_ok}" == "xyes"; then
         	echo "DIMES currently NOT supported for Cray Portals!"
 	 if false; then
   HAVE_DIMES_TRUE=
@@ -29132,7 +29160,7 @@ fi
 rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
-	elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
+	elif test "x${ac_infiniband_lib_ok}" == "xyes"; then
             cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -29190,7 +29218,7 @@ fi
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	elif test "x${ac_pami_lib_ok}" == "xyes"; then
+	elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
             cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -29248,248 +29276,14 @@ fi
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-        else
-             if false; then
-  HAVE_DIMES_TRUE=
-  HAVE_DIMES_FALSE='#'
-else
-  HAVE_DIMES_TRUE='#'
-  HAVE_DIMES_FALSE=
-fi
-
-        fi
-    fi
-
-    LIBS="$save_LIBS"
-    LDFLAGS="$save_LDFLAGS"
-    CPPFLAGS="$save_CPPFLAGS"
-
-
-
-
-
-    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-    if test -z "${HAVE_DIMES_TRUE}"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DIMES 1
-_ACEOF
-
-            :
-    else
-
-            :
-    fi
-
-fi
-
-
-
- if true; then
-  HAVE_DMALLOC_TRUE=
-  HAVE_DMALLOC_FALSE='#'
-else
-  HAVE_DMALLOC_TRUE='#'
-  HAVE_DMALLOC_FALSE=
-fi
-
-
-
-# Check whether --with-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
-  withval=$with_dmalloc; DMALLOC_LDFLAGS="-L$withval/lib";
-         DMALLOC_CPPFLAGS="-I$withval/include";
-else
-  with_dmalloc=no
-fi
-
-
-if test "x$with_dmalloc" == "xno"; then
-
-     if false; then
-  HAVE_DMALLOC_TRUE=
-  HAVE_DMALLOC_FALSE='#'
-else
-  HAVE_DMALLOC_TRUE='#'
-  HAVE_DMALLOC_FALSE=
-fi
-
-
-else
-
-    save_CPPFLAGS="$CPPFLAGS"
-    save_LIBS="$LIBS"
-    save_LDFLAGS="$LDFLAGS"
-    LIBS="$LIBS -ldmalloc"
-    LDFLAGS="$LDFLAGS $DMALLOC_LDFLAGS"
-    CPPFLAGS="$CPPFLAGS $DMALLOC_CPPFLAGS"
-
-    if test -z "${HAVE_DMALLOC_TRUE}"; then
-
-for ac_header in dmalloc.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_DMALLOC_TRUE=
-  HAVE_DMALLOC_FALSE='#'
-else
-  HAVE_DMALLOC_TRUE='#'
-  HAVE_DMALLOC_FALSE=
-fi
-
-fi
-
-done
-
-    fi
-
-    # Check for the dmalloc library and headers
-    cat >conftest.$ac_ext <<_ACEOF
+	elif test "x${ac_pami_lib_ok}" == "xyes"; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include "dmalloc.h"
+#include "dimes_interface.h"
 #ifdef FC_DUMMY_MAIN
 #ifndef FC_DUMMY_MAIN_EQ_F77
 #  ifdef __cplusplus
@@ -29501,7 +29295,299 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-char * s; s=malloc(sizeof(char)*10); free(s);
+int err; dimes_put_sync_all();
+  ;
+  return 0;
+}
+_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
+  DIMES_LIBS="-ldspaces -ldscommon -ldart"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_DIMES_TRUE=
+  HAVE_DIMES_FALSE='#'
+else
+  HAVE_DIMES_TRUE='#'
+  HAVE_DIMES_FALSE=
+fi
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        else
+             if false; then
+  HAVE_DIMES_TRUE=
+  HAVE_DIMES_FALSE='#'
+else
+  HAVE_DIMES_TRUE='#'
+  HAVE_DIMES_FALSE=
+fi
+
+        fi
+    fi
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_DIMES_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DIMES 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+
+fi
+
+
+
+ if true; then
+  HAVE_DMALLOC_TRUE=
+  HAVE_DMALLOC_FALSE='#'
+else
+  HAVE_DMALLOC_TRUE='#'
+  HAVE_DMALLOC_FALSE=
+fi
+
+
+
+# Check whether --with-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then
+  withval=$with_dmalloc; DMALLOC_LDFLAGS="-L$withval/lib";
+         DMALLOC_CPPFLAGS="-I$withval/include";
+else
+  with_dmalloc=no
+fi
+
+
+if test "x$with_dmalloc" == "xno"; then
+
+     if false; then
+  HAVE_DMALLOC_TRUE=
+  HAVE_DMALLOC_FALSE='#'
+else
+  HAVE_DMALLOC_TRUE='#'
+  HAVE_DMALLOC_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -ldmalloc"
+    LDFLAGS="$LDFLAGS $DMALLOC_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $DMALLOC_CPPFLAGS"
+
+    if test -z "${HAVE_DMALLOC_TRUE}"; then
+
+for ac_header in dmalloc.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_DMALLOC_TRUE=
+  HAVE_DMALLOC_FALSE='#'
+else
+  HAVE_DMALLOC_TRUE='#'
+  HAVE_DMALLOC_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the dmalloc library and headers
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include "dmalloc.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+char * s; s=malloc(sizeof(char)*10); free(s);
   ;
   return 0;
 }
@@ -30707,11 +30793,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:30710: searching for $search_list " >&5
+echo "configure:30796: 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:30714: first found $tmp_search_results " >&5
+	echo "configure:30800: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30799,11 +30885,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:30802: searching for $search_list " >&5
+echo "configure:30888: 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:30806: first found $tmp_search_results " >&5
+	echo "configure:30892: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30872,11 +30958,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:30875: searching for $search_list " >&5
+echo "configure:30961: 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:30879: first found $tmp_search_results " >&5
+	echo "configure:30965: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30914,11 +31000,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:30917: searching for $search_list " >&5
+echo "configure:31003: 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:30921: first found $tmp_search_results " >&5
+	echo "configure:31007: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31042,11 +31128,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:31045: searching for $search_list " >&5
+echo "configure:31131: 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:31049: first found $tmp_search_results " >&5
+	echo "configure:31135: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31134,11 +31220,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:31137: searching for $search_list " >&5
+echo "configure:31223: 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:31141: first found $tmp_search_results " >&5
+	echo "configure:31227: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31207,11 +31293,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31210: searching for $search_list " >&5
+echo "configure:31296: 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:31214: first found $tmp_search_results " >&5
+	echo "configure:31300: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31249,11 +31335,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31252: searching for $search_list " >&5
+echo "configure:31338: 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:31256: first found $tmp_search_results " >&5
+	echo "configure:31342: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31377,11 +31463,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:31380: searching for $search_list " >&5
+echo "configure:31466: 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:31384: first found $tmp_search_results " >&5
+	echo "configure:31470: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31469,11 +31555,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:31472: searching for $search_list " >&5
+echo "configure:31558: 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:31476: first found $tmp_search_results " >&5
+	echo "configure:31562: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31542,11 +31628,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31545: searching for $search_list " >&5
+echo "configure:31631: 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:31549: first found $tmp_search_results " >&5
+	echo "configure:31635: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31584,11 +31670,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31587: searching for $search_list " >&5
+echo "configure:31673: 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:31591: first found $tmp_search_results " >&5
+	echo "configure:31677: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31735,11 +31821,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:31738: searching for $search_list " >&5
+echo "configure:31824: 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:31742: first found $tmp_search_results " >&5
+	echo "configure:31828: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31827,11 +31913,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:31830: searching for $search_list " >&5
+echo "configure:31916: 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:31834: first found $tmp_search_results " >&5
+	echo "configure:31920: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31900,11 +31986,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:31903: searching for $search_list " >&5
+echo "configure:31989: 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:31907: first found $tmp_search_results " >&5
+	echo "configure:31993: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31942,11 +32028,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:31945: searching for $search_list " >&5
+echo "configure:32031: 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:31949: first found $tmp_search_results " >&5
+	echo "configure:32035: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32102,11 +32188,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:32105: searching for $search_list " >&5
+echo "configure:32191: 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:32109: first found $tmp_search_results " >&5
+	echo "configure:32195: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32194,11 +32280,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:32197: searching for $search_list " >&5
+echo "configure:32283: 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:32201: first found $tmp_search_results " >&5
+	echo "configure:32287: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32267,11 +32353,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:32270: searching for $search_list " >&5
+echo "configure:32356: 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:32274: first found $tmp_search_results " >&5
+	echo "configure:32360: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32309,11 +32395,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:32312: searching for $search_list " >&5
+echo "configure:32398: 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:32316: first found $tmp_search_results " >&5
+	echo "configure:32402: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32437,11 +32523,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:32440: searching for $search_list " >&5
+echo "configure:32526: 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:32444: first found $tmp_search_results " >&5
+	echo "configure:32530: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32529,11 +32615,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:32532: searching for $search_list " >&5
+echo "configure:32618: 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:32536: first found $tmp_search_results " >&5
+	echo "configure:32622: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32602,11 +32688,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32605: searching for $search_list " >&5
+echo "configure:32691: 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:32609: first found $tmp_search_results " >&5
+	echo "configure:32695: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32644,11 +32730,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32647: searching for $search_list " >&5
+echo "configure:32733: 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:32651: first found $tmp_search_results " >&5
+	echo "configure:32737: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32772,11 +32858,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:32775: searching for $search_list " >&5
+echo "configure:32861: 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:32779: first found $tmp_search_results " >&5
+	echo "configure:32865: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32864,11 +32950,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:32867: searching for $search_list " >&5
+echo "configure:32953: 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:32871: first found $tmp_search_results " >&5
+	echo "configure:32957: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32937,11 +33023,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:32940: searching for $search_list " >&5
+echo "configure:33026: 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:32944: first found $tmp_search_results " >&5
+	echo "configure:33030: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32979,11 +33065,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:32982: searching for $search_list " >&5
+echo "configure:33068: 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:32986: first found $tmp_search_results " >&5
+	echo "configure:33072: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33130,11 +33216,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:33133: searching for $search_list " >&5
+echo "configure:33219: 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:33137: first found $tmp_search_results " >&5
+	echo "configure:33223: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33222,11 +33308,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:33225: searching for $search_list " >&5
+echo "configure:33311: 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:33229: first found $tmp_search_results " >&5
+	echo "configure:33315: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33295,11 +33381,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:33298: searching for $search_list " >&5
+echo "configure:33384: 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:33302: first found $tmp_search_results " >&5
+	echo "configure:33388: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33337,11 +33423,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:33340: searching for $search_list " >&5
+echo "configure:33426: 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:33344: first found $tmp_search_results " >&5
+	echo "configure:33430: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33546,11 +33632,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:33549: searching for $search_list " >&5
+echo "configure:33635: 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:33553: first found $tmp_search_results " >&5
+	echo "configure:33639: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33638,11 +33724,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:33641: searching for $search_list " >&5
+echo "configure:33727: 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:33645: first found $tmp_search_results " >&5
+	echo "configure:33731: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33711,11 +33797,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:33714: searching for $search_list " >&5
+echo "configure:33800: 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:33718: first found $tmp_search_results " >&5
+	echo "configure:33804: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33753,11 +33839,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:33756: searching for $search_list " >&5
+echo "configure:33842: 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:33760: first found $tmp_search_results " >&5
+	echo "configure:33846: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33881,11 +33967,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:33884: searching for $search_list " >&5
+echo "configure:33970: 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:33888: first found $tmp_search_results " >&5
+	echo "configure:33974: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33973,11 +34059,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:33976: searching for $search_list " >&5
+echo "configure:34062: 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:33980: first found $tmp_search_results " >&5
+	echo "configure:34066: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34046,11 +34132,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:34049: searching for $search_list " >&5
+echo "configure:34135: 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:34053: first found $tmp_search_results " >&5
+	echo "configure:34139: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34088,11 +34174,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:34091: searching for $search_list " >&5
+echo "configure:34177: 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:34095: first found $tmp_search_results " >&5
+	echo "configure:34181: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34216,11 +34302,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:34219: searching for $search_list " >&5
+echo "configure:34305: 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:34223: first found $tmp_search_results " >&5
+	echo "configure:34309: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34308,11 +34394,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:34311: searching for $search_list " >&5
+echo "configure:34397: 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:34315: first found $tmp_search_results " >&5
+	echo "configure:34401: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34381,11 +34467,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:34384: searching for $search_list " >&5
+echo "configure:34470: 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:34388: first found $tmp_search_results " >&5
+	echo "configure:34474: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34423,11 +34509,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:34426: searching for $search_list " >&5
+echo "configure:34512: 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:34430: first found $tmp_search_results " >&5
+	echo "configure:34516: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34551,11 +34637,11 @@ 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"
 tmp_search_results=""
-echo "configure:34554: searching for $search_list " >&5
+echo "configure:34640: 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:34558: first found $tmp_search_results " >&5
+	echo "configure:34644: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34643,11 +34729,11 @@ 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:34646: searching for $search_list " >&5
+echo "configure:34732: 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:34650: first found $tmp_search_results " >&5
+	echo "configure:34736: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34716,11 +34802,11 @@ else
 
 search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:34719: searching for $search_list " >&5
+echo "configure:34805: 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:34723: first found $tmp_search_results " >&5
+	echo "configure:34809: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34758,11 +34844,11 @@ else
 
 search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:34761: searching for $search_list " >&5
+echo "configure:34847: 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:34765: first found $tmp_search_results " >&5
+	echo "configure:34851: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34886,11 +34972,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:34889: searching for $search_list " >&5
+echo "configure:34975: 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:34893: first found $tmp_search_results " >&5
+	echo "configure:34979: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -34978,11 +35064,11 @@ 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:34981: searching for $search_list " >&5
+echo "configure:35067: 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:34985: first found $tmp_search_results " >&5
+	echo "configure:35071: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -35051,11 +35137,11 @@ else
 
 search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
 tmp_search_results=""
-echo "configure:35054: searching for $search_list " >&5
+echo "configure:35140: 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:35058: first found $tmp_search_results " >&5
+	echo "configure:35144: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -35093,11 +35179,11 @@ else
 
 search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
 tmp_search_results=""
-echo "configure:35096: searching for $search_list " >&5
+echo "configure:35182: 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:35100: first found $tmp_search_results " >&5
+	echo "configure:35186: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -35240,9 +35326,7 @@ 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";
+  withval=$with_zlib; :
 else
   with_zlib=no
 fi
@@ -35264,11 +35348,21 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
+
+    if test "x$with_zlib" == "xyes"; then
+                ZLIB_CPPFLAGS=""
+        ZLIB_LDFLAGS=""
+        ZLIB_LIBS="-lz"
+    else
+                ZLIB_CPPFLAGS="-I$withval/include"
+        ZLIB_LDFLAGS="-L$withval/lib64"
+        ZLIB_LIBS="-lz"
+    fi
+
     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
@@ -35424,9 +35518,162 @@ fi
 
 done
 
-    fi
 
-    # Check for the ZLIB library and headers
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+                { $as_echo "$as_me:$LINENO: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
+$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+             #include "zlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+Bytef* in, *out;
+             uLongf in_len, *out_len;
+             int level = 5;
+             int zerr = compress2 (out, out_len, in, in_len, level);
+             return (zerr != Z_OK);
+  ;
+  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
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+             { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+
+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_ZLIB_FALSE}"; then
+            if test "x$with_lustre" != "xyes"; then
+            ZLIB_LDFLAGS="-L$withval/lib"
+            LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+            { $as_echo "$as_me:$LINENO: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
+$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+                 #include "zlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+Bytef* in, *out;
+                 uLongf in_len, *out_len;
+                 int level = 5;
+                 int zerr = compress2 (out, out_len, in, in_len, level);
+                 return (zerr != Z_OK);
+  ;
+  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
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+                 { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+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"
@@ -35467,9 +35714,7 @@ 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";
+  withval=$with_bzip2; :
 else
   with_bzip2=no
 fi
@@ -35491,7 +35736,18 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    LIBS="$LIBS -lbz2"
+
+    if test "x$with_bzip2" == "xyes"; then
+                BZIP2_CPPFLAGS=""
+        BZIP2_LDFLAGS=""
+        BZIP2_LIBS="-lbz2"
+    else
+                BZIP2_CPPFLAGS="-I$withval/include"
+        BZIP2_LDFLAGS="-L$withval/lib64"
+        BZIP2_LIBS="-lbz2"
+    fi
+
+    LIBS="$LIBS $BZIP2_LIBS"
     LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $BZIP2_CPPFLAGS"
 
@@ -35653,7 +35909,164 @@ done
 
     fi
 
-    # Check for the BZIP2 library and headers
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+                { $as_echo "$as_me:$LINENO: checking if bzip2 code can be linked with $BZIP2_LDFLAGS" >&5
+$as_echo_n "checking if bzip2 code can be linked with $BZIP2_LDFLAGS... " >&6; }
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+             #include "bzlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+char* in, *out;
+             unsigned int in_len, *out_len;
+             int blocksize100k = 5;
+             int bzerr = BZ2_bzBuffToBuffCompress (
+                           out, out_len, in, in_len, blocksize100k, 0, 30);
+             return (bzerr != BZ_OK);
+  ;
+  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
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+             { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+
+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_BZIP2_FALSE}"; then
+            if test "x$with_lustre" != "xyes"; then
+            BZIP2_LDFLAGS="-L$withval/lib"
+            LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
+            { $as_echo "$as_me:$LINENO: checking if bzip2 code can be linked with $BZIP2_LDFLAGS" >&5
+$as_echo_n "checking if bzip2 code can be linked with $BZIP2_LDFLAGS... " >&6; }
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+                 #include "bzlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+char* in, *out;
+                 unsigned int in_len, *out_len;
+                 int blocksize100k = 5;
+                 int bzerr = BZ2_bzBuffToBuffCompress (
+                               out, out_len, in, in_len, blocksize100k, 0, 30);
+                 return (bzerr != BZ_OK);
+  ;
+  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
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+                 { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+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"
@@ -36376,7 +36789,7 @@ 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_LIBS="-lalacrity";
          ALACRITY_CPPFLAGS="-I$withval/include";
 else
   with_alacrity=no
@@ -36430,6 +36843,312 @@ fi
 
 
 
+{ $as_echo "$as_me:$LINENO: === checking for RIDCOMPRESS ===" >&5
+$as_echo "$as_me: === checking for RIDCOMPRESS ===" >&6;}
+
+ if true; then
+  HAVE_RIDCOMPRESS_TRUE=
+  HAVE_RIDCOMPRESS_FALSE='#'
+else
+  HAVE_RIDCOMPRESS_TRUE='#'
+  HAVE_RIDCOMPRESS_FALSE=
+fi
+
+
+
+# Check whether --with-ridcompress was given.
+if test "${with_ridcompress+set}" = set; then
+  withval=$with_ridcompress; RIDCOMPRESS_LDFLAGS="-L$withval/ -L$withval/lib";
+         RIDCOMPRESS_LIBS="-lridcompress -lstdc++";
+         RIDCOMPRESS_CPPFLAGS="-I$withval/ -I$withval/include";
+else
+  with_RIDCOMPRESS=no
+fi
+
+
+if test "x$with_RIDCOMPRESS" == "xno"; then
+
+    if false; then
+  HAVE_RIDCOMPRESS_TRUE=
+  HAVE_RIDCOMPRESS_FALSE='#'
+else
+  HAVE_RIDCOMPRESS_TRUE='#'
+  HAVE_RIDCOMPRESS_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $RIDCOMPRESS_LIBS"
+    LDFLAGS="$LDFLAGS $RIDCOMPRESS_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $RIDCOMPRESS_CPPFLAGS"
+
+
+    # Check for the RIDCOMPRESS 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_RIDCOMPRESS_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RIDCOMPRESS 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+
+# Check whether --with-fastbit was given.
+if test "${with_fastbit+set}" = set; then
+  withval=$with_fastbit;
+fi
+
+
+if test "x$with_fastbit" != xno; then
+    FASTBIT_CPPFLAGS="-I$with_fastbit/include"
+    FASTBIT_LDFLAGS="-L$with_fastbit/lib"
+    FASTBIT_LIBS="-lfastbit"
+
+    saveCPPFLAGS="$CPPFLAGS"
+    saveLDFLAGS="$LDFLAGS"
+
+    ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+    CPPFLAGS="$CPPFLAGS $FASTBIT_CPPFLAGS"
+    LDFLAGS="$LDFLAGS $FASTBIT_LDFLAGS $FASTBIT_LIBS"
+
+
+for ac_header in iapi.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_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_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
+ HAVE_FASTBIT=y
+else
+  HAVE_FASTBIT="";       { $as_echo "$as_me:$LINENO: result: Cannot find iapi.h from the FastBit lib. Make sure it has been properly installed at the path specified ($with_fastbit).      " >&5
+$as_echo "Cannot find iapi.h from the FastBit lib. Make sure it has been properly installed at the path specified ($with_fastbit).      " >&6; }
+fi
+
+done
+
+
+
+    CPPFLAGS="$saveCPPFLAGS"
+    LDFLAGS="$saveLDFLAGS"
+
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+    if test -z "$HAVE_FASTBIT"; then
+       if false; then
+  HAVE_FASTBIT_TRUE=
+  HAVE_FASTBIT_FALSE='#'
+else
+  HAVE_FASTBIT_TRUE='#'
+  HAVE_FASTBIT_FALSE=
+fi
+
+      { $as_echo "$as_me:$LINENO: result: Not building with FastBit library" >&5
+$as_echo "Not building with FastBit library" >&6; }
+    else
+
+
+
+
+       if true; then
+  HAVE_FASTBIT_TRUE=
+  HAVE_FASTBIT_FALSE='#'
+else
+  HAVE_FASTBIT_TRUE='#'
+  HAVE_FASTBIT_FALSE=
+fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FASTBIT 1
+_ACEOF
+
+
+      { $as_echo "$as_me:$LINENO: result: FastBit library found at $with_fastbit" >&5
+$as_echo "FastBit library found at $with_fastbit" >&6; }
+    fi
+else
+   if false; then
+  HAVE_FASTBIT_TRUE=
+  HAVE_FASTBIT_FALSE='#'
+else
+  HAVE_FASTBIT_TRUE='#'
+  HAVE_FASTBIT_FALSE=
+fi
+
+
+  { $as_echo "$as_me:$LINENO: result: Not building with FastBit library" >&5
+$as_echo "Not building with FastBit library" >&6; }
+fi
+
+
+
+
  if false; then
   HAVE_NCSU_TIMER_TRUE=
   HAVE_NCSU_TIMER_FALSE='#'
@@ -36458,7 +37177,7 @@ fi
 
     TIMER_CPPFLAGS="-I$with_timer/include"
     TIMER_LDFLAGS="-L$with_timer/lib"
-    TIMER_LIBS="-ltimer"
+    TIMER_LIBS="-ltimer -lm"
 
     saveLIB="$LIB"
     saveLDFLAGS="$LDFLAGS"
@@ -36628,7 +37347,7 @@ 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"
+LIBS="-ltimer -lm     $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -36801,25 +37520,25 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-# Check whether --enable-skel-timing was given.
-if test "${enable_skel_timing+set}" = set; then
-  enableval=$enable_skel_timing;
+# Check whether --enable-timers was given.
+if test "${enable_timers+set}" = set; then
+  enableval=$enable_timers;
 fi
 
- if test "x$enable_skel_timing" == "xyes"; then
-  SKEL_TIMING_TRUE=
-  SKEL_TIMING_FALSE='#'
+ if test "x$enable_timers" != "xno"; then
+  ADIOS_TIMERS_TRUE=
+  ADIOS_TIMERS_FALSE='#'
 else
-  SKEL_TIMING_TRUE='#'
-  SKEL_TIMING_FALSE=
+  ADIOS_TIMERS_TRUE='#'
+  ADIOS_TIMERS_FALSE=
 fi
 
 
 
-if test "x$enable_skel_timing" == "xyes"; then
+if test "x$enable_timers" != "xno"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define SKEL_TIMING 1
+#define ADIOS_TIMERS 1
 _ACEOF
 
     SKEL_HAVE_ADIOS_TIMING=True
@@ -36831,6 +37550,31 @@ _ACEOF
 
 
 
+# Check whether --enable-timer-events was given.
+if test "${enable_timer_events+set}" = set; then
+  enableval=$enable_timer_events;
+fi
+
+ if test "x$enable_timer_events" == "xyes"; then
+  ADIOS_TIMER_EVENTS_TRUE=
+  ADIOS_TIMER_EVENTS_FALSE='#'
+else
+  ADIOS_TIMER_EVENTS_TRUE='#'
+  ADIOS_TIMER_EVENTS_FALSE=
+fi
+
+
+
+if test "x$enable_timer_events" == "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ADIOS_TIMER_EVENTS 1
+_ACEOF
+
+fi
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -37316,6 +38060,12 @@ if test -z "${HAVE_ISOBAR_TRUE}"; then
     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}"
@@ -37361,6 +38111,52 @@ if test -z "${HAVE_ALACRITY_TRUE}"; then
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
 fi
 
+if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS}"
+fi
+
+if test -z "${HAVE_FASTBIT_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${FASTBIT_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${FASTBIT_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${FASTBIT_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${FASTBIT_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${FASTBIT_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}"
@@ -37384,6 +38180,22 @@ if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${TIMER_LIBS}"
 fi
 
+ if test -z "${HAVE_FLEXPATH_TRUE}"; then
+  HAVE_ICEE_TRUE=
+  HAVE_ICEE_FALSE='#'
+else
+  HAVE_ICEE_TRUE='#'
+  HAVE_ICEE_FALSE=
+fi
+
+if test -z "${HAVE_FLEXPATH_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICEE 1
+_ACEOF
+
+fi
+
 
 
 
@@ -37451,7 +38263,7 @@ _ACEOF
 
 
 
-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 [...]
+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/C/fgr_tests/Makefile tests/C/query/Makefile tests/C/query/common/Makefile tests/C/query/fa [...]
 
 
 cat >confcache <<\_ACEOF
@@ -38280,6 +39092,34 @@ $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
@@ -38378,6 +39218,41 @@ $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_RIDCOMPRESS_TRUE}" && test -z "${HAVE_RIDCOMPRESS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_RIDCOMPRESS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_RIDCOMPRESS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_RIDCOMPRESS_TRUE}" && test -z "${HAVE_RIDCOMPRESS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_RIDCOMPRESS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_RIDCOMPRESS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FASTBIT_TRUE}" && test -z "${HAVE_FASTBIT_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FASTBIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_FASTBIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FASTBIT_TRUE}" && test -z "${HAVE_FASTBIT_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FASTBIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_FASTBIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FASTBIT_TRUE}" && test -z "${HAVE_FASTBIT_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FASTBIT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_FASTBIT\" 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
@@ -38413,10 +39288,17 @@ $as_echo "$as_me: error: conditional \"RESEARCH_TRANSPORTS\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
-if test -z "${SKEL_TIMING_TRUE}" && test -z "${SKEL_TIMING_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"SKEL_TIMING\" was never defined.
+if test -z "${ADIOS_TIMERS_TRUE}" && test -z "${ADIOS_TIMERS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ADIOS_TIMERS\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"SKEL_TIMING\" was never defined.
+$as_echo "$as_me: error: conditional \"ADIOS_TIMERS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ADIOS_TIMER_EVENTS_TRUE}" && test -z "${ADIOS_TIMER_EVENTS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ADIOS_TIMER_EVENTS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ADIOS_TIMER_EVENTS\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -38462,6 +39344,13 @@ $as_echo "$as_me: error: conditional \"USE_PARALLEL_COMPILER\" was never defined
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${HAVE_ICEE_TRUE}" && test -z "${HAVE_ICEE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ICEE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ICEE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_write_fail=0
@@ -38784,7 +39673,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
+This file was extended by adios $as_me 1.8.0, which was
 generated by GNU Autoconf 2.63.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -38847,7 +39736,7 @@ Report bugs to <bug-autoconf at gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-config.status
+adios config.status 1.8.0
 configured by $0, generated by GNU Autoconf 2.63,
   with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -39419,6 +40308,11 @@ do
     "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/C/fgr_tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/fgr_tests/Makefile" ;;
+    "tests/C/query/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/Makefile" ;;
+    "tests/C/query/common/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/common/Makefile" ;;
+    "tests/C/query/fastbit/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/fastbit/Makefile" ;;
+    "tests/C/query/alacrity/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/alacrity/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" ;;
@@ -39441,6 +40335,8 @@ do
     "utils/bpdiff/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpdiff/Makefile" ;;
     "utils/bp2bp/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bp2bp/Makefile" ;;
     "utils/list_methods/Makefile") CONFIG_FILES="$CONFIG_FILES utils/list_methods/Makefile" ;;
+    "utils/bpmeta/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpmeta/Makefile" ;;
+    "utils/fastbit/Makefile") CONFIG_FILES="$CONFIG_FILES utils/fastbit/Makefile" ;;
     "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
     "examples/C/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/Makefile" ;;
     "examples/C/scalars/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/scalars/Makefile" ;;
@@ -39448,6 +40344,8 @@ do
     "examples/C/flexpath_arrays/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/flexpath_arrays/Makefile" ;;
     "examples/C/flexpath_arrays/process_select/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/flexpath_arrays/process_select/Makefile" ;;
     "examples/C/flexpath_arrays/global_range_select/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/flexpath_arrays/global_range_select/Makefile" ;;
+    "examples/C/icee_arrays/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/icee_arrays/Makefile" ;;
+    "examples/C/icee_arrays/array/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/icee_arrays/array/Makefile" ;;
     "examples/C/attributes/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/attributes/Makefile" ;;
     "examples/C/manual/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/manual/Makefile" ;;
     "examples/C/global-array/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/global-array/Makefile" ;;
@@ -39456,12 +40354,14 @@ do
     "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/C/query/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/query/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" ;;
     "examples/Fortran/global-array/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/global-array/Makefile" ;;
     "examples/Fortran/global-array-time/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/global-array-time/Makefile" ;;
+    "examples/Fortran/schema/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/schema/Makefile" ;;
+    "adios_config") CONFIG_FILES="$CONFIG_FILES adios_config" ;;
     "adios_config.flags") CONFIG_FILES="$CONFIG_FILES adios_config.flags" ;;
 
   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
@@ -41289,13 +42189,18 @@ else
     echo "  - No research transport methods";
 fi
 
-if test "x$enable_skel_timing" == "xyes"; then
-    echo "  - Skel Timing Mechanism Enabled";
-
+if test -z "${ADIOS_TIMERS_TRUE}"; then
+    echo "  - ADIOS Timing Mechanism Enabled";
+else
+    echo "  - ADIOS Timing Mechanism Disabled";
+fi
+if test -z "${ADIOS_TIMER_EVENTS_TRUE}"; then
+    echo "  - ADIOS Timing event recording Enabled";
 else
-    echo "  - Skel Timing Mechanism Disabled";
+    echo "  - ADIOS Timing event recording Disabled";
 fi
 
+
 if test -z "${HAVE_MXML_TRUE}"; then
     echo "  - MXML";
     echo "      - MXML_CFLAGS = $MXML_CFLAGS";
@@ -41492,6 +42397,17 @@ else
     echo "  - No FLEXPATH to build FLEXPATH transport method"
 fi
 
+if test -z "${HAVE_ICEE_TRUE}"; then
+    echo "  - ICEE";
+    echo "      - FP_CFLAGS = $FP_CFLAGS";
+    echo "      - FP_CPPFLAGS = $FP_CPPFLAGS";
+    echo "      - FP_LDFLAGS = $FP_LDFLAGS";
+    echo "      - FP_LIBS = $FP_LIBS";
+    echo
+else
+    echo "  - No ICEE to build ICEE transport method"
+fi
+
 if test -z "${HAVE_ZLIB_TRUE}"; then
     echo "  - ZLIB";
     echo "      - ZLIB_CFLAGS = $ZLIB_CFLAGS";
@@ -41547,6 +42463,17 @@ else
     echo "  - No APLOD to build APLOD transform method"
 fi
 
+if test -z "${HAVE_FASTBIT_TRUE}"; then
+    echo "  - FASTBIT";
+    echo "      - FASTBIT_CFLAGS = $FASTBIT_CFLAGS";
+    echo "      - FASTBIT_CPPFLAGS = $FASTBIT_CPPFLAGS";
+    echo "      - FASTBIT_LDFLAGS = $FASTBIT_LDFLAGS";
+    echo "      - FASTBIT_LIBS = $FASTBIT_LIBS";
+    echo
+else
+    echo "  - No FASTBIT to build FASTBIT query method"
+fi
+
 if test -z "${HAVE_ALACRITY_TRUE}"; then
     echo "  - ALACRITY";
     echo "      - ALACRITY_CFLAGS = $ALACRITY_CFLAGS";
@@ -41555,9 +42482,21 @@ if test -z "${HAVE_ALACRITY_TRUE}"; then
     echo "      - ALACRITY_LIBS = $ALACRITY_LIBS";
     echo
 else
-    echo "  - No ALACRITY to build ALACRITY transform method"
+    echo "  - No ALACRITY to build ALACRITY transform & query methods"
 fi
 
+if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+    echo "  - RIDCOMPRESS";
+    echo "      - RIDCOMPRESS_CFLAGS = $RIDCOMPRESS_CFLAGS";
+    echo "      - RIDCOMPRESS_CPPFLAGS = $RIDCOMPRESS_CPPFLAGS";
+    echo "      - RIDCOMPRESS_LDFLAGS = $RIDCOMPRESS_LDFLAGS";
+    echo "      - RIDCOMPRESS_LIBS = $RIDCOMPRESS_LIBS";
+    echo
+else
+    echo "  - No RIDCOMPRESS to build RIDCOMPRESS transform method"
+fi
+
+
 if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
     echo "  - NCSU timer lib";
     echo "      - TIMER_CFLAGS = $TIMER_CFLAGS";
diff --git a/configure.ac b/configure.ac
index af296e2..320d5fb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,11 +1,12 @@
-
-AC_INIT(configure.ac)
+s
+AC_INIT([adios], [1.8.0])
+AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_MACRO_DIR(config)
 AC_REVISION($Revision$)
 
 AC_CONFIG_HEADERS(config.h)
-AM_INIT_AUTOMAKE(adios,1.7.0)
+AM_INIT_AUTOMAKE
 
 AM_MAINTAINER_MODE([enable])
 
@@ -97,6 +98,8 @@ AC_SZIP
 AC_ISOBAR
 AC_APLOD
 AC_ALACRITY
+AC_RIDCOMPRESS
+AC_FASTBIT
 AX_NCSU_LIBTIMER
 AC_BGQ
 
@@ -111,14 +114,14 @@ AM_CONDITIONAL([RESEARCH_TRANSPORTS], [test "x$enable_research_transports" == "x
 AC_LANG(C)
 
 
-AC_ARG_ENABLE(skel-timing,
-    [AS_HELP_STRING([--enable-skel-timing],
-        [Include the skel timing mechanism. By default this is not included])])
-AM_CONDITIONAL([SKEL_TIMING], [test "x$enable_skel_timing" == "xyes"])
+AC_ARG_ENABLE(timers,
+    [AS_HELP_STRING([--disable-timers],
+        [Disable the adios timing mechanism. By default the timers are used.])])
+AM_CONDITIONAL([ADIOS_TIMERS], [test "x$enable_timers" != "xno"])
 
 
-if test "x$enable_skel_timing" == "xyes"; then
-    AC_DEFINE(SKEL_TIMING, 1, [Skel timing is enabled])
+if test "x$enable_timers" != "xno"; then
+    AC_DEFINE(ADIOS_TIMERS, 1, [Adios timing is enabled])
     AC_SUBST(SKEL_HAVE_ADIOS_TIMING,True)
     dnl The macro AM_SUBST_NOTMAKE does not work on Hopper with automake 10.1
     dnl AM_SUBST_NOTMAKE(SKEL_HAVE_ADIOS_TIMING,true)
@@ -126,7 +129,19 @@ else
     AC_SUBST(SKEL_HAVE_ADIOS_TIMING,False)
     dnl AM_SUBST_NOTMAKE(SKEL_HAVE_ADIOS_TIMING,false)
 fi
-AC_SUBST(SKEL_TIMING)
+AC_SUBST(ADIOS_TIMERS)
+
+
+AC_ARG_ENABLE(timer-events,
+    [AS_HELP_STRING([--enable-timer-events],
+        [Enable adios timing events. By default the events are not used.])])
+AM_CONDITIONAL([ADIOS_TIMER_EVENTS], [test "x$enable_timer_events" == "xyes"])
+
+
+if test "x$enable_timer_events" == "xyes"; then
+    AC_DEFINE(ADIOS_TIMER_EVENTS, 1, [Adios timing events are enabled])
+fi
+AC_SUBST(ADIOS_TIMER_EVENTS)
 
 
 AC_LANG(C)
@@ -571,6 +586,12 @@ if test -z "${HAVE_ISOBAR_TRUE}"; then
     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}"
@@ -616,6 +637,52 @@ if test -z "${HAVE_ALACRITY_TRUE}"; then
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
 fi
 
+if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${RIDCOMPRESS_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DRIDCOMPRESS ${RIDCOMPRESS_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${RIDCOMPRESS_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${RIDCOMPRESS_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${RIDCOMPRESS_LIBS}"
+fi
+
+if test -z "${HAVE_FASTBIT_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${FASTBIT_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${FASTBIT_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${FASTBIT_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${FASTBIT_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${FASTBIT_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${FASTBIT_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${FASTBIT_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}"
@@ -639,6 +706,11 @@ if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${TIMER_LIBS}"
 fi
 
+AM_CONDITIONAL([HAVE_ICEE], [test -z "${HAVE_FLEXPATH_TRUE}"])
+if test -z "${HAVE_FLEXPATH_TRUE}"; then
+    AC_DEFINE(HAVE_ICEE, 1, [ICEE method is enabled])
+fi
+
 AC_SUBST(ADIOSLIB_CPPFLAGS)
 AC_SUBST(ADIOSLIB_CFLAGS)
 AC_SUBST(ADIOSLIB_LDFLAGS)
@@ -703,6 +775,11 @@ AC_CONFIG_FILES([Makefile
                  tests/C/flexpath_tests/maya_noxml/Makefile
                  tests/C/flexpath_tests/maya_append/Makefile
                  tests/C/flexpath_tests/scalar/Makefile
+                 tests/C/fgr_tests/Makefile
+                 tests/C/query/Makefile
+                 tests/C/query/common/Makefile
+                 tests/C/query/fastbit/Makefile
+                 tests/C/query/alacrity/Makefile
                  tests/Fortran/Makefile
                  tests/genarray/Makefile
                  tests/bp_read/Makefile
@@ -725,6 +802,8 @@ AC_CONFIG_FILES([Makefile
                  utils/bpdiff/Makefile
                  utils/bp2bp/Makefile
                  utils/list_methods/Makefile
+                 utils/bpmeta/Makefile
+		 utils/fastbit/Makefile
                  examples/Makefile
                  examples/C/Makefile
                  examples/C/scalars/Makefile
@@ -732,6 +811,8 @@ AC_CONFIG_FILES([Makefile
                  examples/C/flexpath_arrays/Makefile
                  examples/C/flexpath_arrays/process_select/Makefile
                  examples/C/flexpath_arrays/global_range_select/Makefile
+                 examples/C/icee_arrays/Makefile
+                 examples/C/icee_arrays/array/Makefile
                  examples/C/attributes/Makefile
                  examples/C/manual/Makefile
                  examples/C/global-array/Makefile
@@ -740,12 +821,14 @@ AC_CONFIG_FILES([Makefile
                  examples/C/read_all/Makefile
                  examples/C/schema/Makefile
                  examples/C/transforms/Makefile
-                 examples/C/compression_test/Makefile
+                 examples/C/query/Makefile
                  examples/Fortran/Makefile
                  examples/Fortran/scalars/Makefile
                  examples/Fortran/arrays/Makefile
                  examples/Fortran/global-array/Makefile
                  examples/Fortran/global-array-time/Makefile
+                 examples/Fortran/schema/Makefile
+                 adios_config
                  adios_config.flags
                 ])
 
@@ -791,12 +874,17 @@ else
     echo "  - No research transport methods";
 fi
 
-if test "x$enable_skel_timing" == "xyes"; then
-    echo "  - Skel Timing Mechanism Enabled";
-
+if test -z "${ADIOS_TIMERS_TRUE}"; then
+    echo "  - ADIOS Timing Mechanism Enabled";
 else
-    echo "  - Skel Timing Mechanism Disabled";
+    echo "  - ADIOS Timing Mechanism Disabled";
 fi
+if test -z "${ADIOS_TIMER_EVENTS_TRUE}"; then
+    echo "  - ADIOS Timing event recording Enabled";
+else
+    echo "  - ADIOS Timing event recording Disabled";
+fi
+
 
 if test -z "${HAVE_MXML_TRUE}"; then
     echo "  - MXML";
@@ -1004,6 +1092,17 @@ else
     echo "  - No FLEXPATH to build FLEXPATH transport method"
 fi
 
+if test -z "${HAVE_ICEE_TRUE}"; then
+    echo "  - ICEE";
+    echo "      - FP_CFLAGS = $FP_CFLAGS";
+    echo "      - FP_CPPFLAGS = $FP_CPPFLAGS";
+    echo "      - FP_LDFLAGS = $FP_LDFLAGS";
+    echo "      - FP_LIBS = $FP_LIBS";
+    echo
+else
+    echo "  - No ICEE to build ICEE transport method"
+fi
+
 if test -z "${HAVE_ZLIB_TRUE}"; then
     echo "  - ZLIB";
     echo "      - ZLIB_CFLAGS = $ZLIB_CFLAGS";
@@ -1059,6 +1158,17 @@ else
     echo "  - No APLOD to build APLOD transform method"
 fi
 
+if test -z "${HAVE_FASTBIT_TRUE}"; then
+    echo "  - FASTBIT";
+    echo "      - FASTBIT_CFLAGS = $FASTBIT_CFLAGS";
+    echo "      - FASTBIT_CPPFLAGS = $FASTBIT_CPPFLAGS";
+    echo "      - FASTBIT_LDFLAGS = $FASTBIT_LDFLAGS";
+    echo "      - FASTBIT_LIBS = $FASTBIT_LIBS";
+    echo
+else
+    echo "  - No FASTBIT to build FASTBIT query method"
+fi
+
 if test -z "${HAVE_ALACRITY_TRUE}"; then
     echo "  - ALACRITY";
     echo "      - ALACRITY_CFLAGS = $ALACRITY_CFLAGS";
@@ -1067,9 +1177,21 @@ if test -z "${HAVE_ALACRITY_TRUE}"; then
     echo "      - ALACRITY_LIBS = $ALACRITY_LIBS";
     echo
 else
-    echo "  - No ALACRITY to build ALACRITY transform method"
+    echo "  - No ALACRITY to build ALACRITY transform & query methods"
 fi
 
+if test -z "${HAVE_RIDCOMPRESS_TRUE}"; then
+    echo "  - RIDCOMPRESS";
+    echo "      - RIDCOMPRESS_CFLAGS = $RIDCOMPRESS_CFLAGS";
+    echo "      - RIDCOMPRESS_CPPFLAGS = $RIDCOMPRESS_CPPFLAGS";
+    echo "      - RIDCOMPRESS_LDFLAGS = $RIDCOMPRESS_LDFLAGS";
+    echo "      - RIDCOMPRESS_LIBS = $RIDCOMPRESS_LIBS";
+    echo
+else
+    echo "  - No RIDCOMPRESS to build RIDCOMPRESS transform method"
+fi
+
+
 if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
     echo "  - NCSU timer lib";
     echo "      - TIMER_CFLAGS = $TIMER_CFLAGS";
diff --git a/examples/C/CMakeLists.txt b/examples/C/CMakeLists.txt
index ce8f760..96e0efe 100644
--- a/examples/C/CMakeLists.txt
+++ b/examples/C/CMakeLists.txt
@@ -7,4 +7,8 @@ add_subdirectory(global-array-time)
 add_subdirectory(read_all)
 add_subdirectory(stat)
 add_subdirectory(schema)
+add_subdirectory(flexpath_arrays)
+add_subdirectory(transforms)
+add_subdirectory(query)
+add_subdirectory(icee_arrays)
 #SUBDIRS=scalars arrays attributes manual global-array global-array-time read_all stat schema
diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am
index 913a1c9..6a1dd28 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 transforms compression_test
+SUBDIRS=scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays transforms query icee_arrays
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index ab2ab63..06616a0 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -365,7 +378,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 transforms compression_test
+SUBDIRS = scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays transforms query icee_arrays
 all: all-recursive
 
 .SUFFIXES:
diff --git a/examples/C/arrays/Makefile.am b/examples/C/arrays/Makefile.am
index 534287d..ccdc43a 100644
--- a/examples/C/arrays/Makefile.am
+++ b/examples/C/arrays/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/arrays/Makefile.in b/examples/C/arrays/Makefile.in
index f636976..699cc25 100644
--- a/examples/C/arrays/Makefile.in
+++ b/examples/C/arrays/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
diff --git a/examples/C/attributes/Makefile.am b/examples/C/attributes/Makefile.am
index 2ecd206..7b7253c 100644
--- a/examples/C/attributes/Makefile.am
+++ b/examples/C/attributes/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/attributes/Makefile.in b/examples/C/attributes/Makefile.in
index 205a2ed..90126cd 100644
--- a/examples/C/attributes/Makefile.in
+++ b/examples/C/attributes/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 attributes_write_SOURCES = attributes_write.c
diff --git a/examples/C/compression_test/Makefile.am b/examples/C/compression_test/Makefile.am
deleted file mode 100755
index 707f1e9..0000000
--- a/examples/C/compression_test/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-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/compression_test/adios_global.c b/examples/C/compression_test/adios_global.c
deleted file mode 100755
index eac6356..0000000
--- a/examples/C/compression_test/adios_global.c
+++ /dev/null
@@ -1,87 +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 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 */
-    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
deleted file mode 100755
index c97a947..0000000
--- a/examples/C/compression_test/adios_read_box.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-#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("%lld ", 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
deleted file mode 100755
index a190f85..0000000
--- a/examples/C/compression_test/adios_read_points.c
+++ /dev/null
@@ -1,59 +0,0 @@
-
-#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
deleted file mode 100755
index 479b15e..0000000
--- a/examples/C/compression_test/conf_genarray3D/amr_bzip2.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 1c2e553..0000000
--- a/examples/C/compression_test/conf_genarray3D/amr_identity.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index c2788c6..0000000
--- a/examples/C/compression_test/conf_genarray3D/amr_isobar.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 8f8ef5a..0000000
--- a/examples/C/compression_test/conf_genarray3D/amr_none.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index c7c4e7b..0000000
--- a/examples/C/compression_test/conf_genarray3D/amr_zlib.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 1585abd..0000000
--- a/examples/C/compression_test/conf_genarray3D/mpi_bzip2.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index fb29616..0000000
--- a/examples/C/compression_test/conf_genarray3D/mpi_identity.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 6226d1c..0000000
--- a/examples/C/compression_test/conf_genarray3D/mpi_isobar.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 6cd0870..0000000
--- a/examples/C/compression_test/conf_genarray3D/mpi_none.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 5cc90de..0000000
--- a/examples/C/compression_test/conf_genarray3D/mpi_zlib.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index f02101b..0000000
--- a/examples/C/compression_test/conf_genarray3D/posix_bzip2.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index cb936bb..0000000
--- a/examples/C/compression_test/conf_genarray3D/posix_identity.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index d80f7e4..0000000
--- a/examples/C/compression_test/conf_genarray3D/posix_isobar.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index f99b77f..0000000
--- a/examples/C/compression_test/conf_genarray3D/posix_none.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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
deleted file mode 100755
index 94ba901..0000000
--- a/examples/C/compression_test/conf_genarray3D/posix_zlib.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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/compression_test/conf_simple/amr_bzip2.xml b/examples/C/compression_test/conf_simple/amr_bzip2.xml
deleted file mode 100755
index a314729..0000000
--- a/examples/C/compression_test/conf_simple/amr_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
-
-<buffer size-MB="2" allocate-time="now"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/amr_identity.xml b/examples/C/compression_test/conf_simple/amr_identity.xml
deleted file mode 100755
index 2ea5e98..0000000
--- a/examples/C/compression_test/conf_simple/amr_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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:5" />
-    </global-bounds>
-    <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=2;merging_pgs=0;num_ost=2</method>
-
-<buffer size-MB="2" allocate-time="now"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/amr_isobar.xml b/examples/C/compression_test/conf_simple/amr_isobar.xml
deleted file mode 100755
index 9f9b4c6..0000000
--- a/examples/C/compression_test/conf_simple/amr_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/amr_none.xml b/examples/C/compression_test/conf_simple/amr_none.xml
deleted file mode 100755
index ef27068..0000000
--- a/examples/C/compression_test/conf_simple/amr_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/amr_zlib.xml b/examples/C/compression_test/conf_simple/amr_zlib.xml
deleted file mode 100755
index 7811d8d..0000000
--- a/examples/C/compression_test/conf_simple/amr_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/bak/adios_global.xml b/examples/C/compression_test/conf_simple/bak/adios_global.xml
deleted file mode 100755
index 399e922..0000000
--- a/examples/C/compression_test/conf_simple/bak/adios_global.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="zlib:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak/mpi.xml b/examples/C/compression_test/conf_simple/bak/mpi.xml
deleted file mode 100755
index 529623a..0000000
--- a/examples/C/compression_test/conf_simple/bak/mpi.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/bak/posix.xml b/examples/C/compression_test/conf_simple/bak/posix.xml
deleted file mode 100755
index 399e922..0000000
--- a/examples/C/compression_test/conf_simple/bak/posix.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="zlib:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml b/examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml
deleted file mode 100755
index 80429a0..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/bak_2/amr_identity.xml b/examples/C/compression_test/conf_simple/bak_2/amr_identity.xml
deleted file mode 100755
index 2ea5e98..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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:5" />
-    </global-bounds>
-    <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=2;merging_pgs=0;num_ost=2</method>
-
-<buffer size-MB="2" allocate-time="now"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml b/examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml
deleted file mode 100755
index 9f9b4c6..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/bak_2/amr_none.xml b/examples/C/compression_test/conf_simple/bak_2/amr_none.xml
deleted file mode 100755
index ef27068..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/amr_szip.xml b/examples/C/compression_test/conf_simple/bak_2/amr_szip.xml
deleted file mode 100755
index b59c022..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_szip.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/bak_2/amr_zlib.xml b/examples/C/compression_test/conf_simple/bak_2/amr_zlib.xml
deleted file mode 100755
index 7811d8d..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/amr_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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_AMR">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/compression_test/conf_simple/bak_2/mpi_bzip2.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_bzip2.xml
deleted file mode 100755
index 320c1ae..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/bak_2/mpi_identity.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_identity.xml
deleted file mode 100755
index b1030ca..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" 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/compression_test/conf_simple/bak_2/mpi_isobar.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_isobar.xml
deleted file mode 100755
index 135b177..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/bak_2/mpi_none.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_none.xml
deleted file mode 100755
index 3824c11..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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/compression_test/conf_simple/bak_2/mpi_szip.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_szip.xml
deleted file mode 100755
index 05da36f..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_szip.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/bak_2/mpi_zlib.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_zlib.xml
deleted file mode 100755
index 529623a..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/mpi_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/bak_2/posix_bzip2.xml b/examples/C/compression_test/conf_simple/bak_2/posix_bzip2.xml
deleted file mode 100755
index 09cdaa5..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="bzip2:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/posix_identity.xml b/examples/C/compression_test/conf_simple/bak_2/posix_identity.xml
deleted file mode 100755
index 6f7a56f..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml b/examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml
deleted file mode 100755
index d856362..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="isobar:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/posix_none.xml b/examples/C/compression_test/conf_simple/bak_2/posix_none.xml
deleted file mode 100755
index 460a34d..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/posix_szip.xml b/examples/C/compression_test/conf_simple/bak_2/posix_szip.xml
deleted file mode 100755
index 417a7a4..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_szip.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="szip:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml b/examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml
deleted file mode 100755
index 399e922..0000000
--- a/examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="zlib:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/mpi_bzip2.xml b/examples/C/compression_test/conf_simple/mpi_bzip2.xml
deleted file mode 100755
index 320c1ae..0000000
--- a/examples/C/compression_test/conf_simple/mpi_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/mpi_identity.xml b/examples/C/compression_test/conf_simple/mpi_identity.xml
deleted file mode 100755
index b1030ca..0000000
--- a/examples/C/compression_test/conf_simple/mpi_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" 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/compression_test/conf_simple/mpi_isobar.xml b/examples/C/compression_test/conf_simple/mpi_isobar.xml
deleted file mode 100755
index 135b177..0000000
--- a/examples/C/compression_test/conf_simple/mpi_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/mpi_none.xml b/examples/C/compression_test/conf_simple/mpi_none.xml
deleted file mode 100755
index 3824c11..0000000
--- a/examples/C/compression_test/conf_simple/mpi_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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/compression_test/conf_simple/mpi_zlib.xml b/examples/C/compression_test/conf_simple/mpi_zlib.xml
deleted file mode 100755
index 529623a..0000000
--- a/examples/C/compression_test/conf_simple/mpi_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="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">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/compression_test/conf_simple/posix_bzip2.xml b/examples/C/compression_test/conf_simple/posix_bzip2.xml
deleted file mode 100755
index 09cdaa5..0000000
--- a/examples/C/compression_test/conf_simple/posix_bzip2.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="bzip2:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/posix_identity.xml b/examples/C/compression_test/conf_simple/posix_identity.xml
deleted file mode 100755
index 6f7a56f..0000000
--- a/examples/C/compression_test/conf_simple/posix_identity.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/posix_isobar.xml b/examples/C/compression_test/conf_simple/posix_isobar.xml
deleted file mode 100755
index d856362..0000000
--- a/examples/C/compression_test/conf_simple/posix_isobar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="isobar:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/posix_none.xml b/examples/C/compression_test/conf_simple/posix_none.xml
deleted file mode 100755
index 460a34d..0000000
--- a/examples/C/compression_test/conf_simple/posix_none.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/conf_simple/posix_zlib.xml b/examples/C/compression_test/conf_simple/posix_zlib.xml
deleted file mode 100755
index 399e922..0000000
--- a/examples/C/compression_test/conf_simple/posix_zlib.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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="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="zlib:5" />
-    </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
-
-<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"/>
-
-</adios-config>
-
diff --git a/examples/C/compression_test/genarray3D.c b/examples/C/compression_test/genarray3D.c
deleted file mode 100755
index 09e348f..0000000
--- a/examples/C/compression_test/genarray3D.c
+++ /dev/null
@@ -1,205 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.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;
-
-
-    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;
-    }
-
-    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
deleted file mode 100755
index 4c16e85..0000000
--- a/examples/C/compression_test/gread_temperature.ch
+++ /dev/null
@@ -1,4 +0,0 @@
-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/compression_test/gwrite_temperature.ch b/examples/C/compression_test/gwrite_temperature.ch
deleted file mode 100755
index 1c8b279..0000000
--- a/examples/C/compression_test/gwrite_temperature.ch
+++ /dev/null
@@ -1,9 +0,0 @@
-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);
diff --git a/examples/C/compression_test/read_test.h b/examples/C/compression_test/read_test.h
deleted file mode 100755
index ad05b04..0000000
--- a/examples/C/compression_test/read_test.h
+++ /dev/null
@@ -1,155 +0,0 @@
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <time.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]: %lld %lld\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 %lld %lld\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
deleted file mode 100755
index 6d93a47..0000000
--- a/examples/C/compression_test/test_read_box.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/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
deleted file mode 100755
index a3bd6d9..0000000
--- a/examples/C/compression_test/test_read_points.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/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
deleted file mode 100755
index fcb8d6e..0000000
--- a/examples/C/compression_test/write_all.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/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/CMakeLists.txt b/examples/C/flexpath_arrays/CMakeLists.txt
new file mode 100644
index 0000000..8ced94e
--- /dev/null
+++ b/examples/C/flexpath_arrays/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(process_select)
+add_subdirectory(global_range_select)
diff --git a/examples/C/flexpath_arrays/Makefile.in b/examples/C/flexpath_arrays/Makefile.in
index e5f04e4..a60fd5e 100644
--- a/examples/C/flexpath_arrays/Makefile.in
+++ b/examples/C/flexpath_arrays/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/examples/C/flexpath_arrays/global_range_select/CMakeLists.txt b/examples/C/flexpath_arrays/global_range_select/CMakeLists.txt
new file mode 100644
index 0000000..ef4896f
--- /dev/null
+++ b/examples/C/flexpath_arrays/global_range_select/CMakeLists.txt
@@ -0,0 +1,21 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/examples/C/flexpath_arrays/global_range_select)
+link_directories(${PROJECT_BINARY_DIR}/examples/C/flexpath_arrays/global_range_select)
+
+add_executable(global_arrays_write arrays_write.c)
+add_executable(global_arrays_read arrays_read.c)
+
+set (PROGS global_arrays_write global_arrays_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 ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+endforeach()
+
+file(COPY arrays.xml README 
+     DESTINATION ${PROJECT_BINARY_DIR}/examples/C/flexpath_arrays/global_range_select)
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.am b/examples/C/flexpath_arrays/global_range_select/Makefile.am
index 18f358e..4578c7c 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.am
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.in b/examples/C/flexpath_arrays/global_range_select/Makefile.in
index 48a70b2..525e5d5 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.in
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
diff --git a/examples/C/flexpath_arrays/process_select/CMakeLists.txt b/examples/C/flexpath_arrays/process_select/CMakeLists.txt
new file mode 100644
index 0000000..5bb71b8
--- /dev/null
+++ b/examples/C/flexpath_arrays/process_select/CMakeLists.txt
@@ -0,0 +1,21 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/examples/C/flexpath_arrays/process_select)
+link_directories(${PROJECT_BINARY_DIR}/examples/C/flexpath_arrays/process_select)
+
+add_executable(select_arrays_write arrays_write.c)
+add_executable(select_arrays_read arrays_read.c)
+
+set (PROGS select_arrays_write select_arrays_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 ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+endforeach()
+
+file(COPY arrays.xml job.pbs 
+     DESTINATION ${PROJECT_BINARY_DIR}/examples/C/flexpath_arrays/process_select)
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.am b/examples/C/flexpath_arrays/process_select/Makefile.am
index dd227b9..0345f82 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.am
+++ b/examples/C/flexpath_arrays/process_select/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -16,6 +16,6 @@ arrays_read_SOURCES = arrays_read.c
 arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
-CLEANFILES = *.txt
+CLEANFILES = *_writer_info.txt *_writer_ready.txt *_reader_info.txt *_reader_ready.txt *.bp
 CC=$(MPICC)
 EXTRA_DIST = arrays.xml job.pbs
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.in b/examples/C/flexpath_arrays/process_select/Makefile.in
index bff36b6..73b99bd 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.in
+++ b/examples/C/flexpath_arrays/process_select/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
@@ -366,7 +379,7 @@ arrays_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 arrays_read_SOURCES = arrays_read.c
 arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-CLEANFILES = *.txt
+CLEANFILES = *_writer_info.txt *_writer_ready.txt *_reader_info.txt *_reader_ready.txt *.bp
 EXTRA_DIST = arrays.xml job.pbs
 all: all-am
 
diff --git a/examples/C/global-array-time/Makefile.am b/examples/C/global-array-time/Makefile.am
index e0791db..d71d2ea 100644
--- a/examples/C/global-array-time/Makefile.am
+++ b/examples/C/global-array-time/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/global-array-time/Makefile.in b/examples/C/global-array-time/Makefile.in
index 0f705d6..7bab32b 100644
--- a/examples/C/global-array-time/Makefile.in
+++ b/examples/C/global-array-time/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -68,11 +69,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -159,6 +165,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -216,6 +224,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -315,11 +326,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -385,7 +398,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 adios_globaltime_SOURCES = adios_globaltime.c
diff --git a/examples/C/global-array/Makefile.am b/examples/C/global-array/Makefile.am
index 7f5ede9..639c16c 100644
--- a/examples/C/global-array/Makefile.am
+++ b/examples/C/global-array/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/global-array/Makefile.in b/examples/C/global-array/Makefile.in
index 25847d1..ea1df9c 100644
--- a/examples/C/global-array/Makefile.in
+++ b/examples/C/global-array/Makefile.in
@@ -54,6 +54,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -70,11 +71,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -216,6 +222,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -273,6 +281,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -372,11 +383,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -442,7 +455,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 adios_global_SOURCES = adios_global.c
diff --git a/examples/C/global-array/adios_global_aggregate_by_color.c b/examples/C/global-array/adios_global_aggregate_by_color.c
index 34f5e10..f76fdcd 100644
--- a/examples/C/global-array/adios_global_aggregate_by_color.c
+++ b/examples/C/global-array/adios_global_aggregate_by_color.c
@@ -32,7 +32,8 @@
 int main (int argc, char ** argv) 
 {
 	char        filename [256];
-	int         rank, size, i;
+        char        color_str[256];
+	int         rank, size, i, color;
 	int         NX = 100, Global_bounds, Offsets; 
 	double      t[NX];
 	MPI_Comm    comm = MPI_COMM_WORLD;
@@ -46,7 +47,7 @@ int main (int argc, char ** argv)
 
         Global_bounds = NX * size;
 
-	strcpy (filename, "adios_global_no_xml.bp");
+	strcpy (filename, "adios_global_aggregate_by_color.bp");
 
 	adios_init_noxml (comm);
         adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
@@ -55,8 +56,11 @@ int main (int argc, char ** argv)
         int64_t       m_adios_file;
 
         adios_declare_group (&m_adios_group, "restart", "iter", adios_flag_yes);
-        adios_select_method (m_adios_group, "MPI", "", "");
 
+        // split into 2 groups 
+        color = (rank % 2 == 0 ? 0 : 1);
+        sprintf (color_str, "color=%d", color);
+        adios_select_method (m_adios_group, "MPI", color_str, "");
 
         adios_define_var (m_adios_group, "NX"
 			,"", adios_integer
diff --git a/examples/C/icee_arrays/CMakeLists.txt b/examples/C/icee_arrays/CMakeLists.txt
new file mode 100644
index 0000000..e08f74b
--- /dev/null
+++ b/examples/C/icee_arrays/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(array)
diff --git a/examples/C/icee_arrays/Makefile.am b/examples/C/icee_arrays/Makefile.am
new file mode 100644
index 0000000..a7faf4f
--- /dev/null
+++ b/examples/C/icee_arrays/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS=array
diff --git a/examples/C/flexpath_arrays/Makefile.in b/examples/C/icee_arrays/Makefile.in
similarity index 96%
copy from examples/C/flexpath_arrays/Makefile.in
copy to examples/C/icee_arrays/Makefile.in
index e5f04e4..a642cab 100644
--- a/examples/C/flexpath_arrays/Makefile.in
+++ b/examples/C/icee_arrays/Makefile.in
@@ -33,7 +33,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-subdir = examples/C/flexpath_arrays
+subdir = examples/C/icee_arrays
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -365,7 +378,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = process_select global_range_select
+SUBDIRS = array
 all: all-recursive
 
 .SUFFIXES:
@@ -378,9 +391,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/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/icee_arrays/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/flexpath_arrays/Makefile
+	  $(AUTOMAKE) --gnu examples/C/icee_arrays/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/examples/C/icee_arrays/array/CMakeLists.txt b/examples/C/icee_arrays/array/CMakeLists.txt
new file mode 100644
index 0000000..199180b
--- /dev/null
+++ b/examples/C/icee_arrays/array/CMakeLists.txt
@@ -0,0 +1,25 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/examples/C/icee_arrays/array)
+link_directories(${PROJECT_BINARY_DIR}/examples/C/icee_arrays/array)
+
+add_executable(adios_write adios_write.c)
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(adios_write PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(adios_write PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(adios_write adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+add_executable(adios_read adios_read.c)
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(adios_read PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(adios_read PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(adios_read adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY README.txt 
+        DESTINATION ${PROJECT_BINARY_DIR}/examples/C/icee_arrays/array)
diff --git a/examples/C/icee_arrays/array/Makefile.am b/examples/C/icee_arrays/array/Makefile.am
new file mode 100644
index 0000000..1f6bb96
--- /dev/null
+++ b/examples/C/icee_arrays/array/Makefile.am
@@ -0,0 +1,20 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/README.txt $(builddir)
+
+noinst_PROGRAMS = adios_write adios_read
+
+adios_write_SOURCES = adios_write.c
+adios_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_SOURCES = adios_read.c
+adios_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+EXTRA_DIST = README.txt
diff --git a/examples/C/arrays/Makefile.in b/examples/C/icee_arrays/array/Makefile.in
similarity index 89%
copy from examples/C/arrays/Makefile.in
copy to examples/C/icee_arrays/array/Makefile.in
index f636976..6af8141 100644
--- a/examples/C/arrays/Makefile.in
+++ b/examples/C/icee_arrays/array/Makefile.in
@@ -34,8 +34,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
-subdir = examples/C/arrays
+noinst_PROGRAMS = adios_write$(EXEEXT) adios_read$(EXEEXT)
+subdir = examples/C/icee_arrays/array
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -77,21 +83,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_arrays_read_OBJECTS = arrays_read.$(OBJEXT)
-arrays_read_OBJECTS = $(am_arrays_read_OBJECTS)
+am_adios_read_OBJECTS = adios_read.$(OBJEXT)
+adios_read_OBJECTS = $(am_adios_read_OBJECTS)
 am__DEPENDENCIES_1 =
-arrays_read_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+adios_read_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-arrays_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(arrays_read_LDFLAGS) $(LDFLAGS) -o $@
-am_arrays_write_OBJECTS = arrays_write.$(OBJEXT)
-arrays_write_OBJECTS = $(am_arrays_write_OBJECTS)
-arrays_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_read_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_write_OBJECTS = adios_write.$(OBJEXT)
+adios_write_OBJECTS = $(am_adios_write_OBJECTS)
+adios_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-arrays_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(arrays_write_LDFLAGS) $(LDFLAGS) -o $@
+	$(adios_write_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -104,8 +110,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(arrays_read_SOURCES) $(arrays_write_SOURCES)
-DIST_SOURCES = $(arrays_read_SOURCES) $(arrays_write_SOURCES)
+SOURCES = $(adios_read_SOURCES) $(adios_write_SOURCES)
+DIST_SOURCES = $(adios_read_SOURCES) $(adios_write_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -360,14 +373,14 @@ top_srcdir = @top_srcdir@
 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)
-arrays_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-arrays_read_SOURCES = arrays_read.c
-arrays_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
-arrays_read_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
+adios_write_SOURCES = adios_write.c
+adios_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_SOURCES = adios_read.c
+adios_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = arrays.xml gwrite_arrays.ch gread_arrays.ch job.pbs
+EXTRA_DIST = README.txt
 all: all-am
 
 .SUFFIXES:
@@ -381,9 +394,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/arrays/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/icee_arrays/array/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/arrays/Makefile
+	  $(AUTOMAKE) --gnu examples/C/icee_arrays/array/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -411,12 +424,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-arrays_read$(EXEEXT): $(arrays_read_OBJECTS) $(arrays_read_DEPENDENCIES) 
-	@rm -f arrays_read$(EXEEXT)
-	$(arrays_read_LINK) $(arrays_read_OBJECTS) $(arrays_read_LDADD) $(LIBS)
-arrays_write$(EXEEXT): $(arrays_write_OBJECTS) $(arrays_write_DEPENDENCIES) 
-	@rm -f arrays_write$(EXEEXT)
-	$(arrays_write_LINK) $(arrays_write_OBJECTS) $(arrays_write_LDADD) $(LIBS)
+adios_read$(EXEEXT): $(adios_read_OBJECTS) $(adios_read_DEPENDENCIES) 
+	@rm -f adios_read$(EXEEXT)
+	$(adios_read_LINK) $(adios_read_OBJECTS) $(adios_read_LDADD) $(LIBS)
+adios_write$(EXEEXT): $(adios_write_OBJECTS) $(adios_write_DEPENDENCIES) 
+	@rm -f adios_write$(EXEEXT)
+	$(adios_write_LINK) $(adios_write_OBJECTS) $(adios_write_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -638,7 +651,7 @@ 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/examples/C/icee_arrays/array/README.txt b/examples/C/icee_arrays/array/README.txt
new file mode 100644
index 0000000..3fe7368
--- /dev/null
+++ b/examples/C/icee_arrays/array/README.txt
@@ -0,0 +1,99 @@
+
+This is an example to demonstrate Adios ICEE method for WAN staging.
+
+== ICEE Initialization ==
+
+In short, ICEE is sending information in a push way. I.e., once a
+reader registers his connection information (hostname and port) to a
+writer, the writer pushes data to the reader.
+
+In ICEE, an initial connection is established between a writer and a
+reader by the following steps:
+
+1. Writer listens on a port, say P1, waiting a client (or multiple) to
+register. Writer's listening port can be specified by "cm_port"
+option when calling adios_select_method (when using Adios no xml init)
+or in an xml file.
+and
+The following options can be used for initializing writer:
+
+    cm_port : writer's listening port
+    max_client : number of clients to register (default is 1)
+
+2. A reader needs to know the writer's hostname and port. Then, the
+reader connects to the writer and registers his connection information
+(reader's hostname and port). 
+
+The following options can be specified on calling
+adios_read_init_method:
+
+    cm_host : reader's hostname
+    cm_port : reader's port
+    cm_remote_host : writer's hostname
+    cm_remote_port : writer's port
+
+A reader can register to multiple writers to receive data from
+multiple sources. Then, use the following option:
+
+    remote_list : specify multiple writer's location in the format:
+    hostname1:port1,hostname2:port2,...
+
+3. After successful registration, the writer will push data to the reader.
+
+
+
+== ICEE Example ==
+
+This program consists of two Adios executables; adios_write and
+adios_read. adios_write will send data through TCP/IP to adios_read.
+
+Case I: 1-to-1 connection (one writer and one reader)
+
+We assume the following TCP/IP connection:
+
+       adios_write            adios_read
+node:    host1                  host2
+port:    59997                  59999
+
+Execution is as follows. First, run the writer:
+
+$ adios_write -w ICEE -p 59997
+
+Then, run the reader in another terminal:
+
+$ adios_read -r ICEE -h host2 -p 59999 -s host1 -t 59997
+
+
+Case II: N-to-1 connection (N writers and one reader)
+
+We assume the following TCP/IP connection:
+
+                  2 adios_write            adios_read
+node:               host1                    host2
+rank 0's port:      59997                    59999
+rank 1's port:      59998                    
+
+$ mpirun -n 2 adios_write -w ICEE -p 59997
+
+Note: the rank 1's port will be computed by rank 0's port + 1. This is
+not a ICEE function. It is programed in this example.
+
+$ adios_read -r ICEE -h host2 -p 59999 -u "host1:59997,host1:59998"
+
+
+Case III: 1-to-N connection (1 writer and N readers)
+
+We assume the following TCP/IP connection:
+
+                  adios_write            2 adios_read
+node:               host1                    host2
+rank 0's port:      59997                    59999
+rank 1's port:                               60000
+
+
+$ adios_write -w ICEE -p 59997 -m 2
+
+$ mpirun -n 2 adios_read -r ICEE -h host2 -p 59999 -u "host1:59997"
+
+Or, 
+$ mpirun -n 2 adios_read -r ICEE -h host2 -p 59999 -s host1 -t 59997
diff --git a/examples/C/icee_arrays/array/adios_read.c b/examples/C/icee_arrays/array/adios_read.c
new file mode 100644
index 0000000..b56a51b
--- /dev/null
+++ b/examples/C/icee_arrays/array/adios_read.c
@@ -0,0 +1,210 @@
+/* 
+ * 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 ICEE Example
+ */
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h> 
+#include <libgen.h>
+#include <locale.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+#include "adios_error.h"
+
+void usage(const char *argv0)
+{
+    fprintf(stderr, "usage: %s\n", argv0);
+    fprintf(stderr, "Options:\n");
+    fprintf(stderr, "-w [ MPI | ICEE ]\n");
+    fprintf(stderr, "-r [ BP | ICEE ]\n");
+    exit (1);
+}
+
+int main (int argc, char ** argv) 
+{
+    int c;
+    opterr = 0;
+
+    char*  cm_host = "localhost";
+    int    cm_port = 59997;
+    char*  cm_remote_host = "localhost";
+    int    cm_remote_port = 59999;
+    int    is_multi_writers = 0;
+    char*  remote_list = "";
+    char*  attr_list = "";
+    char   initstring [512];
+    int    verbose_level = 3;
+    char*  cm_transport = "TCP";
+    float  timeout_sec = 10.0; 
+    int    use_native_contact = 0;
+    int    is_passive = 0;
+
+    char*  adios_write_method = "MPI";
+    enum ADIOS_READ_METHOD adios_read_method = ADIOS_READ_METHOD_BP;
+
+    while ((c = getopt (argc, argv, "h:p:s:t:u:a:w:r:v:T:o:nP")) != -1)
+    {
+        switch (c)
+        {
+        case 'h':
+            cm_host = optarg;
+            break;
+        case 'p':
+            cm_port = atoi(optarg);
+            break;
+        case 's':
+            cm_remote_host = optarg;
+            break;
+        case 't':
+            cm_remote_port = atoi(optarg);
+            break;
+        case 'u':
+            is_multi_writers = 1;
+            remote_list = optarg;
+            break;
+        case 'a':
+            is_multi_writers = 1;
+            attr_list = optarg;
+            break;
+        case 'w':
+            adios_write_method = optarg;
+            break;
+        case 'r':
+            if (strcmp(optarg, "BP") ==0) {
+                adios_read_method = ADIOS_READ_METHOD_BP;
+            } else if (strcmp(optarg, "ICEE") == 0) {
+                adios_read_method = ADIOS_READ_METHOD_ICEE;
+            } else {
+                fprintf(stderr, "No read method: %s\n", optarg);
+            }
+            break;
+        case 'v':
+            verbose_level = atoi(optarg);
+            break;
+        case 'T':
+            cm_transport = optarg;
+            break;
+        case 'o':
+            timeout_sec = atoi(optarg);
+            break;
+        case 'n':
+            use_native_contact = 1;
+            break;
+        case 'P':
+            is_passive = 1;
+            break;
+        default:
+            usage(basename(argv[0]));
+            break;
+        }
+    }
+
+    int         rank, size, i, j;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * v;
+    ADIOS_SELECTION * sel;
+
+    int steps = 0;
+    int retval = 0;
+
+    void * data = NULL;
+    uint64_t start[2], count[2];
+
+    MPI_Init (&argc, &argv);
+
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+
+    if (!is_multi_writers)
+        sprintf(initstring, "verbose=%d;cm_host=%s;cm_port=%d;cm_remote_host=%s;cm_remote_port=%d;transport=%s;use_native_contact=%d;is_passive=%d", 
+                verbose_level, cm_host, cm_port+rank, cm_remote_host, cm_remote_port, cm_transport, use_native_contact, is_passive);
+    else
+        sprintf(initstring, "verbose=%d;cm_host=%s;cm_port=%d;remote_list=%s;attr_list=%s;transport=%s;use_native_contact=%d;is_passive=%d", 
+                verbose_level, cm_host, cm_port+rank, remote_list, attr_list, cm_transport, use_native_contact, is_passive);
+        
+
+    adios_read_init_method (adios_read_method, comm, initstring);
+
+    f = adios_read_open ("adios_globaltime.bp", adios_read_method,
+                         comm, ADIOS_LOCKMODE_NONE, timeout_sec);
+    if (adios_errno == err_file_not_found)
+    {
+        printf ("rank %d: Stream not found after waiting %f seconds: %s\n",
+                rank, timeout_sec, adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (adios_errno == err_end_of_stream)
+    {
+        printf ("rank %d: Stream terminated before open. %s\n", rank, adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (f == NULL) {
+        printf ("rank %d: Error at opening stream: %s\n", rank, adios_errmsg());
+        retval = adios_errno;
+    }
+    else
+    {
+        /* process file here... */
+        v = adios_inq_var (f, "temperature");
+
+        uint64_t slice_size = v->dims[0]/size;
+        if (rank == size-1)
+            slice_size = slice_size + v->dims[0]%size;
+
+        start[0] = rank * slice_size;
+        count[0] = slice_size;
+
+        data = malloc (slice_size * sizeof(double));
+	assert(data != NULL);
+
+        /* Processing loop over the steps (we are already in the first one) */
+        while (adios_errno != err_end_of_stream) {
+            steps++; // steps start counting from 1
+
+            sel = adios_selection_boundingbox (v->ndim, start, count);
+            adios_schedule_read (f, sel, "temperature", 0, 1, data);
+            adios_perform_reads (f, 1);
+
+            double sum = 0.0;
+            for (i = 0; i < slice_size; i++) 
+            {
+                sum += *((double *)data + i);
+            }
+
+            printf("Step:%d, rank=%d: sum(data[%lld:%lld]) = %.01f\n", 
+                   f->current_step, rank, start[0], start[0]+count[0]-1, sum);
+
+            // advance to 1) next available step with 2) blocking wait
+            adios_advance_step (f, 0, timeout_sec);
+            if (adios_errno == err_step_notready)
+            {
+                printf ("rank %d: No new step arrived within the timeout. Quit. %s\n",
+                        rank, adios_errmsg());
+                break; // quit while loop
+            }
+            
+        }
+        
+        adios_read_close (f);
+    }
+    
+    if (rank==0) 
+        printf ("We have processed %d steps\n", steps);
+    
+    adios_read_finalize_method (adios_read_method);
+    free (data);
+    MPI_Finalize ();
+    
+    return retval;
+}
+
diff --git a/examples/C/icee_arrays/array/adios_write.c b/examples/C/icee_arrays/array/adios_write.c
new file mode 100644
index 0000000..e931227
--- /dev/null
+++ b/examples/C/icee_arrays/array/adios_write.c
@@ -0,0 +1,194 @@
+/* 
+ * 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 ICEE Example
+ */
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h> 
+#include <libgen.h>
+#include <locale.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+void usage(const char *argv0)
+{
+    fprintf(stderr, "usage: %s\n", argv0);
+    fprintf(stderr, "Options:\n");
+    fprintf(stderr, "-w [ MPI | ICEE ]\n");
+    fprintf(stderr, "-r [ BP | ICEE ]\n");
+    exit (1);
+}
+
+int main (int argc, char ** argv) 
+{
+    int c;
+    opterr = 0;
+
+    char*  cm_host = "localhost";
+    int    cm_port = 59999;
+    char*  cm_remote_host = "localhost";
+    int    cm_remote_port = 59997;
+    int    is_multi_writers = 0;
+    char*  remote_list = "";
+    int    max_client = 1;
+    char   initstring [512];
+    int    verbose_level = 3;
+    char*  cm_transport = "TCP";
+    int    interval_sec = 5;
+	int    NX = 1000;
+    int    is_passive = 0;
+
+    char*  adios_write_method = "MPI";
+    enum ADIOS_READ_METHOD adios_read_method = ADIOS_READ_METHOD_BP;
+
+    while ((c = getopt (argc, argv, "h:p:s:t:m:w:r:v:T:i:n:P")) != -1)
+    {
+        switch (c)
+        {
+        case 'h':
+            cm_host = optarg;
+            break;
+        case 'p':
+            cm_port = atoi(optarg);
+            break;
+        case 's':
+            cm_remote_host = optarg;
+            break;
+        case 't':
+            cm_remote_port = atoi(optarg);
+            break;
+        case 'm':
+            max_client = atoi(optarg);
+            break;
+        case 'w':
+            adios_write_method = optarg;
+            break;
+        case 'r':
+            if (strcmp(optarg, "BP") == 0) {
+                adios_read_method = ADIOS_READ_METHOD_BP;
+            } else if (strcmp(optarg, "ICEE") == 0) {
+                adios_read_method = ADIOS_READ_METHOD_ICEE;
+            } else {
+                fprintf(stderr, "No read method: %s\n", optarg);
+            }
+            break;
+        case 'v':
+            verbose_level = atoi(optarg);
+            break;
+        case 'T':
+            cm_transport = optarg;
+            break;
+        case 'i':
+            interval_sec = atoi(optarg);
+            break;
+        case 'n':
+            NX = atoi(optarg);
+            break;
+        case 'P':
+            is_passive = 1;
+            break;
+        default:
+            usage(basename(argv[0]));
+            break;
+        }
+    }
+
+	char        filename [256];
+	int         rank, size, i;
+	int         G, O; 
+	double      *t = (double *) malloc(NX * sizeof(double));
+	assert(t != NULL);
+	MPI_Comm    comm = MPI_COMM_WORLD;
+
+	/* ADIOS variables declarations for matching gwrite_temperature.ch */
+	int         it;
+	uint64_t    adios_groupsize, adios_totalsize;
+
+	MPI_Init (&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+    setlocale(LC_NUMERIC, "");
+
+    G = NX * size;
+    if (rank==0) printf("NX = %d\n", NX);
+
+	strcpy (filename, "adios_globaltime.bp");
+
+    sprintf(initstring, "verbose=%d;cm_host=%s;cm_port=%d;max_client=%d;transport=%s;is_passive=%d", 
+            verbose_level, cm_host, cm_port+rank, max_client, cm_transport, is_passive);
+
+	adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+
+    int64_t       m_adios_group;
+    int64_t       m_adios_file;
+
+    adios_declare_group (&m_adios_group, "restart", "", adios_flag_yes);
+    adios_select_method (m_adios_group, adios_write_method, initstring, "");
+
+    adios_define_var (m_adios_group, "NX"
+                      ,"", adios_integer
+                      ,0, 0, 0);
+  
+    adios_define_var (m_adios_group, "G"
+                      ,"", adios_integer
+                      ,0, 0, 0);
+
+    adios_define_var (m_adios_group, "O"
+                      ,"", adios_integer
+                      ,0, 0, 0);
+    
+    adios_define_var (m_adios_group, "temperature"
+                      ,"", adios_double
+                      ,"NX", "G", "O");
+
+    for (it =0; it < 5; it++) 
+    {
+
+        for (i = 0; i < NX; i++)
+            t[i] = rank + it + 1.0;
+
+        MPI_Barrier(comm); 
+        double t_start = MPI_Wtime();
+
+        adios_open (&m_adios_file, "restart", filename, "a", comm);
+        adios_groupsize = 4 + 4 + 4 + NX * 8;
+        adios_group_size (m_adios_file, adios_groupsize, &adios_totalsize);
+
+        adios_write(m_adios_file, "NX", (void *) &NX);
+        adios_write(m_adios_file, "G", (void *) &G);
+        O = rank * NX;
+        adios_write(m_adios_file, "O", (void *) &O);
+        adios_write(m_adios_file, "temperature", t);
+
+        adios_close (m_adios_file);
+
+        MPI_Barrier(comm);
+        double t_end = MPI_Wtime();
+        double t_elap = t_end - t_start;
+
+        if (rank==0)
+            printf("[%d] Elapsed %.03f seconds, throughput %'.03f KB/sec\n", 
+                   it, t_elap, (double)adios_groupsize/t_elap/1024.0);
+        
+        sleep(interval_sec);
+    }
+
+	adios_finalize (rank);
+
+	MPI_Finalize ();
+	return 0;
+}
diff --git a/examples/C/manual/Makefile.am b/examples/C/manual/Makefile.am
index ebb8ddc..4e92193 100644
--- a/examples/C/manual/Makefile.am
+++ b/examples/C/manual/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/manual/Makefile.in b/examples/C/manual/Makefile.in
index f614750..9272595 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/manual/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -148,6 +154,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -205,6 +213,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -304,11 +315,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -374,7 +387,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 1_nonadios_example_SOURCES = 1_nonadios_example.c
diff --git a/examples/C/query/CMakeLists.txt b/examples/C/query/CMakeLists.txt
new file mode 100644
index 0000000..a999b6d
--- /dev/null
+++ b/examples/C/query/CMakeLists.txt
@@ -0,0 +1,20 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/examples/C/query)
+
+add_executable(write_vars write_vars.c)
+target_link_libraries(write_vars  adios_nompi ${ADIOSLIB_SEQ_LDADD})
+set_target_properties(write_vars  PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}_NOMPI")
+
+add_executable(query_vars query_vars.c)
+target_link_libraries(query_vars  adiosread_nompi ${ADIOSREADLIB_SEQ_LDADD})
+set_target_properties(query_vars  PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}_NOMPI")
+
+add_executable(write_table write_table.c)
+target_link_libraries(write_table adios_nompi ${ADIOSLIB_SEQ_LDADD})
+set_target_properties(write_table PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}_NOMPI")
+
+add_executable(query_table query_table.c)
+target_link_libraries(query_table adiosread_nompi ${ADIOSREADLIB_SEQ_LDADD})
+set_target_properties(query_table PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}_NOMPI")
+
diff --git a/examples/C/query/Makefile.am b/examples/C/query/Makefile.am
new file mode 100644
index 0000000..43791fd
--- /dev/null
+++ b/examples/C/query/Makefile.am
@@ -0,0 +1,34 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src/public -I$(top_srcdir)/src/query
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS = write_vars query_vars write_table query_table
+
+write_vars_SOURCES = write_vars.c
+write_vars_LDADD = $(top_builddir)/src/libadios_nompi.a 
+write_vars_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS)
+write_vars_LDADD += $(ADIOSLIB_SEQ_LDADD)
+
+query_vars_SOURCES = query_vars.c
+query_vars_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
+query_vars_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)
+query_vars_LDADD += $(ADIOSREADLIB_SEQ_LDADD)
+
+write_table_SOURCES = write_table.c
+write_table_LDADD = $(top_builddir)/src/libadios_nompi.a 
+write_table_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS)
+write_table_LDADD += $(ADIOSLIB_SEQ_LDADD)
+
+query_table_SOURCES = query_table.c
+query_table_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
+query_table_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)
+query_table_LDADD += $(ADIOSREADLIB_SEQ_LDADD)
+
+EXTRA_DIST = README_vars.txt README_table.txt
+
+CLEANFILES = *.bp *.idx
+
+CC=$(MPICC)
+
+
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/examples/C/query/Makefile.in
similarity index 82%
copy from tests/C/flexpath_tests/maya_append/Makefile.in
copy to examples/C/query/Makefile.in
index f614d4c..fb60e87 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/examples/C/query/Makefile.in
@@ -34,8 +34,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = writer_maya$(EXEEXT) reader_maya$(EXEEXT)
-subdir = tests/C/flexpath_tests/maya_append
+noinst_PROGRAMS = write_vars$(EXEEXT) query_vars$(EXEEXT) \
+	write_table$(EXEEXT) query_table$(EXEEXT)
+subdir = examples/C/query
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -77,21 +84,35 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_reader_maya_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
-reader_maya_OBJECTS = $(am_reader_maya_OBJECTS)
+am_query_table_OBJECTS = query_table.$(OBJEXT)
+query_table_OBJECTS = $(am_query_table_OBJECTS)
 am__DEPENDENCIES_1 =
-reader_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+query_table_DEPENDENCIES = $(top_builddir)/src/libadiosread_nompi.a \
 	$(am__DEPENDENCIES_1)
-reader_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+query_table_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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 \
+	$(query_table_LDFLAGS) $(LDFLAGS) -o $@
+am_query_vars_OBJECTS = query_vars.$(OBJEXT)
+query_vars_OBJECTS = $(am_query_vars_OBJECTS)
+query_vars_DEPENDENCIES = $(top_builddir)/src/libadiosread_nompi.a \
 	$(am__DEPENDENCIES_1)
-writer_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+query_vars_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(writer_maya_LDFLAGS) $(LDFLAGS) -o $@
+	$(query_vars_LDFLAGS) $(LDFLAGS) -o $@
+am_write_table_OBJECTS = write_table.$(OBJEXT)
+write_table_OBJECTS = $(am_write_table_OBJECTS)
+write_table_DEPENDENCIES = $(top_builddir)/src/libadios_nompi.a \
+	$(am__DEPENDENCIES_1)
+write_table_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(write_table_LDFLAGS) $(LDFLAGS) -o $@
+am_write_vars_OBJECTS = write_vars.$(OBJEXT)
+write_vars_OBJECTS = $(am_write_vars_OBJECTS)
+write_vars_DEPENDENCIES = $(top_builddir)/src/libadios_nompi.a \
+	$(am__DEPENDENCIES_1)
+write_vars_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(write_vars_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -104,8 +125,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
-DIST_SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
+SOURCES = $(query_table_SOURCES) $(query_vars_SOURCES) \
+	$(write_table_SOURCES) $(write_vars_SOURCES)
+DIST_SOURCES = $(query_table_SOURCES) $(query_vars_SOURCES) \
+	$(write_table_SOURCES) $(write_vars_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -131,6 +154,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +213,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +315,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,17 +387,27 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/public -I$(srcdir)/../include
+INCLUDES = $(all_includes) -I$(top_srcdir)/src/public \
+	-I$(top_srcdir)/src/query
 AUTOMAKE_OPTIONS = no-dependencies
-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 = cfg.h readme.txt
+write_vars_SOURCES = write_vars.c
+write_vars_LDADD = $(top_builddir)/src/libadios_nompi.a \
+	$(ADIOSLIB_SEQ_LDADD)
+write_vars_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS)
+query_vars_SOURCES = query_vars.c
+query_vars_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
+	$(ADIOSREADLIB_SEQ_LDADD)
+query_vars_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)
+write_table_SOURCES = write_table.c
+write_table_LDADD = $(top_builddir)/src/libadios_nompi.a \
+	$(ADIOSLIB_SEQ_LDADD)
+write_table_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS)
+query_table_SOURCES = query_table.c
+query_table_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
+	$(ADIOSREADLIB_SEQ_LDADD)
+query_table_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)
+EXTRA_DIST = README_vars.txt README_table.txt
+CLEANFILES = *.bp *.idx
 all: all-am
 
 .SUFFIXES:
@@ -381,9 +421,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/query/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile
+	  $(AUTOMAKE) --gnu examples/C/query/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -411,12 +451,18 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-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)
+query_table$(EXEEXT): $(query_table_OBJECTS) $(query_table_DEPENDENCIES) 
+	@rm -f query_table$(EXEEXT)
+	$(query_table_LINK) $(query_table_OBJECTS) $(query_table_LDADD) $(LIBS)
+query_vars$(EXEEXT): $(query_vars_OBJECTS) $(query_vars_DEPENDENCIES) 
+	@rm -f query_vars$(EXEEXT)
+	$(query_vars_LINK) $(query_vars_OBJECTS) $(query_vars_LDADD) $(LIBS)
+write_table$(EXEEXT): $(write_table_OBJECTS) $(write_table_DEPENDENCIES) 
+	@rm -f write_table$(EXEEXT)
+	$(write_table_LINK) $(write_table_OBJECTS) $(write_table_LDADD) $(LIBS)
+write_vars$(EXEEXT): $(write_vars_OBJECTS) $(write_vars_DEPENDENCIES) 
+	@rm -f write_vars$(EXEEXT)
+	$(write_vars_LINK) $(write_vars_OBJECTS) $(write_vars_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -433,12 +479,6 @@ 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/examples/C/query/README_table.txt b/examples/C/query/README_table.txt
new file mode 100644
index 0000000..84f0bd7
--- /dev/null
+++ b/examples/C/query/README_table.txt
@@ -0,0 +1,83 @@
+Example write_table/query_table demonstrates how to create/evaluate and use
+a query on different columns of a 2D table variable.
+
+Query: Get the Kinetic Energy of Carbon atoms whose Potential <= 96
+i.e.  "column 1 of A is 0" AND "column 2 < 96"
+
+1. Generate the example data set
+=================================
+
+$ ./write_table
+$ bpls -l table.bp -d A -n 7 -f "%4d "
+  integer  A         {10, 7} = -1 / 201 / 18.9714 / 40.7168 
+    (0,0)       0    0   97   15    8    0    7 
+    (1,0)       1    0   96   16    5   -1    7 
+    (2,0)       2    1   32    1    7    1    7 
+    (3,0)       3    2  200    8    6    0    7 
+    (4,0)       4    0   94   14    1    3    5 
+    (5,0)       5    0   96   13    2    4    5 
+    (6,0)       6    2  201    2    3    3    5 
+    (7,0)       7    1   37    9    4    2    5 
+    (8,0)       8    0   98   15    5    1    5 
+    (9,0)       9    0   99   14    6    2    5 
+
+
+just FYI:
+
+$ bpls -l table.bp -d -S Elements Columns
+  byte     Elements  {3, 9} = 0 / 121 / 81.3704 / 40.0131 
+    (0,0)    "Carbon  "
+    (1,0)    "Nitrogen"
+    (2,0)    "Oxygen  "
+
+  byte     Columns   {7, 11} = 0 / 116 / 77.2597 / 39.3811 
+    (0, 0)    "ID        "
+    (1, 0)    "Element   "
+    (2, 0)    "Potential "
+    (3, 0)    "Kinetic E "
+    (4, 0)    "Position X"
+    (5, 0)    "Position Y"
+    (6, 0)    "Position Z"
+
+
+2. If ADIOS was built with FastBit, create the index file (optional)
+====================================================================
+
+$ adios_index_fastbit table.bp
+
+$ ls -l table.*
+-rw-rw-r-- 1 adios adios    1879 Dec 14 12:08 table.bp
+-rw-rw-r-- 1 adios adios 1050846 Dec 14 12:14 table.idx
+
+$ du -sh  table.*
+4.0K	table.bp
+8.0K	table.idx
+
+
+3. Evaluate the query
+=====================
+
+$ ./query_table 
+File : table.bp
+Variable A has 10 rows and 7 columns
+
+====== querying over columns of a table  =======
+Query: ((A = 0) and (A <= 96))
+Number of hits returned in batch 1 = 3 
+
+Hit           i       j    Kinetic E
+----------------------------------------------
+    0         1       3      16
+    1         4       3      14
+    2         5       3      13
+
+
+Read all rows that match the query:
+
+ID         Element    Potential  Kinetic E  Position X Position Y Position Z 
+----------------------------------------------------------------------------
+    1          0         96         16          5         -1          7      
+    4          0         94         14          1          3          5      
+    5          0         96         13          2          4          5 
+
+
diff --git a/examples/C/query/README_vars.txt b/examples/C/query/README_vars.txt
new file mode 100644
index 0000000..8f9ed37
--- /dev/null
+++ b/examples/C/query/README_vars.txt
@@ -0,0 +1,79 @@
+Example write_vars/query_vars demonstrate how to create, 
+evaluate and use a query over multiple queries.
+
+Query: 80 < P < 90 AND V <= 50 
+Read T where the query is true.
+
+1. Generate the example data file
+==================================
+
+$ ./write_vars
+$ bpls -ld vars.bp
+
+  double   T     {5, 6} = 1.1 / 5.6 / 3.35 / 1.42449 
+    (0,0)    1.1 1.2 1.3 1.4 1.5 1.6 
+    (1,0)    2.1 2.2 2.3 2.4 2.5 2.6 
+    (2,0)    3.1 3.2 3.3 3.4 3.5 3.6 
+    (3,0)    4.1 4.2 4.3 4.4 4.5 4.6 
+    (4,0)    5.1 5.2 5.3 5.4 5.5 5.6 
+
+  double   P     {5, 6} = 31.6 / 95.5 / 66.6833 / 22.1717 
+    (0,0)    41.1 61.2 81.3 81.4 91.5 31.6 
+    (1,0)    42.1 62.2 82.3 82.4 92.5 32.6 
+    (2,0)    43.1 63.2 83.3 83.4 93.5 33.6 
+    (3,0)    44.1 64.2 84.3 84.4 94.5 34.6 
+    (4,0)    45.1 65.2 85.3 85.4 95.5 35.6 
+
+  double   V     {5, 6} = 41.1 / 55.6 / 49.15 / 5.30935 
+    (0,0)    41.1 41.2 41.3 41.4 41.5 41.6 
+    (1,0)    45.1 45.2 45.3 45.4 45.5 45.6 
+    (2,0)    49.1 49.2 49.3 49.4 49.5 49.6 
+    (3,0)    54.1 54.2 54.3 54.4 54.5 54.6 
+    (4,0)    55.1 55.2 55.3 55.4 55.5 55.6 
+
+2. If ADIOS was built with FastBit, create the index file (optional)
+====================================================================
+
+$ adios_index_fastbit vars.bp
+$ ls -l vars.*
+-rw-rw-r-- 1 adios adios    2253 Dec 14 10:52 vars.bp
+-rw-rw-r-- 1 adios adios 1051182 Dec 14 10:52 vars.idx
+
+Do not worry, the actual size of vars.idx is small:
+
+$ du -sh vars.*
+4.0K	vars.bp
+8.0K	vars.idx
+
+
+3. Run the query
+================
+
+The query and the data is chosen so that:
+ - the query part of P is true for the two middle columns of P, 
+ - the query part of V is true for the first three rows of V, 
+ - and the combined query is true for 6 points 
+   (the intersection of the two parts).
+
+$ ./query_vars 
+
+====== querying with one bound box for all variables =======
+File : vars.bp
+Query: (((P > 80.0) and (P < 90.0)) and (V <= 50.0))
+Number of hits returned in batch 1 = 6 
+
+Hit           i       j        P      V     T
+----------------------------------------------
+    0         0       2      81.3   41.3   1.3
+    1         0       3      81.4   41.4   1.4
+    2         1       2      82.3   45.3   2.3
+    3         1       3      82.4   45.4   2.4
+    4         2       2      83.3   49.3   3.3
+    5         2       3      83.4   49.4   3.4
+
+
+
+
+
+
+
diff --git a/examples/C/query/query_table.c b/examples/C/query/query_table.c
new file mode 100644
index 0000000..9df7609
--- /dev/null
+++ b/examples/C/query/query_table.c
@@ -0,0 +1,193 @@
+/* 
+ * 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: query over columns of a table (2D variables)
+ *
+ * How to run: ./query_table
+ * Output: standard output
+ *
+*/
+
+#ifndef _NOMPI
+#define _NOMPI
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "adios.h"       /* includes dummy MPI */
+#include "adios_query.h" /* includes the read API */
+
+const char filename[] = "table.bp";
+
+void read_rows (ADIOS_FILE *f, ADIOS_SELECTION *hits, int ncols) 
+{
+    /* Demonstrates the more involved work to read the whole rows of the table
+       where the query was true. The point list returned by the evaluation
+       (on any result column) can be used here, we just need the row numbers,
+       i.e. the first dimensions of the points 
+     */
+    int n, i;
+    int Npoints = hits->u.points.npoints;
+    uint64_t *points = hits->u.points.points;
+
+    /* Just read all data at once here, assuming it fits in memory */
+    int32_t *data = (int32_t*) malloc (Npoints * ncols * sizeof(int32_t));
+
+    /* We use one bounding box selection of a single row repeatedly, 
+       modifying the offset based on the actual point's row number.
+     */
+    uint64_t offs[] = {0,0};  
+    uint64_t cnt[] = {1,ncols}; // select one row
+    ADIOS_SELECTION *box = adios_selection_boundingbox(2, offs, cnt);
+    
+    printf ("\nRead all rows that match the query:\n");
+    for (n=0; n<Npoints; n++) {
+        box->u.bb.start[0] = points[2*n]; // set actual row 
+        adios_schedule_read (f, box, "A", 0, 1, data+n*ncols);
+    }
+    adios_perform_reads (f, 1);
+
+    /* Get the column names, just for fun */
+    ADIOS_VARINFO *v = adios_inq_var (f, "Columns");
+    char *Columns = (char*) malloc (v->dims[0]*v->dims[1]);
+    //printf ("Allocate %lld bytes for column names\n", v->dims[0]*v->dims[1]);
+    adios_schedule_read (f, NULL, "Columns", 0, 1, Columns);
+    adios_perform_reads (f, 1);
+
+    /* Print result */
+    printf ("\n");
+    for (i=0; i<ncols; i++) {
+        printf ("%s ", Columns + i*v->dims[1]);
+    }
+    printf ("\n----------------------------------------------------------------------------\n");
+    for (n=0; n<Npoints; n++) {
+        for (i=0; i<ncols; i++) {
+            printf ("%5d      ", data[n*ncols+i]);
+        }
+        printf ("\n");
+    }
+    printf ("\n");
+
+    /* Free memory */
+    free (data);
+    adios_selection_delete(box);
+    adios_free_varinfo (v);
+
+}
+
+void print_points (ADIOS_SELECTION *hits, int *KE)
+{
+    int n;
+    int Npoints = hits->u.points.npoints;
+    uint64_t *points = hits->u.points.points;
+    /* Note: hits->u.points.ndim is 2 in this example */
+
+    printf ("\nHit           i       j    Kinetic E\n");
+    printf ("----------------------------------------------\n");
+    for (n=0; n<Npoints; n++) {
+        printf ("  %3d      %4lld    %4lld      %d\n",
+                n, points[2*n],points[2*n+1],KE[n]);
+    }
+    printf ("\n");
+}
+
+void query_columns(ADIOS_FILE* f, int nrows, int ncols)
+{
+
+    printf("\n====== querying over columns of a table  =======\n");
+    uint64_t offs1[] = {0,1};  // element
+    uint64_t offs2[] = {0,2};  // potential
+    uint64_t offs3[] = {0,3};  // kinetic energy
+    uint64_t cnt[] = {nrows, 1};  
+    ADIOS_SELECTION* col1 = adios_selection_boundingbox(2, offs1, cnt);
+    ADIOS_SELECTION* col2 = adios_selection_boundingbox(2, offs2, cnt);
+    ADIOS_SELECTION* col3 = adios_selection_boundingbox(2, offs3, cnt);
+
+    ADIOS_QUERY *q1, *q2, *q;
+    q1 = adios_query_create(f, col1, "A", ADIOS_EQ, "0"); // select Carbon
+    q2 = adios_query_create(f, col2, "A", ADIOS_LTEQ, "96"); // select Potential <= 96
+    q  = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+    printf("Query: %s\n",q->condition);
+
+    if (q!= NULL) {
+        int timestep = 0;
+        int64_t batchSize = 20;
+        int nBatches = 1;
+        while (1) {
+            /* Evaluate query, get the list of points (of a limited number at once) */
+            ADIOS_SELECTION* hits = NULL;
+            int hasMore = adios_query_evaluate(q, col3, timestep, batchSize, &hits);
+            printf("Number of hits returned in batch %d = %lld \n",nBatches, hits->u.points.npoints);
+
+            if (hits->u.points.npoints > 0) {
+                /* Read the data of those points */
+                int *KE = (int *) malloc (sizeof(double)*hits->u.points.npoints);
+                adios_schedule_read (f, hits, "A", timestep, 1, KE);
+                adios_perform_reads (f, 1);
+
+                print_points (hits, KE);
+                free (KE);
+
+                read_rows (f, hits, ncols);
+            } 
+
+            /* free resources used only in this batch */
+            free(hits->u.points.points);
+            adios_selection_delete(hits);
+
+            if (hasMore <= 0) {
+                break;
+            }
+            nBatches++;
+        }
+
+    }
+    /* free resources used for the query */
+    adios_query_free(q1);
+    adios_query_free(q2);
+    adios_query_free(q);
+    adios_selection_delete(col1);
+    adios_selection_delete(col2);
+    adios_selection_delete(col3);
+}
+
+int main (int argc, char ** argv) 
+{
+    ADIOS_FILE * f;
+    MPI_Comm    comm_dummy = 0;  /* MPI_Comm is defined through adios.h/adios_read.h */
+    adios_read_init_method(ADIOS_READ_METHOD_BP,0,"");
+
+    printf("File : %s\n",filename);
+    f = adios_read_open_file (filename, ADIOS_READ_METHOD_BP, comm_dummy);
+    if (f == NULL) {
+        printf ("::%s\n", adios_errmsg());
+        return 1;
+    }
+
+    ADIOS_VARINFO *v = adios_inq_var (f, "A");
+    if (v == NULL) {
+        printf ("Error: did not find variable A in file %s::%s\n",
+                filename, adios_errmsg());
+        return 2;
+    }
+    if (v->ndim != 2) {
+        printf ("Error: Variable A is expected to have 2 dimensions\n");
+        return 2;
+    }
+    if (v->dims[1] < 4) {
+        printf ("Error: Table A is expected to have at least 4 columns\n");
+        return 2;
+    }
+
+    printf ("Variable A has %lld rows and %lld columns\n", v->dims[0], v->dims[1]);
+
+    query_columns(f, v->dims[0], v->dims[1]); 
+    adios_read_close(f);
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    return 0;
+}
diff --git a/examples/C/query/query_vars.c b/examples/C/query/query_vars.c
new file mode 100644
index 0000000..b111fa8
--- /dev/null
+++ b/examples/C/query/query_vars.c
@@ -0,0 +1,126 @@
+/* 
+ * 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: query over multiple variables 
+ *
+ * How to run: ./query_vars
+ * Output: standard output
+ *
+*/
+
+#ifndef _NOMPI
+#define _NOMPI
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "adios.h"       /* includes dummy MPI */
+#include "adios_query.h" /* includes the read API */
+
+const char filename[] = "vars.bp";
+
+void print_points (ADIOS_SELECTION *hits, double *P, double *V, double *T)
+{
+    int n;
+    int Npoints = hits->u.points.npoints;
+    uint64_t *points = hits->u.points.points;
+    /* Note: hits->u.points.ndim is 2 in this example */
+
+    printf ("\nHit           i       j        P      V     T\n");
+    printf ("----------------------------------------------\n");
+    for (n=0; n<Npoints; n++) {
+        printf ("  %3d      %4lld    %4lld      %g   %g   %g\n",
+                n, points[2*n],points[2*n+1],P[n],V[n],T[n]);
+    }
+    printf ("\n");
+}
+
+void query_OneBoundBoxForAllVars(ADIOS_FILE* f)
+{
+    printf("\n====== querying with one bound box for all variables =======\n");
+    uint64_t start[] = {0,0};
+    uint64_t count[] = {5,6};
+
+    ADIOS_SELECTION* box = adios_selection_boundingbox(2, start, count);
+    ADIOS_QUERY *q1, *q2, *q3, *q4, *q;
+    q1 = adios_query_create(f, box, "P", ADIOS_GT, "80.0");
+    q2 = adios_query_create(f, box, "P", ADIOS_LT, "90.0");
+    q3 = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+    q4 = adios_query_create(f, box, "V", ADIOS_LTEQ, "50.0");
+    q  = adios_query_combine(q3, ADIOS_QUERY_OP_AND, q4);
+    printf("File : %s\n",filename);
+    printf("Query: %s\n",q->condition);
+
+    if (q!= NULL) {
+        int timestep = 0;
+        int64_t batchSize = 20;
+        int nBatches = 1;
+        while (1) {
+            /* Evaluate query, get the list of points (of a limited number at once) */
+            ADIOS_SELECTION* hits = NULL;
+            int hasMore = adios_query_evaluate(q, box, timestep, batchSize, &hits);
+            printf("Number of hits returned in batch %d = %lld \n",nBatches, hits->u.points.npoints);
+
+            if (hits->u.points.npoints > 0) {
+                /* Read the data of those points */
+                double *P = (double *) malloc (sizeof(double)*hits->u.points.npoints);
+                double *V = (double *) malloc (sizeof(double)*hits->u.points.npoints);
+                double *T = (double *) malloc (sizeof(double)*hits->u.points.npoints);
+                adios_schedule_read (f, hits, "P", timestep, 1, P);
+                adios_schedule_read (f, hits, "V", timestep, 1, V);
+                adios_schedule_read (f, hits, "T", timestep, 1, T);
+                adios_perform_reads (f, 1);
+
+                print_points (hits, P, V, T);
+                free (P);
+                free (V);
+                free (T);
+            } 
+
+            /* free resources used only in this batch */
+            free(hits->u.points.points);
+            adios_selection_delete(hits);
+
+            if (hasMore <= 0) {
+                break;
+            }
+            nBatches++;
+        }
+
+    }
+    /* free resources used for the query */
+    adios_query_free(q1);
+    adios_query_free(q2);
+    adios_query_free(q3);
+    adios_query_free(q4);
+    adios_query_free(q);
+    adios_selection_delete(box);
+}
+
+int main (int argc, char ** argv) 
+{
+    ADIOS_FILE * f;
+    MPI_Comm    comm_dummy = 0;  /* MPI_Comm is defined through adios.h/adios_read.h */
+    adios_read_init_method(ADIOS_READ_METHOD_BP,0,"");
+
+    f = adios_read_open_file (filename, ADIOS_READ_METHOD_BP, comm_dummy);
+    if (f == NULL) {
+        printf ("::%s\n", adios_errmsg());
+        return 1;
+    }
+
+    query_OneBoundBoxForAllVars(f); 
+    //testNoBoxOnSelection(f);
+    // testDefaultBoundBox(f);
+    //testMultiBoundBox(f);
+    //testAllDifferentBoundBoxes(f);
+    //testUseOneWriteBlock(f, 0); 
+    adios_read_close(f);
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    return 0;
+}
diff --git a/examples/C/query/write_table.c b/examples/C/query/write_table.c
new file mode 100644
index 0000000..fc0d03f
--- /dev/null
+++ b/examples/C/query/write_table.c
@@ -0,0 +1,123 @@
+/* 
+ * 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 Query Example write part: 
+ *   write a few global array from a single processor
+ *   to be queried using query_table.c
+ *
+ * How to run: write_table
+ * Output: table.bp
+ * ADIOS config file: None
+ *
+*/
+
+/* This example will write out a 2D table like particle data,
+   where each row is data of one particle, and 
+   each column is a property of the particles.
+   It's completely fake data with integer values for demonstration.
+*/
+#ifndef _NOMPI
+#define _NOMPI
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include "adios.h"
+#include "adios_types.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+/* table for Atoms, named A.
+            unique ID
+            element type (C, O, N etc)
+            potential   
+            kinetic energy  
+            position X,Y and Z 
+
+   Note: This is not some data with any physical meaning...
+*/
+
+const int NX = 10;
+const int NY = 7;
+
+int32_t A[10][7] = { 
+/*   id, Elem,   P,   KE,   x,  y,  z */
+    {0,   0,     97,  15,   8,  0,  7},
+    {1,   0,     96,  16,   5, -1,  7},
+    {2,   1,     32,   1,   7,  1,  7},
+    {3,   2,    200,   8,   6,  0,  7},
+
+    {4,   0,     94,  14,   1,  3,  5},
+    {5,   0,     96,  13,   2,  4,  5},
+    {6,   2,    201,   2,   3,  3,  5},
+    {7,   1,     37,   9,   4,  2,  5},
+    {8,   0,     98,  15,   5,  1,  5},
+    {9,   0,     99,  14,   6,  2,  5},
+};
+
+const int Columns_length = 11; /* length of string + 1 for the terminating 0 */
+char Columns[7][11] = {
+    "ID        ",
+    "Element   ",
+    "Potential ",
+    "Kinetic E ",
+    "Position X",
+    "Position Y",
+    "Position Z",
+};
+
+const int n_of_elements = 3;
+const int Elements_length = 9; /* length of string + 1 for the terminating 0 */
+char Elements[3][9] = {
+    "Carbon  ",
+    "Nitrogen",
+    "Oxygen  "
+};
+
+
+int main (int argc, char ** argv) 
+{
+	int         size, i, block;
+	MPI_Comm    comm = 0; // dummy mpi 
+
+	/* ADIOS variables declarations for matching gwrite_temperature.ch */
+	uint64_t  adios_groupsize, adios_totalsize;
+        int64_t   g;
+        int64_t   f;
+        char dimstr[32];
+
+	adios_init_noxml (comm);
+        adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 1);
+
+        adios_declare_group (&g, "table", "", adios_flag_yes);
+        adios_select_method (g, "POSIX1", "", "");
+
+	sprintf (dimstr, "%d,%d", NX, NY);
+        adios_define_var (g, "A" ,"", adios_integer, dimstr, dimstr, "0,0");
+	sprintf (dimstr, "%d,%d", n_of_elements, Elements_length);
+        adios_define_var (g, "Elements" ,"", adios_byte, dimstr, dimstr, "0,0");
+	sprintf (dimstr, "%d,%d", NY, Columns_length);
+        adios_define_var (g, "Columns" ,"", adios_byte, dimstr, dimstr, "0,0");
+   
+   
+        adios_open (&f, "table", "table.bp", "w", comm);
+
+        adios_groupsize = NX*NY*sizeof(int32_t)           /* size of A */
+                        + n_of_elements * Elements_length /* size of Elements */
+                        + NY * Columns_length;            /* size of Columns */
+
+        adios_group_size (f, adios_groupsize, &adios_totalsize);
+	adios_write (f, "A", A);
+	adios_write (f, "Elements", Elements);
+	adios_write (f, "Columns", Columns);
+        adios_close (f);
+
+	adios_finalize (0);
+	return 0;
+}
diff --git a/examples/C/query/write_vars.c b/examples/C/query/write_vars.c
new file mode 100644
index 0000000..1104210
--- /dev/null
+++ b/examples/C/query/write_vars.c
@@ -0,0 +1,98 @@
+/* 
+ * 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 Query Example write part: 
+ *   write a few global array from a single processor
+ *   to be queried using query_vars.c
+ *
+ * How to run: write_vars
+ * Output: vars.bp
+ * ADIOS config file: None
+ *
+*/
+
+/* This example will write out three 2D variables, P, V and T.
+*/
+#ifndef _NOMPI
+#define _NOMPI
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include "adios.h"
+#include "adios_types.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+const int NX = 5;
+const int NY = 6;
+
+double T[5][6] = { 
+    {1.1, 1.2, 1.3, 1.4, 1.5, 1.6},
+    {2.1, 2.2, 2.3, 2.4, 2.5, 2.6},
+    {3.1, 3.2, 3.3, 3.4, 3.5, 3.6},
+    {4.1, 4.2, 4.3, 4.4, 4.5, 4.6},
+    {5.1, 5.2, 5.3, 5.4, 5.5, 5.6},
+};
+
+double P[5][6] = { 
+    {41.1, 61.2, 81.3, 81.4, 91.5, 31.6},
+    {42.1, 62.2, 82.3, 82.4, 92.5, 32.6},
+    {43.1, 63.2, 83.3, 83.4, 93.5, 33.6},
+    {44.1, 64.2, 84.3, 84.4, 94.5, 34.6},
+    {45.1, 65.2, 85.3, 85.4, 95.5, 35.6},
+};
+
+double V[5][6] = { 
+    {41.1, 41.2, 41.3, 41.4, 41.5, 41.6},
+    {45.1, 45.2, 45.3, 45.4, 45.5, 45.6},
+    {49.1, 49.2, 49.3, 49.4, 49.5, 49.6},
+    {54.1, 54.2, 54.3, 54.4, 54.5, 54.6},
+    {55.1, 55.2, 55.3, 55.4, 55.5, 55.6},
+};
+
+int main (int argc, char ** argv) 
+{
+	int         size, i, block;
+	MPI_Comm    comm = 0; // dummy mpi 
+
+	/* ADIOS variables declarations for matching gwrite_temperature.ch */
+	uint64_t  adios_groupsize, adios_totalsize;
+        int64_t   g;
+        int64_t   f;
+        int64_t   Tid, Pid, Vid; // variable IDs
+        char dimstr[32];
+
+	sprintf (dimstr, "%d,%d", NX, NY);
+
+	adios_init_noxml (comm);
+        adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 1);
+
+        adios_declare_group (&g, "vars", "", adios_flag_yes);
+        adios_select_method (g, "POSIX1", "", "");
+
+        Tid = adios_define_var (g, "T" ,"", adios_double, dimstr, dimstr, "0,0");
+        adios_set_transform (Tid, "none");
+        Pid = adios_define_var (g, "P" ,"", adios_double, dimstr, dimstr, "0,0");
+        adios_set_transform (Pid, "none");
+        Vid = adios_define_var (g, "V" ,"", adios_double, dimstr, dimstr, "0,0");
+        adios_set_transform (Vid, "none");
+   
+   
+        adios_open (&f, "vars", "vars.bp", "w", comm);
+        adios_groupsize = 3*NX*NY*sizeof(double);
+        adios_group_size (f, adios_groupsize, &adios_totalsize);
+	adios_write (f, "T", T);
+	adios_write (f, "P", P);
+	adios_write (f, "V", V);
+        adios_close (f);
+
+	adios_finalize (0);
+	return 0;
+}
diff --git a/examples/C/read_all/Makefile.am b/examples/C/read_all/Makefile.am
index 0f8481d..af63728 100644
--- a/examples/C/read_all/Makefile.am
+++ b/examples/C/read_all/Makefile.am
@@ -1,18 +1,18 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 noinst_PROGRAMS = read_all read_all_v1
 
 read_all_SOURCES = read_all.c
-read_all_CPPFLAGS = ${MACRODEFFLAG}_NOMPI 
+read_all_CPPFLAGS = ${MACRODEFFLAG}_NOMPI $(AM_CPPFLAGS)
 read_all_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
 read_all_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
 read_all_LDADD += $(ADIOSREADLIB_LDADD)
 
 read_all_v1_SOURCES = read_all_v1.c
-read_all_v1_CPPFLAGS = ${MACRODEFFLAG}_NOMPI ${MACRODEFFLAG}ADIOS_USE_READ_API_1
+read_all_v1_CPPFLAGS = ${MACRODEFFLAG}_NOMPI ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(AM_CPPFLAGS)
 read_all_v1_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
 read_all_v1_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
 read_all_v1_LDADD += $(ADIOSREADLIB_LDADD)
diff --git a/examples/C/read_all/Makefile.in b/examples/C/read_all/Makefile.in
index 38a5b4a..616099b 100644
--- a/examples/C/read_all/Makefile.in
+++ b/examples/C/read_all/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,16 +370,16 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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 
+read_all_CPPFLAGS = ${MACRODEFFLAG}_NOMPI $(AM_CPPFLAGS)
 read_all_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
 	$(ADIOSREADLIB_LDADD)
 read_all_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
 read_all_v1_SOURCES = read_all_v1.c
-read_all_v1_CPPFLAGS = ${MACRODEFFLAG}_NOMPI ${MACRODEFFLAG}ADIOS_USE_READ_API_1
+read_all_v1_CPPFLAGS = ${MACRODEFFLAG}_NOMPI ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(AM_CPPFLAGS)
 read_all_v1_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
 	$(ADIOSREADLIB_LDADD)
 read_all_v1_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
diff --git a/examples/C/scalars/Makefile.am b/examples/C/scalars/Makefile.am
index f1cd87c..12207c1 100644
--- a/examples/C/scalars/Makefile.am
+++ b/examples/C/scalars/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/scalars/Makefile.in b/examples/C/scalars/Makefile.in
index ca869cc..69c2509 100644
--- a/examples/C/scalars/Makefile.in
+++ b/examples/C/scalars/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -141,6 +147,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -198,6 +206,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -297,11 +308,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -367,7 +380,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 scalars_write_SOURCES = scalars_write.c
diff --git a/examples/C/schema/Makefile.am b/examples/C/schema/Makefile.am
index 9cd3f38..71bd796 100644
--- a/examples/C/schema/Makefile.am
+++ b/examples/C/schema/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/schema/Makefile.in b/examples/C/schema/Makefile.in
index 7fb9c4f..7f2f8bb 100644
--- a/examples/C/schema/Makefile.in
+++ b/examples/C/schema/Makefile.in
@@ -52,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -68,11 +69,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -189,6 +195,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -246,6 +254,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -345,11 +356,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -415,7 +428,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 uniform2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
diff --git a/examples/C/schema/rectilinear2d.c b/examples/C/schema/rectilinear2d.c
index 165510e..d02e394 100644
--- a/examples/C/schema/rectilinear2d.c
+++ b/examples/C/schema/rectilinear2d.c
@@ -10,6 +10,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifndef __APPLE__
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
diff --git a/examples/C/schema/structured2d.c b/examples/C/schema/structured2d.c
index 69fb687..0428d06 100644
--- a/examples/C/schema/structured2d.c
+++ b/examples/C/schema/structured2d.c
@@ -10,6 +10,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifndef __APPLE__
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
diff --git a/examples/C/schema/tri2d.c b/examples/C/schema/tri2d.c
index a5b7948..95ef767 100644
--- a/examples/C/schema/tri2d.c
+++ b/examples/C/schema/tri2d.c
@@ -10,6 +10,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifndef __APPLE__
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
diff --git a/examples/C/schema/tri2d.readme b/examples/C/schema/tri2d.readme
index f5483e2..3103db8 100644
--- a/examples/C/schema/tri2d.readme
+++ b/examples/C/schema/tri2d.readme
@@ -48,4 +48,4 @@ $ mpirun -np 12 ./tri2d_noxml 4 3
 $ 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
+/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_noxml.c b/examples/C/schema/tri2d_noxml.c
index 361e434..f9bd773 100644
--- a/examples/C/schema/tri2d_noxml.c
+++ b/examples/C/schema/tri2d_noxml.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-/* ADIOS C Example: write variables along with an rectilinear mesh. 
+/* ADIOS C Example: write variables along with an unstructured mesh. 
  */
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/examples/C/schema/uniform2d.c b/examples/C/schema/uniform2d.c
index e08981a..b7b49fa 100644
--- a/examples/C/schema/uniform2d.c
+++ b/examples/C/schema/uniform2d.c
@@ -10,6 +10,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifndef __APPLE__
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
diff --git a/examples/C/stat/Makefile.am b/examples/C/stat/Makefile.am
index 6262b13..4fd8509 100644
--- a/examples/C/stat/Makefile.am
+++ b/examples/C/stat/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/stat/Makefile.in b/examples/C/stat/Makefile.in
index d426644..5a6bb66 100644
--- a/examples/C/stat/Makefile.in
+++ b/examples/C/stat/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 stat_write_SOURCES = stat_write.c
diff --git a/examples/C/transforms/CMakeLists.txt b/examples/C/transforms/CMakeLists.txt
new file mode 100644
index 0000000..d1c5011
--- /dev/null
+++ b/examples/C/transforms/CMakeLists.txt
@@ -0,0 +1,29 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/examples/C/transforms)
+link_directories(${PROJECT_BINARY_DIR}/examples/C/transforms)
+
+add_executable(transforms_adios_global adios_global.c)
+target_link_libraries(transforms_adios_global adios ${ADIOSLIB_LDADD})
+
+add_executable(adios_read_subv adios_read_subv.c)
+target_link_libraries(adios_read_subv adiosread ${ADIOSREADLIB_LDADD})
+
+add_executable(adios_read_points adios_read_points.c)
+target_link_libraries(adios_read_points adiosread ${ADIOSREADLIB_LDADD})
+
+add_executable(adios_read_wb_subpg adios_read_wb_subpg.c)
+target_link_libraries(adios_read_wb_subpg adiosread ${ADIOSREADLIB_LDADD})
+
+set (PROGS transforms_adios_global adios_read_subv adios_read_points adios_read_wb_subpg)
+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()
+endforeach()
+
+file(COPY adios_global.xml gread_temperature.ch gwrite_temperature.ch 
+     DESTINATION ${PROJECT_BINARY_DIR}/examples/C/transforms)
diff --git a/examples/C/transforms/Makefile.am b/examples/C/transforms/Makefile.am
index c6bf52d..85951fc 100644
--- a/examples/C/transforms/Makefile.am
+++ b/examples/C/transforms/Makefile.am
@@ -1,24 +1,18 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public $(TIMER_CPPFLAGS)
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -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
+noinst_PROGRAMS = adios_global adios_read_subv adios_read_points adios_read_wb_subpg
 
 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)
@@ -34,11 +28,6 @@ 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
+EXTRA_DIST = adios_global.xml gread_temperature.ch gwrite_temperature.ch
diff --git a/examples/C/transforms/Makefile.in b/examples/C/transforms/Makefile.in
index f3bad0c..aad0c9c 100644
--- a/examples/C/transforms/Makefile.in
+++ b/examples/C/transforms/Makefile.in
@@ -35,8 +35,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 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)
+	adios_read_points$(EXEEXT) adios_read_wb_subpg$(EXEEXT)
 subdir = examples/C/transforms
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -51,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -67,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -87,13 +92,6 @@ adios_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 adios_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(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)
-adios_read_all_3D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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 \
@@ -115,13 +113,6 @@ adios_read_wb_subpg_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 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 =
@@ -134,12 +125,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-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)
+SOURCES = $(adios_global_SOURCES) $(adios_read_points_SOURCES) \
+	$(adios_read_subv_SOURCES) $(adios_read_wb_subpg_SOURCES)
+DIST_SOURCES = $(adios_global_SOURCES) $(adios_read_points_SOURCES) \
+	$(adios_read_subv_SOURCES) $(adios_read_wb_subpg_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -165,6 +154,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -222,6 +213,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -321,11 +315,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -391,16 +387,12 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public $(TIMER_CPPFLAGS)
 AUTOMAKE_OPTIONS = no-dependencies
 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)
-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)
@@ -413,12 +405,8 @@ 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 = adios_global.xml gread_temperature.ch gwrite_temperature.ch S3D
+EXTRA_DIST = adios_global.xml gread_temperature.ch gwrite_temperature.ch
 all: all-am
 
 .SUFFIXES:
@@ -465,9 +453,6 @@ clean-noinstPROGRAMS:
 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)
@@ -477,9 +462,6 @@ adios_read_subv$(EXEEXT): $(adios_read_subv_OBJECTS) $(adios_read_subv_DEPENDENC
 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)
@@ -702,7 +684,6 @@ 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
deleted file mode 100644
index 3f12e1c..0000000
--- a/examples/C/transforms/S3D/alacrity.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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
deleted file mode 100644
index b113ab8..0000000
--- a/examples/C/transforms/S3D/identity.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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
deleted file mode 100644
index a33bf12..0000000
--- a/examples/C/transforms/S3D/none.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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_read_all_3D.c b/examples/C/transforms/adios_read_all_3D.c
deleted file mode 100644
index 90b3a58..0000000
--- a/examples/C/transforms/adios_read_all_3D.c
+++ /dev/null
@@ -1,260 +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: read global arrays from a BP file
- *
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <time.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 ("%u dimensions for %s are %s: ", ndim, filename, varname);
-    for (i = 0; i < varinfo->ndim; i ++) {
-        printf ("%lld ", 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: %lld\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 ("%llu ", starts [j]);
-            }
-            printf ("\n");
-
-            printf ("Counts: ");
-            starts [0] = 0;
-            for (j = 0; j < ndim; j ++) {
-                printf ("%llu ", 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_write_all_3D.c b/examples/C/transforms/adios_write_all_3D.c
deleted file mode 100644
index 605ec02..0000000
--- a/examples/C/transforms/adios_write_all_3D.c
+++ /dev/null
@@ -1,198 +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 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 <sys/types.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];
-
-    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/Fortran/CMakeLists.txt b/examples/Fortran/CMakeLists.txt
index 5a00178..acb1ae8 100644
--- a/examples/Fortran/CMakeLists.txt
+++ b/examples/Fortran/CMakeLists.txt
@@ -2,4 +2,4 @@ add_subdirectory(scalars)
 add_subdirectory(arrays)
 add_subdirectory(global-array)
 add_subdirectory(global-array-time)
-
+add_subdirectory(schema)
diff --git a/examples/Fortran/Makefile.am b/examples/Fortran/Makefile.am
index 6e2cfd3..fba2b41 100644
--- a/examples/Fortran/Makefile.am
+++ b/examples/Fortran/Makefile.am
@@ -1,2 +1,2 @@
-SUBDIRS=scalars arrays global-array global-array-time 
+SUBDIRS=scalars arrays global-array global-array-time schema 
 #time-index
diff --git a/examples/Fortran/Makefile.in b/examples/Fortran/Makefile.in
index 65b736d..26a22d6 100644
--- a/examples/Fortran/Makefile.in
+++ b/examples/Fortran/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -365,7 +378,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = scalars arrays global-array global-array-time 
+SUBDIRS = scalars arrays global-array global-array-time schema 
 all: all-recursive
 
 .SUFFIXES:
diff --git a/examples/Fortran/arrays/Makefile.am b/examples/Fortran/arrays/Makefile.am
index 56d9b87..3688588 100644
--- a/examples/Fortran/arrays/Makefile.am
+++ b/examples/Fortran/arrays/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/Fortran/arrays/Makefile.in b/examples/Fortran/arrays/Makefile.in
index 0c0497d..a41660e 100644
--- a/examples/Fortran/arrays/Makefile.in
+++ b/examples/Fortran/arrays/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -128,6 +134,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -185,6 +193,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -284,11 +295,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -354,7 +367,7 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.F90
 arrays_write_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
diff --git a/examples/Fortran/arrays/arrays_read.F90 b/examples/Fortran/arrays/arrays_read.F90
index 827885e..5522a07 100644
--- a/examples/Fortran/arrays/arrays_read.F90
+++ b/examples/Fortran/arrays/arrays_read.F90
@@ -46,8 +46,8 @@ program arrays
     ! First get the scalars to calculate the size of the arrays.
     ! Note that we cannot use adios_get_scalar here because that
     !   retrieves the same NX for everyone (from writer rank 0).
-    call adios_schedule_read (f, sel, "NX", 1, 1, NX, ierr)
-    call adios_schedule_read (f, sel, "NY", 1, 1, NY, ierr)
+    call adios_schedule_read (f, sel, "NX", 0, 1, NX, ierr)
+    call adios_schedule_read (f, sel, "NY", 0, 1, NY, ierr)
     call adios_perform_reads (f, ierr)
     write (*,'("rank=",i0," NX=",i0," NY=",i0)') rank, NX, NY
 
@@ -56,8 +56,8 @@ program arrays
     allocate (p(NX))
 
     ! Read the arrays
-    call adios_schedule_read (f, sel, "var_double_2Darray", 1, 1, t, ierr)
-    call adios_schedule_read (f, sel, "var_int_1Darray", 1, 1, p, ierr)
+    call adios_schedule_read (f, sel, "var_double_2Darray", 0, 1, t, ierr)
+    call adios_schedule_read (f, sel, "var_int_1Darray", 0, 1, p, ierr)
     call adios_perform_reads (f, ierr)
 
 
diff --git a/examples/Fortran/global-array-time/Makefile.am b/examples/Fortran/global-array-time/Makefile.am
index c6e8470..929a4ac 100644
--- a/examples/Fortran/global-array-time/Makefile.am
+++ b/examples/Fortran/global-array-time/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/Fortran/global-array-time/Makefile.in b/examples/Fortran/global-array-time/Makefile.in
index 84ff018..375defb 100644
--- a/examples/Fortran/global-array-time/Makefile.in
+++ b/examples/Fortran/global-array-time/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -121,6 +127,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -178,6 +186,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -277,11 +288,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -347,7 +360,7 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 adios_globaltime_SOURCES = adios_globaltime.F90
 adios_globaltime_LDADD = $(top_builddir)/src/libadiosf.a \
diff --git a/examples/Fortran/global-array/Makefile.am b/examples/Fortran/global-array/Makefile.am
index eca4851..cb350ed 100644
--- a/examples/Fortran/global-array/Makefile.am
+++ b/examples/Fortran/global-array/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/Fortran/global-array/Makefile.in b/examples/Fortran/global-array/Makefile.in
index 501381f..a0ef697 100644
--- a/examples/Fortran/global-array/Makefile.in
+++ b/examples/Fortran/global-array/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -138,6 +144,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -195,6 +203,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -294,11 +305,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -364,7 +377,7 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 adios_global_SOURCES = adios_global.F90
 adios_global_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
diff --git a/examples/Fortran/scalars/Makefile.am b/examples/Fortran/scalars/Makefile.am
index 025167f..67e1eda 100644
--- a/examples/Fortran/scalars/Makefile.am
+++ b/examples/Fortran/scalars/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/Fortran/scalars/Makefile.in b/examples/Fortran/scalars/Makefile.in
index e0767f6..5520f84 100644
--- a/examples/Fortran/scalars/Makefile.in
+++ b/examples/Fortran/scalars/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -128,6 +134,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -185,6 +193,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -284,11 +295,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -354,7 +367,7 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 scalars_write_SOURCES = scalars_write.F90
 scalars_write_LDADD = $(top_builddir)/src/libadiosf.a \
diff --git a/examples/Fortran/scalars/scalars_read.F90 b/examples/Fortran/scalars/scalars_read.F90
index c8c310d..33647d1 100644
--- a/examples/Fortran/scalars/scalars_read.F90
+++ b/examples/Fortran/scalars/scalars_read.F90
@@ -60,15 +60,15 @@ program scalars_read
     ! the above variables contain the value at this point
 
     ! option 2 for scalars: read them from file
-    call adios_schedule_read (f, sel, "var_ubyte", 1, 1, v5, ierr)
-    call adios_schedule_read (f, sel, "var_ushort", 1, 1, v6, ierr)
-    call adios_schedule_read (f, sel, "var_uint", 1, 1, v7, ierr)
-    call adios_schedule_read (f, sel, "var_ulong", 1, 1, v8, ierr)
-    call adios_schedule_read (f, sel, "var_real", 1, 1, v9, ierr)
-    call adios_schedule_read (f, sel, "var_double", 1, 1, v10, ierr)
-    call adios_schedule_read (f, sel, "var_string", 1, 1, v11, ierr)
-    call adios_schedule_read (f, sel, "var_complex", 1, 1, v12, ierr)
-    call adios_schedule_read (f, sel, "var_double_complex", 1, 1, v13, ierr)
+    call adios_schedule_read (f, sel, "var_ubyte", 0, 1, v5, ierr)
+    call adios_schedule_read (f, sel, "var_ushort", 0, 1, v6, ierr)
+    call adios_schedule_read (f, sel, "var_uint", 0, 1, v7, ierr)
+    call adios_schedule_read (f, sel, "var_ulong", 0, 1, v8, ierr)
+    call adios_schedule_read (f, sel, "var_real", 0, 1, v9, ierr)
+    call adios_schedule_read (f, sel, "var_double", 0, 1, v10, ierr)
+    call adios_schedule_read (f, sel, "var_string", 0, 1, v11, ierr)
+    call adios_schedule_read (f, sel, "var_complex", 0, 1, v12, ierr)
+    call adios_schedule_read (f, sel, "var_double_complex", 0, 1, v13, ierr)
     ! no read has been performed yet!
     call adios_perform_reads (f, ierr)
     ! the above variables contain the value only at this point
diff --git a/examples/Fortran/schema/CMakeLists.txt b/examples/Fortran/schema/CMakeLists.txt
new file mode 100644
index 0000000..d4d8d48
--- /dev/null
+++ b/examples/Fortran/schema/CMakeLists.txt
@@ -0,0 +1,13 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_BINARY_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/examples/Fortran/schema)
+link_directories(${PROJECT_BINARY_DIR}/examples/Fortran/schema)
+
+add_executable(tri2d_f_noxml tri2d_noxml.F90)
+target_link_libraries(tri2d_f_noxml adiosf ${ADIOSLIB_LDADD})
+
+add_executable(tri2d_f_noxml_seperate tri2d_noxml_seperate.F90)
+target_link_libraries(tri2d_f_noxml_seperate adiosf ${ADIOSLIB_LDADD})
+
+#install(FILES scalars.xml gwrite_scalars.fh gread_scalars.fh job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/Fortran/scalars)
diff --git a/examples/Fortran/schema/Makefile.am b/examples/Fortran/schema/Makefile.am
new file mode 100644
index 0000000..099c3df
--- /dev/null
+++ b/examples/Fortran/schema/Makefile.am
@@ -0,0 +1,43 @@
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+#all-local:
+#	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
+noinst_PROGRAMS = uniform2d_f_noxml rectilinear2d_f_noxml structured2d_f_noxml tri2d_f_noxml tri2d_f_noxml_seperate 
+
+uniform2d_f_noxml_SOURCES = uniform2d_noxml.F90
+uniform2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a
+uniform2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+uniform2d_f_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+rectilinear2d_f_noxml_SOURCES = rectilinear2d_noxml.F90
+rectilinear2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a
+rectilinear2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_f_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+structured2d_f_noxml_SOURCES = structured2d_noxml.F90
+structured2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a
+structured2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_f_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+tri2d_f_noxml_SOURCES = tri2d_noxml.F90 
+tri2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a
+tri2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_f_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+tri2d_f_noxml_seperate_SOURCES = tri2d_noxml_seperate.F90
+tri2d_f_noxml_seperate_LDADD = $(top_builddir)/src/libadiosf.a
+tri2d_f_noxml_seperate_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_f_noxml_seperate_LDADD += $(ADIOSLIB_LDADD)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+FC=$(MPIFC)
+
+FCLINK = \
+    $(LIBTOOL) --mode=link --tag F77 $(FC) \
+    $(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
+
diff --git a/examples/Fortran/global-array/Makefile.in b/examples/Fortran/schema/Makefile.in
similarity index 74%
copy from examples/Fortran/global-array/Makefile.in
copy to examples/Fortran/schema/Makefile.in
index 501381f..1e05a74 100644
--- a/examples/Fortran/global-array/Makefile.in
+++ b/examples/Fortran/schema/Makefile.in
@@ -34,9 +34,10 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = adios_global$(EXEEXT) adios_global_no_xml$(EXEEXT) \
-	no_xml_write_byid$(EXEEXT)
-subdir = examples/Fortran/global-array
+noinst_PROGRAMS = uniform2d_f_noxml$(EXEEXT) \
+	rectilinear2d_f_noxml$(EXEEXT) structured2d_f_noxml$(EXEEXT) \
+	tri2d_f_noxml$(EXEEXT) tri2d_f_noxml_seperate$(EXEEXT)
+subdir = examples/Fortran/schema
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -50,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +68,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -78,28 +85,42 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_adios_global_OBJECTS = adios_global.$(OBJEXT)
-adios_global_OBJECTS = $(am_adios_global_OBJECTS)
+am_rectilinear2d_f_noxml_OBJECTS = rectilinear2d_noxml.$(OBJEXT)
+rectilinear2d_f_noxml_OBJECTS = $(am_rectilinear2d_f_noxml_OBJECTS)
 am__DEPENDENCIES_1 =
-adios_global_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
+rectilinear2d_f_noxml_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
 	$(am__DEPENDENCIES_1)
-adios_global_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+rectilinear2d_f_noxml_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
-	$(adios_global_LDFLAGS) $(LDFLAGS) -o $@
-am_adios_global_no_xml_OBJECTS = adios_global_no_xml.$(OBJEXT)
-adios_global_no_xml_OBJECTS = $(am_adios_global_no_xml_OBJECTS)
-adios_global_no_xml_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
+	$(rectilinear2d_f_noxml_LDFLAGS) $(LDFLAGS) -o $@
+am_structured2d_f_noxml_OBJECTS = structured2d_noxml.$(OBJEXT)
+structured2d_f_noxml_OBJECTS = $(am_structured2d_f_noxml_OBJECTS)
+structured2d_f_noxml_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
 	$(am__DEPENDENCIES_1)
-adios_global_no_xml_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+structured2d_f_noxml_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
-	$(adios_global_no_xml_LDFLAGS) $(LDFLAGS) -o $@
-am_no_xml_write_byid_OBJECTS = no_xml_write_byid.$(OBJEXT)
-no_xml_write_byid_OBJECTS = $(am_no_xml_write_byid_OBJECTS)
-no_xml_write_byid_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
+	$(structured2d_f_noxml_LDFLAGS) $(LDFLAGS) -o $@
+am_tri2d_f_noxml_OBJECTS = tri2d_noxml.$(OBJEXT)
+tri2d_f_noxml_OBJECTS = $(am_tri2d_f_noxml_OBJECTS)
+tri2d_f_noxml_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
 	$(am__DEPENDENCIES_1)
-no_xml_write_byid_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+tri2d_f_noxml_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
-	$(no_xml_write_byid_LDFLAGS) $(LDFLAGS) -o $@
+	$(tri2d_f_noxml_LDFLAGS) $(LDFLAGS) -o $@
+am_tri2d_f_noxml_seperate_OBJECTS = tri2d_noxml_seperate.$(OBJEXT)
+tri2d_f_noxml_seperate_OBJECTS = $(am_tri2d_f_noxml_seperate_OBJECTS)
+tri2d_f_noxml_seperate_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
+	$(am__DEPENDENCIES_1)
+tri2d_f_noxml_seperate_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(tri2d_f_noxml_seperate_LDFLAGS) $(LDFLAGS) -o $@
+am_uniform2d_f_noxml_OBJECTS = uniform2d_noxml.$(OBJEXT)
+uniform2d_f_noxml_OBJECTS = $(am_uniform2d_f_noxml_OBJECTS)
+uniform2d_f_noxml_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
+	$(am__DEPENDENCIES_1)
+uniform2d_f_noxml_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(uniform2d_f_noxml_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -109,10 +130,12 @@ LTPPFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
 FCLD = $(FC)
-SOURCES = $(adios_global_SOURCES) $(adios_global_no_xml_SOURCES) \
-	$(no_xml_write_byid_SOURCES)
-DIST_SOURCES = $(adios_global_SOURCES) $(adios_global_no_xml_SOURCES) \
-	$(no_xml_write_byid_SOURCES)
+SOURCES = $(rectilinear2d_f_noxml_SOURCES) \
+	$(structured2d_f_noxml_SOURCES) $(tri2d_f_noxml_SOURCES) \
+	$(tri2d_f_noxml_seperate_SOURCES) $(uniform2d_f_noxml_SOURCES)
+DIST_SOURCES = $(rectilinear2d_f_noxml_SOURCES) \
+	$(structured2d_f_noxml_SOURCES) $(tri2d_f_noxml_SOURCES) \
+	$(tri2d_f_noxml_seperate_SOURCES) $(uniform2d_f_noxml_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -138,6 +161,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -195,6 +220,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -294,11 +322,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -364,25 +394,33 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
-adios_global_SOURCES = adios_global.F90
-adios_global_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
-adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-adios_global_no_xml_SOURCES = adios_global_no_xml.F90
-adios_global_no_xml_LDADD = $(top_builddir)/src/libadiosf.a \
+uniform2d_f_noxml_SOURCES = uniform2d_noxml.F90
+uniform2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a \
 	$(ADIOSLIB_LDADD)
-adios_global_no_xml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-no_xml_write_byid_SOURCES = no_xml_write_byid.F90
-no_xml_write_byid_LDADD = $(top_builddir)/src/libadiosf.a \
+uniform2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_f_noxml_SOURCES = rectilinear2d_noxml.F90
+rectilinear2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a \
 	$(ADIOSLIB_LDADD)
-no_xml_write_byid_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_f_noxml_SOURCES = structured2d_noxml.F90
+structured2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a \
+	$(ADIOSLIB_LDADD)
+structured2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_f_noxml_SOURCES = tri2d_noxml.F90 
+tri2d_f_noxml_LDADD = $(top_builddir)/src/libadiosf.a \
+	$(ADIOSLIB_LDADD)
+tri2d_f_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_f_noxml_seperate_SOURCES = tri2d_noxml_seperate.F90
+tri2d_f_noxml_seperate_LDADD = $(top_builddir)/src/libadiosf.a \
+	$(ADIOSLIB_LDADD)
+tri2d_f_noxml_seperate_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
 FCLINK = \
-	$(LIBTOOL) --mode=link --tag F77 $(FC) \
-	$(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
+    $(LIBTOOL) --mode=link --tag F77 $(FC) \
+    $(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
 
-EXTRA_DIST = adios_global.xml gread_temperature.fh gwrite_temperature.fh job.pbs
 all: all-am
 
 .SUFFIXES:
@@ -396,9 +434,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Fortran/global-array/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Fortran/schema/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/Fortran/global-array/Makefile
+	  $(AUTOMAKE) --gnu examples/Fortran/schema/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -426,15 +464,21 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-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_global_no_xml$(EXEEXT): $(adios_global_no_xml_OBJECTS) $(adios_global_no_xml_DEPENDENCIES) 
-	@rm -f adios_global_no_xml$(EXEEXT)
-	$(adios_global_no_xml_LINK) $(adios_global_no_xml_OBJECTS) $(adios_global_no_xml_LDADD) $(LIBS)
-no_xml_write_byid$(EXEEXT): $(no_xml_write_byid_OBJECTS) $(no_xml_write_byid_DEPENDENCIES) 
-	@rm -f no_xml_write_byid$(EXEEXT)
-	$(no_xml_write_byid_LINK) $(no_xml_write_byid_OBJECTS) $(no_xml_write_byid_LDADD) $(LIBS)
+rectilinear2d_f_noxml$(EXEEXT): $(rectilinear2d_f_noxml_OBJECTS) $(rectilinear2d_f_noxml_DEPENDENCIES) 
+	@rm -f rectilinear2d_f_noxml$(EXEEXT)
+	$(rectilinear2d_f_noxml_LINK) $(rectilinear2d_f_noxml_OBJECTS) $(rectilinear2d_f_noxml_LDADD) $(LIBS)
+structured2d_f_noxml$(EXEEXT): $(structured2d_f_noxml_OBJECTS) $(structured2d_f_noxml_DEPENDENCIES) 
+	@rm -f structured2d_f_noxml$(EXEEXT)
+	$(structured2d_f_noxml_LINK) $(structured2d_f_noxml_OBJECTS) $(structured2d_f_noxml_LDADD) $(LIBS)
+tri2d_f_noxml$(EXEEXT): $(tri2d_f_noxml_OBJECTS) $(tri2d_f_noxml_DEPENDENCIES) 
+	@rm -f tri2d_f_noxml$(EXEEXT)
+	$(tri2d_f_noxml_LINK) $(tri2d_f_noxml_OBJECTS) $(tri2d_f_noxml_LDADD) $(LIBS)
+tri2d_f_noxml_seperate$(EXEEXT): $(tri2d_f_noxml_seperate_OBJECTS) $(tri2d_f_noxml_seperate_DEPENDENCIES) 
+	@rm -f tri2d_f_noxml_seperate$(EXEEXT)
+	$(tri2d_f_noxml_seperate_LINK) $(tri2d_f_noxml_seperate_OBJECTS) $(tri2d_f_noxml_seperate_LDADD) $(LIBS)
+uniform2d_f_noxml$(EXEEXT): $(uniform2d_f_noxml_OBJECTS) $(uniform2d_f_noxml_DEPENDENCIES) 
+	@rm -f uniform2d_f_noxml$(EXEEXT)
+	$(uniform2d_f_noxml_LINK) $(uniform2d_f_noxml_OBJECTS) $(uniform2d_f_noxml_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -541,7 +585,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS) all-local
+all-am: Makefile $(PROGRAMS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -640,23 +684,19 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.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)
+.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
+
 
 # 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/schema/rectilinear2d_noxml.F90 b/examples/Fortran/schema/rectilinear2d_noxml.F90
new file mode 100644
index 0000000..0edd1bd
--- /dev/null
+++ b/examples/Fortran/schema/rectilinear2d_noxml.F90
@@ -0,0 +1,197 @@
+! 
+ ! 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. 
+
+subroutine printUsage (prgname)
+    implicit none
+    character(*),   intent(in)  :: prgname
+    print *, "Usage: mpirun -np <N> ", prgname, "<nx> <ny>"
+    print *, "    <nx> <ny>  2D decomposition values in each dimension of an 2D array"
+    print *, "         The product of these number must be equal the number of processes"
+    print *, "         e.g. for N=12 you may use  4 3"
+end subroutine
+
+subroutine processArgs
+!    integer,        intent(out)  :: nproc, npx, npy
+    integer                      :: nn
+    character(len=32)            :: arg
+    COMMON nproc, npx, npy, arg_err
+
+    nn = command_argument_count()
+!    write (*,*) 'number of command arguments = ', nn
+!    write (*,*) 'number of processor = ', nproc
+    if (nn /= 2) then
+        call getarg(0, arg)
+        call printUsage (arg)
+        arg_err = 1
+     else
+        call getarg(1, arg)  ! write (arg, '(i10)') nproc    
+        read (arg, *) npx
+!        write (*,*) 'number of x processor = ', npx
+        call getarg(2, arg)
+        read (arg, *) npy
+!        write (*,*) 'number of y processor = ', npy
+     endif
+
+     if (npx*npy /= nproc) then
+        arg_err = 1
+        print *, "ERROR: Product of decomposition numbers in X and Y dimension ", npx*npx
+        print *, " != number of processes ", nproc
+     endif
+end subroutine
+
+program rectilinear2d_f_noxml
+    use adios_write_mod
+    implicit none
+    include 'mpif.h'
+    character(len=256)      :: filename = "rectilinear2d_f_noxml.bp"
+    integer*8               :: adios_groupsize, adios_totalsize
+    integer*8               :: adios_handle
+    integer*8               :: m_adios_group
+    integer*8               :: varid
+    integer*4               :: comm
+    real*8, dimension(:), allocatable       :: X   ! X coordinate
+    real*8, dimension(:), allocatable       :: Y   ! Y coordinate 
+    real*8, dimension(:), allocatable       :: data
+    character(:), allocatable               :: schema_version, dimemsions 
+
+    integer*4               :: offs_x, offs_y                      ! offset in x and y direction
+    integer*4               :: nx_local, ny_local                  ! local address
+    integer*4               :: posx, posy                          ! position index in the array
+    integer*4               :: nx_global, ny_global                ! global address
+    integer*4               :: rank, i, j, k, p, p1, ierr, adios_err
+    integer*4               :: ndx, ndy                            ! size of array per processor
+ 
+    !will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    integer*4               :: npx                                 ! # of procs in x direction
+    integer*4               :: npy                                 ! # of procs in y direction
+    integer*4               :: nproc                               ! # of total procs
+    integer*4               :: arg_err
+
+    COMMON nproc, npx, npy, arg_err
+
+    call MPI_Init (ierr)
+    call MPI_Comm_dup (MPI_COMM_WORLD, comm, ierr)
+    call MPI_Comm_rank (comm, rank, ierr)
+    call MPI_Comm_size (comm, nproc, ierr)
+
+    arg_err = 0
+    call processArgs
+
+    if (arg_err .EQ. 1) then
+        stop
+    endif
+
+    !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 = mod(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
+
+    allocate (data(0:(ndx-1)*(ndy-1)*8))
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            data(i*ndy+j) = 1.0*DBLE(rank)
+        enddo
+    enddo
+
+    allocate (X(0:(ndx-1)*8))
+    do i = 0, ndx-1
+        X(i) = 0.1*(i+offs_x)*(i+offs_x)
+    enddo
+
+    allocate (Y(0:(ndy-1)*8))
+    do i = 0, ndy-1
+        Y(i) = 0.1*(i+offs_y)*(i+offs_y)
+    enddo
+
+    schema_version = "1.1"
+    dimemsions = "nx_global,ny_global"
+
+    call adios_init_noxml (comm, adios_err)
+    call adios_allocate_buffer (50, adios_err)
+    call adios_declare_group (m_adios_group, "rectilinear2d", "", 1, adios_err)
+    call adios_select_method (m_adios_group, "MPI", "", "", adios_err)
+
+    ! This example doesn't use varid during writing.
+    ! So we simply put 'varid' everywhere.
+    ! define a integer
+    call adios_define_var (m_adios_group, "nx_global" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "ny_global" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "nproc" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "offs_x" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "offs_y" &
+                ,"", adios_integer &
+                ,"","" ,"" , varid)
+    call adios_define_var (m_adios_group, "nx_local" &
+                ,"", adios_integer &
+                ,"","" , "", varid)
+    call adios_define_var (m_adios_group, "ny_local" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "X" &
+                    ,"", adios_double &
+                    ,"nx_local", "nx_global", "offs_x", varid)
+    call adios_define_var (m_adios_group, "Y" &
+                    ,"", adios_double &
+                    ,"ny_local", "ny_global", "offs_y", varid)
+    call adios_define_var (m_adios_group, "data" &
+                    ,"", adios_double &
+                    ,"ny_local,nx_local", "ny_global,nx_global", "offs_y,offs_x", varid)
+
+    call adios_define_schema_version (m_adios_group, schema_version)
+    call adios_define_mesh_rectilinear (dimemsions, "X,Y", "2", m_adios_group, "rectilinearmesh")
+    call adios_define_mesh_timevarying ("no", m_adios_group, "rectilinearmesh")
+    call adios_define_var_mesh (m_adios_group, "data", "rectilinearmesh")
+    call adios_define_var_centering (m_adios_group, "data", "point")
+
+    adios_groupsize = 7*4 & !int
+    + 8 * (nx_local*ny_local) &! double (data)
+    + 8 * nx_local & ! double (X)
+    + 8 * ny_local   ! double (Y)
+
+    call adios_open (adios_handle, "rectilinear2d", filename, "w", comm, adios_err)
+    call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+
+    call adios_write (adios_handle, "nx_global", nx_global, adios_err)
+    call adios_write (adios_handle, "ny_global", ny_global, adios_err)
+    call adios_write (adios_handle, "nproc", nproc, adios_err)
+    call adios_write (adios_handle, "offs_x", offs_x, adios_err)
+    call adios_write (adios_handle, "offs_y", offs_y, adios_err)
+    call adios_write (adios_handle, "nx_local", nx_local, adios_err)
+    call adios_write (adios_handle, "ny_local", ny_local, adios_err)
+    if (rank .LT. npx) then
+        call adios_write (adios_handle, "X", X, adios_err)
+    endif
+    if (mod(rank,npx) .EQ. 0) then
+        call adios_write (adios_handle, "Y", Y, adios_err)
+    endif
+    call adios_write (adios_handle, "data", data, adios_err)
+
+    call adios_close (adios_handle, adios_err)
+    call MPI_Barrier (comm, ierr)
+    call adios_finalize (rank, adios_err)
+    call MPI_Finalize (ierr)
+
+end program
diff --git a/examples/Fortran/schema/structured2d_noxml.F90 b/examples/Fortran/schema/structured2d_noxml.F90
new file mode 100644
index 0000000..6329520
--- /dev/null
+++ b/examples/Fortran/schema/structured2d_noxml.F90
@@ -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 variables along with an unstructured mesh. 
+
+subroutine printUsage (prgname)
+    implicit none
+    character(*),   intent(in)  :: prgname
+    print *, "Usage: mpirun -np <N> ", prgname, "<nx> <ny>"
+    print *, "    <nx> <ny>  2D decomposition values in each dimension of an 2D array"
+    print *, "         The product of these number must be equal the number of processes"
+    print *, "         e.g. for N=12 you may use  4 3"
+end subroutine
+
+subroutine processArgs
+!    integer,        intent(out)  :: nproc, npx, npy
+    integer                      :: nn
+    character(len=32)            :: arg
+    COMMON nproc, npx, npy, arg_err
+
+    nn = command_argument_count()
+!    write (*,*) 'number of command arguments = ', nn
+!    write (*,*) 'number of processor = ', nproc
+    if (nn /= 2) then
+        call getarg(0, arg)
+        call printUsage (arg)
+        arg_err = 1
+     else
+        call getarg(1, arg)  ! write (arg, '(i10)') nproc    
+        read (arg, *) npx
+!        write (*,*) 'number of x processor = ', npx
+        call getarg(2, arg)
+        read (arg, *) npy
+!        write (*,*) 'number of y processor = ', npy
+     endif
+
+     if (npx*npy /= nproc) then
+        arg_err = 1
+        print *, "ERROR: Product of decomposition numbers in X and Y dimension ", npx*npx
+        print *, " != number of processes ", nproc
+     endif
+end subroutine
+
+program structured2d_f_noxml
+    use adios_write_mod
+    implicit none
+    include 'mpif.h'
+    character(len=256)      :: filename = "structured2d_f_noxml.bp"
+    integer*8               :: adios_groupsize, adios_totalsize
+    integer*8               :: adios_handle
+    integer*8               :: m_adios_group
+    integer*8               :: varid
+    integer*4               :: comm
+    real*8, dimension(:), allocatable       :: X   ! X coordinate
+    real*8, dimension(:), allocatable       :: Y   ! Y coordinate 
+    real*8, dimension(:), allocatable       :: data
+    character(:), allocatable               :: schema_version, dimemsions
+
+    integer*4               :: rank, i, j, ierr, adios_err
+    integer*4               :: ndx, ndy                            ! size of array per processor
+    integer*4               :: offs_x, offs_y                      ! offset in x and y direction
+    integer*4               :: nx_local, ny_local                  ! local address
+    integer*4               :: posx, posy                          ! position index in the array
+    integer*4               :: nx_global, ny_global                ! global address
+
+    !will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    integer*4               :: npx                                 ! # of procs in x direction
+    integer*4               :: npy                                 ! # of procs in y direction
+    integer*4               :: nproc                               ! # of total procs
+    integer*4               :: arg_err
+
+    COMMON nproc, npx, npy, arg_err
+
+    call MPI_Init (ierr)
+    call MPI_Comm_dup (MPI_COMM_WORLD, comm, ierr)
+    call MPI_Comm_rank (comm, rank, ierr)
+    call MPI_Comm_size (comm, nproc, ierr)
+
+    arg_err = 0
+    call processArgs
+
+    if (arg_err .EQ. 1) then
+        stop
+    endif
+
+    ! will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    ndx = 65
+    ndy = 129
+
+    !2D array with block,block decomposition
+    posx = mod(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
+
+    schema_version = "1.1"
+    dimemsions = "nx_global,ny_global"
+
+    allocate (data(0:(ndx-1)*(ndy-1)*8))
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            data(i*ndy+j) = 1.0*DBLE(rank)
+        enddo
+    enddo
+
+    allocate (X(0:(ndx-1)*(ndy-1)*8))
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            X(i*ndy+j) = offs_x + posy*ndx + i*ndx/ndx + DBLE(ndx)*j/DBLE(ndy)
+        enddo
+    enddo
+
+    allocate (Y(0:(ndx-1)*(ndy-1)*8))
+    Y(0) = offs_y
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            Y(i*ndy+j) = offs_y + ndy*j/ndy 
+        enddo
+    enddo
+
+    call adios_init_noxml (comm, adios_err)
+    call adios_allocate_buffer (50, adios_err)
+    call adios_declare_group (m_adios_group, "structured2d", "", 1, adios_err)
+    call adios_select_method (m_adios_group, "MPI", "", "", adios_err)
+
+    ! This example doesn't use varid during writing.
+    ! So we simply put 'varid' everywhere.
+    ! define a integer
+    call adios_define_var (m_adios_group, "nx_global" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "ny_global" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "nproc" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "offs_x" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "offs_y" &
+                ,"", adios_integer &
+                ,"","" ,"" , varid)
+    call adios_define_var (m_adios_group, "nx_local" &
+                ,"", adios_integer &
+                ,"","" , "", varid)
+    call adios_define_var (m_adios_group, "ny_local" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "X" &
+                    ,"", adios_double &
+                    ,"ny_local,nx_local", "ny_global,nx_global", "offs_y,offs_x", varid)
+    call adios_define_var (m_adios_group, "Y" &
+                    ,"", adios_double &
+                    ,"ny_local,nx_local", "ny_global,nx_global", "offs_y,offs_x", varid)
+    call adios_define_var (m_adios_group, "data" &
+                    ,"", adios_double &
+                    ,"ny_local,nx_local", "ny_global,nx_global", "offs_y,offs_x", varid)
+
+    call adios_define_schema_version (m_adios_group, schema_version)
+    call adios_define_mesh_structured (dimemsions, "X,Y", "2", m_adios_group, "structuredmesh")
+    call adios_define_mesh_timevarying ("no", m_adios_group, "structuredmesh")
+    call adios_define_var_mesh (m_adios_group, "data", "structuredmesh")
+    call adios_define_var_centering (m_adios_group, "data", "point")
+
+    adios_groupsize = 7*4 & !int
+    + 3 * 8 * (nx_local*ny_local) ! double (data)
+
+    call adios_open (adios_handle, "structured2d", filename, "w", comm, adios_err)
+    call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+
+    call adios_write (adios_handle, "nx_global", nx_global, adios_err)
+    call adios_write (adios_handle, "ny_global", ny_global, adios_err)
+    call adios_write (adios_handle, "nproc", nproc, adios_err)
+    call adios_write (adios_handle, "offs_x", offs_x, adios_err)
+    call adios_write (adios_handle, "offs_y", offs_y, adios_err)
+    call adios_write (adios_handle, "nx_local", nx_local, adios_err)
+    call adios_write (adios_handle, "ny_local", ny_local, adios_err)
+
+    call adios_write (adios_handle, "X", X, adios_err)
+    call adios_write (adios_handle, "Y", Y, adios_err)
+    call adios_write (adios_handle, "data", data, adios_err)
+
+    call adios_close (adios_handle, adios_err)
+    call MPI_Barrier (comm, ierr)
+    call adios_finalize (rank, adios_err)
+    call MPI_Finalize (ierr)
+
+end program
+
diff --git a/examples/Fortran/schema/tri2d_noxml.F90 b/examples/Fortran/schema/tri2d_noxml.F90
new file mode 100644
index 0000000..45725e4
--- /dev/null
+++ b/examples/Fortran/schema/tri2d_noxml.F90
@@ -0,0 +1,340 @@
+! 
+ ! 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. 
+ 
+subroutine printUsage (prgname)
+    implicit none
+    character(*),   intent(in)  :: prgname
+    print *, "Usage: mpirun -np <N> ", prgname, "<nx> <ny>"
+    print *, "    <nx> <ny>  2D decomposition values in each dimension of an 2D array"
+    print *, "         The product of these number must be equal the number of processes"
+    print *, "         e.g. for N=12 you may use  4 3"
+end subroutine
+
+subroutine processArgs
+!    integer,        intent(out)  :: nproc, npx, npy
+    integer                      :: nn
+    character(len=32)            :: arg
+    COMMON nproc, npx, npy, arg_err
+
+    nn = command_argument_count()
+!    write (*,*) 'number of command arguments = ', nn
+!    write (*,*) 'number of processor = ', nproc
+    if (nn /= 2) then
+        call getarg(0, arg)
+        call printUsage (arg)
+        arg_err = 1
+     else
+        call getarg(1, arg)  ! write (arg, '(i10)') nproc    
+        read (arg, *) npx
+!        write (*,*) 'number of x processor = ', npx
+        call getarg(2, arg)
+        read (arg, *) npy
+!        write (*,*) 'number of y processor = ', npy
+     endif
+
+     if (npx*npy /= nproc) then
+        arg_err = 1
+        print *, "ERROR: Product of decomposition numbers in X and Y dimension ", npx*npx
+        print *, " != number of processes ", nproc
+     endif
+end subroutine
+
+program tri2d_f_noxml
+    use adios_write_mod
+    implicit none
+    include 'mpif.h'
+    character(len=256)      :: filename = "tri2d_f_noxml.bp"
+    integer*8               :: adios_groupsize, adios_totalsize
+    integer*8               :: adios_handle
+    integer*8               :: m_adios_group
+    integer*8               :: varid
+    integer*4               :: comm
+
+    integer*4               :: rank, i, j, k, p, p1, ierr, adios_err
+    integer*4               :: npoints, num_cells
+    integer*4               :: ndx, ndy                            ! size of array per processor
+    real*8, dimension(:), allocatable       :: N                                   ! node centered variable
+    real*8, dimension(:), allocatable       :: C                                   ! cell centered variable
+    real*8, dimension(:,:), allocatable       :: points                              ! X,Y coordinate
+    integer*4, dimension(:,:), allocatable    :: cells
+    character(:), allocatable            :: schema_version, dimemsions
+
+    integer*4               :: offs_x, offs_y                      ! offset in x and y direction
+    integer*4               :: nx_local, ny_local                  ! local address
+    integer*4               :: posx, posy                          ! position index in the array
+    integer*4               :: nx_global, ny_global                ! global address
+    integer*4               :: lp, op, lc, oc
+    
+    !will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    integer*4               :: npx                                 ! # of procs in x direction
+    integer*4               :: npy                                 ! # of procs in y direction
+    integer*4               :: nproc                               ! # of total procs
+    integer*4               :: arg_err
+
+    COMMON nproc, npx, npy, arg_err
+
+    call MPI_Init (ierr)
+    call MPI_Comm_dup (MPI_COMM_WORLD, comm, ierr)
+    call MPI_Comm_rank (comm, rank, ierr)
+    call MPI_Comm_size (comm, nproc, ierr)
+
+    arg_err = 0
+    call processArgs
+
+    if (arg_err == 1) then
+        stop
+    endif
+
+    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 = mod(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
+    allocate (N(0:ndx*ndy*8-1))            ! 8 is sizeof(double)
+    allocate (points(2,0:ndx*ndy*8-1))   ! 8 is sizeof(double)
+
+    if (posx == npx-1 .AND. posy < npy-1 ) then
+        allocate (C(0:8*(ndx-1)*ndy*2-1))      ! 8 is sizeof(double)
+        allocate (cells(3,0:4*(ndx-1)*ndy*2-1))! 4 is sizeof(int)
+    else if (posy == npy-1 .AND. posx < npx-1 ) then
+        allocate (C(0:8*ndx*(ndy-1)*2-1))
+        allocate (cells(3,0:4*ndx*(ndy-1)*2-1))
+    else if ( posx == npx-1 .AND. posy == npy-1 ) then 
+        allocate (C(0:8*(ndx-1)*(ndy-1)*2-1))
+        allocate (cells(3,0:4*(ndx-1)*(ndy-1)*2-1))
+    else
+        allocate (C(0:8*ndx*ndy*2-1))
+        allocate (cells(3,0:4*ndx*ndy*2-1))
+    endif
+
+! generate local data
+    lp = ndx * ndy                         ! number of points in this local array
+    op = ndx * ndy * rank                  ! offset in global points array
+
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            points(1,(i*ndy + j)) = offs_x + posy*ndx + DBLE(i)*ndx/ndx + DBLE(ndx)*j/ndy
+            points(2,(i*ndy + j)) = offs_y + DBLE(ndy)*j/ndy
+        enddo
+    enddo
+
+    do i = 0, lp-1
+        N(i) = 1.0*DBLE(rank)
+    enddo
+    
+    if( posx == npx-1 .AND. posy < npy-1 ) then 
+        lc = (ndx-1)*ndy*2
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2 
+        !write (*,'("Rank",i0,": case 1: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-2
+            do j = 0, ndy-1
+               p = i*ndy+j 
+               if( i<ndx-1 .AND. j<ndy-1 ) then
+                   cells(:,2*p)   = (/ op+p, op+p+ndy,   op+p+ndy+1  /)
+                   cells(:,2*p+1) = (/ op+p, op+p+ndy+1, op+p+1      /)
+                   !write (*,'("Rank",i0,": 1A cell ",i0,"= [",3i3,"]")'), rank, 2*p, cells(:,2*p)
+                   !write (*,'("Rank",i0,": 1A cell ",i0,"= [",3i3,"]")'), rank, 2*p+1, cells(:,2*p+1)
+                else                     ! extend in Y direction only
+                   cells(:,2*p)   = (/ op+p, op+p+ndy,   op+nx_global*ndy+(i+1)*ndy  /)
+                   cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+(i+1)*ndy, op+nx_global*ndy+i*ndy /)
+                   !write (*,'("Rank",i0,": 1B cell ",i0,"= [",3i3,"]")'), rank, 2*p, cells(:,2*p)
+                   !write (*,'("Rank",i0,": 1B cell ",i0,"= [",3i3,"]")'), rank, 2*p+1, cells(:,2*p+1)
+                endif
+            enddo
+        enddo
+    else if( posy == npy-1 .AND. posx < npx-1 ) then
+        lc = ndx*(ndy-1)*2
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2
+        !write (*,'("Rank",i0,": case 2: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-1
+            do j = 0, ndy-2
+                p = i*(ndy-1)+j
+                p1 = i*ndy+j
+                if( i<ndx-1 .AND. j<ndy-1 ) then
+                   cells(:,2*p)   = (/ op+p1, op+p1+ndy,   op+p1+ndy+1  /)
+                   cells(:,2*p+1) = (/ op+p1, op+p1+ndy+1, op+p1+1      /)
+                else
+                   cells(:,2*p)   = (/ op+p1, op+ndx*ndy+j,   op+ndx*ndy+j+1  /)
+                   cells(:,2*p+1) = (/ op+p1, op+ndx*ndy+j+1, op+p1+1      /)
+                endif
+            enddo
+        enddo
+    else if( posx == npx-1 .AND. posy == npy-1 ) then
+        lc = (ndx-1)*(ndy-1)*2
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2
+        !write (*,'("Rank",i0,": case 3: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-2
+            do j = 0, ndy-2
+                p = i*(ndy-1)+j
+                p1 = i*ndy+j
+                cells(:,2*p)   = (/ op+p1, op+p1+ndy,   op+p1+ndy+1  /)
+                cells(:,2*p+1) = (/ op+p1, op+p1+ndy+1, op+p1+1      /)
+            enddo
+        enddo
+    else
+        lc = ndx*ndy*2
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2
+        !write (*,'("Rank",i0,": case 4: define ",i0," triangles, oc=", i0)'), rank, lc, oc
+        do i = 0, ndx-1
+            do j = 0, ndy-1
+                p = i*ndy+j
+                if( i<ndx-1 .AND. j<ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+p+ndy,   op+p+ndy+1  /)
+                    cells(:,2*p+1) = (/ op+p, op+p+ndy+1, op+p+1      /)
+                else if( i==ndx-1 .AND. j<ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+ndx*ndy+j,   op+ndx*ndy+j+1  /)
+                    cells(:,2*p+1) = (/ op+p, op+ndx*ndy+j+1, op+p+1  /)
+                else if( i<ndx-1 .AND. j==ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+p+ndy,   op+nx_global*ndy+(i+1)*ndy /)
+                    cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+(i+1)*ndy, op+nx_global*ndy+i*ndy /)
+                else 
+                    cells(:,2*p)   = (/ op+p, op+ndx*ndy+j, op+nx_global*ndy+ndx*ndy /)
+                    cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+ndx*ndy, op+nx_global*ndy+i*ndy /)
+                endif
+            enddo
+        enddo
+    endif
+
+    do i = 0, lc-1
+        C(i) = 1.0*DBLE(rank)
+    enddo
+
+    schema_version = "1.1"
+    dimemsions = "nx_global,ny_global"
+
+    call adios_init_noxml (comm, adios_err)
+    call adios_allocate_buffer (10, adios_err)
+    call adios_declare_group (m_adios_group, "tri2d", "", 1, adios_err)
+    call adios_select_method (m_adios_group, "MPI", "", "", adios_err)
+
+    ! This example doesn't use varid during writing.
+    ! So we simply put 'varid' everywhere.
+    ! define a integer
+    call adios_define_var (m_adios_group, "nx_global" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "ny_global" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "nproc" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "npoints" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "num_cells" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "offs_x" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "offs_y" &
+                ,"", adios_integer &
+                ,"","" ,"" , varid)
+    call adios_define_var (m_adios_group, "nx_local" &
+                ,"", adios_integer &
+                ,"","" , "", varid)
+    call adios_define_var (m_adios_group, "ny_local" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "op" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "lp" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "oc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "lc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "points" &
+                    ,"", adios_double &
+                    ,"2,lp", "2,npoints", "0,op", varid)
+    call adios_define_var (m_adios_group, "cells" &
+                    ,"", adios_integer &
+                    ,"3,lc", "3,num_cells", "0,oc", varid)
+    call adios_define_var (m_adios_group, "N" &
+                    ,"", adios_double &
+                    ,"lp", "npoints", "op", varid)
+    call adios_define_var (m_adios_group, "C" &
+                    ,"", adios_double &
+                    ,"lc", "num_cells", "oc", varid)
+
+    call adios_define_attribute (m_adios_group, "description", "/nproc", adios_string, "Number of writers", "", adios_err)
+    call adios_define_attribute (m_adios_group, "description", "/npoints", adios_string, "Number of points", "", adios_err)
+    call adios_define_attribute (m_adios_group, "description", "/num_cells", adios_string, "Number of triangles", "", adios_err)
+
+    call adios_define_schema_version (m_adios_group, schema_version)
+    call adios_define_mesh_timevarying ("no", m_adios_group, "trimesh")
+    call adios_define_mesh_unstructured ("points", "cells", "num_cells", "triangle", "", "2", m_adios_group, "trimesh")
+    !!call adios_define_mesh_file (m_adios_group, "trimesh", "http://adios/xgc.mesh.bp")
+
+    call adios_define_var_mesh (m_adios_group, "N", "trimesh")
+    call adios_define_var_centering (m_adios_group, "N", "point")
+    call adios_define_attribute (m_adios_group, "description", "/N", adios_string, "Node centered data", "", adios_err)
+    call adios_define_var_mesh (m_adios_group, "C", "trimesh")
+    call adios_define_var_centering (m_adios_group, "C", "cell")
+    call adios_define_attribute (m_adios_group, "description", "/C", adios_string, "Cell centered data", "", adios_err)
+
+    call adios_open (adios_handle, "tri2d", filename, "w", comm, adios_err)
+
+    adios_groupsize = 13*4 &   ! int
+    + 8 * lp  &              ! double
+    + 8 * lc  &              ! double
+    + 8 * lp * 2 &           ! double
+    + 4 * lc * 3 
+
+    call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+    
+    call adios_write (adios_handle, "nproc", nproc, adios_err)
+    call adios_write (adios_handle, "npoints", npoints, adios_err)
+    call adios_write (adios_handle, "num_cells", num_cells, adios_err)
+    call adios_write (adios_handle, "nx_global", nx_global, adios_err)
+    call adios_write (adios_handle, "ny_global", ny_global, adios_err)
+    call adios_write (adios_handle, "offs_x", offs_x, adios_err)
+    call adios_write (adios_handle, "offs_y", offs_y, adios_err)
+    call adios_write (adios_handle, "nx_local", nx_local, adios_err)
+    call adios_write (adios_handle, "ny_local", ny_local, adios_err)
+    call adios_write (adios_handle, "lp", lp, adios_err)
+    call adios_write (adios_handle, "op", op, adios_err)
+    call adios_write (adios_handle, "lc", lc, adios_err)
+    call adios_write (adios_handle, "oc", oc, adios_err)
+    call adios_write (adios_handle, "N", N, adios_err)
+    call adios_write (adios_handle, "C", C, adios_err)
+    call adios_write (adios_handle, "points", points, adios_err)
+    call adios_write (adios_handle, "cells", cells, adios_err)
+
+    call adios_close (adios_handle, adios_err)
+
+    call MPI_Barrier (comm, ierr)
+
+!    call free (N)
+!    call free (points)
+!    call free (C)
+!    call free (cells)
+
+    call adios_finalize (rank, adios_err)
+
+    call MPI_Finalize (ierr)
+
+end program 
diff --git a/examples/Fortran/schema/tri2d_noxml_seperate.F90 b/examples/Fortran/schema/tri2d_noxml_seperate.F90
new file mode 100644
index 0000000..354e7c6
--- /dev/null
+++ b/examples/Fortran/schema/tri2d_noxml_seperate.F90
@@ -0,0 +1,399 @@
+! 
+ ! 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. 
+ 
+subroutine printUsage (prgname)
+    implicit none
+    character(*),   intent(in)  :: prgname
+    print *, "Usage: mpirun -np <N> ", prgname, "<nx> <ny>"
+    print *, "    <nx> <ny>  2D decomposition values in each dimension of an 2D array"
+    print *, "         The product of these number must be equal the number of processes"
+    print *, "         e.g. for N=12 you may use  4 3"
+end subroutine
+
+subroutine processArgs
+!    integer,        intent(out)  :: nproc, npx, npy
+    integer                      :: nn
+    character(len=32)            :: arg
+    COMMON nproc, npx, npy, arg_err
+
+    nn = command_argument_count()
+!    write (*,*) 'number of command arguments = ', nn
+!    write (*,*) 'number of processor = ', nproc
+    if (nn /= 2) then
+        call getarg(0, arg)
+        call printUsage (arg)
+        arg_err = 1
+     else
+        call getarg(1, arg)  ! write (arg, '(i10)') nproc    
+        read (arg, *) npx
+!        write (*,*) 'number of x processor = ', npx
+        call getarg(2, arg)
+        read (arg, *) npy
+!        write (*,*) 'number of y processor = ', npy
+     endif
+
+     if (npx*npy /= nproc) then
+        arg_err = 1
+        print *, "ERROR: Product of decomposition numbers in X and Y dimension ", npx*npx
+        print *, " != number of processes ", nproc
+     endif
+end subroutine
+
+program tri2d_f_noxml
+    use adios_write_mod
+    implicit none
+    include 'mpif.h'
+!    character(len=256)      :: filename = "tri2d_f_noxml.bp"
+    integer*8               :: adios_groupsize, adios_totalsize
+    integer*8               :: data_file
+    integer*8               :: mesh_file
+    integer*8               :: data_group
+    integer*8               :: mesh_group
+    integer*8               :: varid
+    integer*4               :: comm
+
+    integer*4               :: rank, i, j, k, p, p1, ierr, adios_err
+    integer*4               :: npoints, num_cells
+    integer*4               :: ndx, ndy                            ! size of array per processor
+    real*8, dimension(:), allocatable       :: N                                   ! node centered variable
+    real*8, dimension(:), allocatable       :: C                                   ! cell centered variable
+    real*8, dimension(:,:), allocatable     :: points                              ! X,Y coordinate
+    integer*4, dimension(:,:), allocatable  :: cells
+    character(:), allocatable            :: schema_version, dimemsions
+
+    integer*4               :: offs_x, offs_y                      ! offset in x and y direction
+    integer*4               :: nx_local, ny_local                  ! local address
+    integer*4               :: posx, posy                          ! position index in the array
+    integer*4               :: nx_global, ny_global                ! global address
+    integer*4               :: lp, op, lc, oc
+    
+    !will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    integer*4               :: npx                                 ! # of procs in x direction
+    integer*4               :: npy                                 ! # of procs in y direction
+    integer*4               :: nproc                               ! # of total procs
+    integer*4               :: arg_err
+
+    COMMON nproc, npx, npy, arg_err
+
+    call MPI_Init (ierr)
+    call MPI_Comm_dup (MPI_COMM_WORLD, comm, ierr)
+    call MPI_Comm_rank (comm, rank, ierr)
+    call MPI_Comm_size (comm, nproc, ierr)
+
+    arg_err = 0
+    call processArgs
+
+    if (arg_err == 1) then
+        stop
+    endif
+
+    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 = mod(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
+    allocate (N(0:ndx*ndy*8-1))            ! 8 is sizeof(double)
+    allocate (points(2,0:ndx*ndy*8-1))   ! 8 is sizeof(double)
+
+    if (posx == npx-1 .AND. posy < npy-1 ) then
+        allocate (C(0:8*(ndx-1)*ndy*2-1))      ! 8 is sizeof(double)
+        allocate (cells(3,0:4*(ndx-1)*ndy*2-1))! 4 is sizeof(int)
+    else if (posy == npy-1 .AND. posx < npx-1 ) then
+        allocate (C(0:8*ndx*(ndy-1)*2-1))
+        allocate (cells(3,0:4*ndx*(ndy-1)*2-1))
+    else if ( posx == npx-1 .AND. posy == npy-1 ) then 
+        allocate (C(0:8*(ndx-1)*(ndy-1)*2-1))
+        allocate (cells(3,0:4*(ndx-1)*(ndy-1)*2-1))
+    else
+        allocate (C(0:8*ndx*ndy*2-1))
+        allocate (cells(3,0:4*ndx*ndy*2-1))
+    endif
+
+! generate local data
+    lp = ndx * ndy                         ! number of points in this local array
+    op = ndx * ndy * rank                  ! offset in global points array
+
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            points(1,(i*ndy + j)) = offs_x + posy*ndx + DBLE(i)*ndx/ndx + DBLE(ndx)*j/ndy
+            points(2,(i*ndy + j)) = offs_y + DBLE(ndy)*j/ndy
+        enddo
+    enddo
+
+    do i = 0, lp-1
+        N(i) = 1.0*DBLE(rank)
+    enddo
+    
+    if( posx == npx-1 .AND. posy < npy-1 ) then
+        lc = (ndx-1)*ndy*2
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2
+        !write (*,'("Rank",i0,": case 1: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-2
+            do j = 0, ndy-1
+               p = i*ndy+j
+               if( i<ndx-1 .AND. j<ndy-1 ) then
+                   cells(:,2*p)   = (/ op+p, op+p+ndy,   op+p+ndy+1  /)
+                   cells(:,2*p+1) = (/ op+p, op+p+ndy+1, op+p+1      /)
+                   !write (*,'("Rank",i0,": 1A cell ",i0,"= [",3i3,"]")'), rank, 2*p, cells(:,2*p)
+                   !write (*,'("Rank",i0,": 1A cell ",i0,"= [",3i3,"]")'), rank, 2*p+1, cells(:,2*p+1)
+                else                     ! extend in Y direction only
+                   cells(:,2*p)   = (/ op+p, op+p+ndy,   op+nx_global*ndy+(i+1)*ndy  /)
+                   cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+(i+1)*ndy, op+nx_global*ndy+i*ndy /)
+                   !write (*,'("Rank",i0,": 1B cell ",i0,"= [",3i3,"]")'), rank, 2*p, cells(:,2*p)
+                   !write (*,'("Rank",i0,": 1B cell ",i0,"= [",3i3,"]")'), rank, 2*p+1, cells(:,2*p+1)
+                endif
+            enddo
+        enddo
+    else if( posy == npy-1 .AND. posx < npx-1 ) then
+        lc = ndx*(ndy-1)*2
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2
+        !write (*,'("Rank",i0,": case 2: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-1
+            do j = 0, ndy-2
+                p = i*(ndy-1)+j
+                p1 = i*ndy+j
+                if( i<ndx-1 .AND. j<ndy-1 ) then
+                   cells(:,2*p)   = (/ op+p1, op+p1+ndy,   op+p1+ndy+1  /)
+                   cells(:,2*p+1) = (/ op+p1, op+p1+ndy+1, op+p1+1      /)
+                else
+                   cells(:,2*p)   = (/ op+p1, op+ndx*ndy+j,   op+ndx*ndy+j+1  /)
+                   cells(:,2*p+1) = (/ op+p1, op+ndx*ndy+j+1, op+p1+1      /)
+                endif
+            enddo
+        enddo
+    else if( posx == npx-1 .AND. posy == npy-1 ) then
+        lc = (ndx-1)*(ndy-1)*2
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2
+        !write (*,'("Rank",i0,": case 3: define ",i0," triangles, oc=",i0)'), rank, lc, oc
+        do i = 0, ndx-2
+            do j = 0, ndy-2
+                p = i*(ndy-1)+j
+                p1 = i*ndy+j
+                cells(:,2*p)   = (/ op+p1, op+p1+ndy,   op+p1+ndy+1  /)
+                cells(:,2*p+1) = (/ op+p1, op+p1+ndy+1, op+p1+1      /)
+            enddo
+        enddo
+    else
+        lc = ndx*ndy*2
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2
+        !write (*,'("Rank",i0,": case 4: define ",i0," triangles, oc=", i0)'), rank, lc, oc
+        do i = 0, ndx-1
+            do j = 0, ndy-1
+                p = i*ndy+j
+                if( i<ndx-1 .AND. j<ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+p+ndy,   op+p+ndy+1  /)
+                    cells(:,2*p+1) = (/ op+p, op+p+ndy+1, op+p+1      /)
+                else if( i==ndx-1 .AND. j<ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+ndx*ndy+j,   op+ndx*ndy+j+1  /)
+                    cells(:,2*p+1) = (/ op+p, op+ndx*ndy+j+1, op+p+1  /)
+                else if( i<ndx-1 .AND. j==ndy-1 ) then
+                    cells(:,2*p)   = (/ op+p, op+p+ndy,   op+nx_global*ndy+(i+1)*ndy /)
+                    cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+(i+1)*ndy, op+nx_global*ndy+i*ndy /)
+                else
+                    cells(:,2*p)   = (/ op+p, op+ndx*ndy+j, op+nx_global*ndy+ndx*ndy /)
+                    cells(:,2*p+1) = (/ op+p, op+nx_global*ndy+ndx*ndy, op+nx_global*ndy+i*ndy /)
+                endif
+            enddo
+        enddo
+    endif
+
+
+    do i = 0, lc-1
+        C(i) = 1.0*DBLE(rank)
+    enddo
+
+    schema_version = "1.1"
+    dimemsions = "nx_global,ny_global"
+
+    call adios_init_noxml (comm, adios_err)
+    call adios_allocate_buffer (10, adios_err)
+
+    !!
+    !! Define the Data group
+    !!
+    call adios_declare_group (data_group, "tri2d", "", 1, adios_err)
+    call adios_select_method (data_group, "MPI", "", "", adios_err)
+
+    ! This example doesn't use varid during writing.
+    ! So we simply put 'varid' everywhere.
+    ! define a integer
+    !call adios_define_var (data_group, "nx_global" &
+    !            ,"", adios_integer &
+    !            ,"","","", varid)
+    !call adios_define_var (data_group, "ny_global" &
+    !            ,"", adios_integer &
+    !            ,"" ,"","", varid)
+    !call adios_define_var (data_group, "nproc" &
+    !            ,"", adios_integer &
+    !            ,"" ,"","", varid)
+    call adios_define_var (data_group, "npoints" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (data_group, "num_cells" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    !call adios_define_var (data_group, "offs_x" &
+    !            ,"", adios_integer &
+    !            ,"","","", varid)
+    !call adios_define_var (data_group, "offs_y" &
+    !            ,"", adios_integer &
+    !            ,"","" ,"" , varid)
+    !call adios_define_var (data_group, "nx_local" &
+    !            ,"", adios_integer &
+    !            ,"","" , "", varid)
+    !call adios_define_var (data_group, "ny_local" &
+    !            ,"", adios_integer &
+    !            ,"","","", varid)
+    call adios_define_var (data_group, "op" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (data_group, "lp" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (data_group, "oc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (data_group, "lc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (data_group, "N" &
+                    ,"", adios_double &
+                    ,"lp", "npoints", "op", varid)
+    call adios_define_var (data_group, "C" &
+                    ,"", adios_double &
+                    ,"lc", "num_cells", "oc", varid)
+
+    !call adios_define_attribute (data_group, "description", "/nproc", adios_string, "Number of writers", "", adios_err)
+    call adios_define_attribute (data_group, "description", "/npoints", adios_string, "Number of points", "", adios_err)
+    call adios_define_attribute (data_group, "description", "/num_cells", adios_string, "Number of triangles", "", adios_err)
+
+    call adios_define_schema_version (data_group, schema_version)
+    call adios_define_mesh_file (data_group, "trimesh", "trimesh.bp")
+
+    call adios_define_var_mesh (data_group, "N", "trimesh")
+    call adios_define_var_centering (data_group, "N", "point")
+    call adios_define_attribute (data_group, "description", "/N", adios_string, "Node centered data", "", adios_err)
+    call adios_define_var_mesh (data_group, "C", "trimesh")
+    call adios_define_var_centering (data_group, "C", "cell")
+    call adios_define_attribute (data_group, "description", "/C", adios_string, "Cell centered data", "", adios_err)
+
+
+    !!
+    !! Define the Mesh group
+    !!
+    call adios_declare_group (mesh_group, "trimesh", "", 1, adios_err)
+    call adios_select_method (mesh_group, "MPI", "", "", adios_err)
+    call adios_define_var (mesh_group, "npoints" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "num_cells" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "op" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "lp" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "oc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "lc" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (mesh_group, "points" &
+                    ,"", adios_double &
+                    ,"2,lp", "2,npoints", "0,op", varid)
+    call adios_define_var (mesh_group, "cells" &
+                    ,"", adios_integer &
+                    ,"3,lc", "3,num_cells", "0,oc", varid)
+
+    call adios_define_attribute (mesh_group, "description", "/npoints", adios_string, "Number of points", "", adios_err)
+    call adios_define_attribute (mesh_group, "description", "/num_cells", adios_string, "Number of triangles", "", adios_err)
+
+    call adios_define_schema_version (mesh_group, schema_version)
+    call adios_define_mesh_timevarying ("no", mesh_group, "trimesh")
+    call adios_define_mesh_unstructured ("points", "cells", "num_cells", "triangle", "", "2", mesh_group, "trimesh")
+
+
+    !!
+    !! Write Data group
+    !!
+    call adios_open (data_file, "tri2d", "tri2d_f_noxml_sep.bp", "w", comm, adios_err)
+
+    adios_groupsize = 6*4 &   ! int
+    + 8 * lp  &              ! double
+    + 8 * lc                ! double
+
+    call adios_group_size (data_file, adios_groupsize, adios_totalsize, adios_err)
+    
+    !call adios_write (data_file, "nproc", nproc, adios_err)
+    call adios_write (data_file, "npoints", npoints, adios_err)
+    call adios_write (data_file, "num_cells", num_cells, adios_err)
+    !call adios_write (data_file, "nx_global", nx_global, adios_err)
+    !call adios_write (data_file, "ny_global", ny_global, adios_err)
+    !call adios_write (data_file, "offs_x", offs_x, adios_err)
+    !call adios_write (data_file, "offs_y", offs_y, adios_err)
+    !call adios_write (data_file, "nx_local", nx_local, adios_err)
+    !call adios_write (data_file, "ny_local", ny_local, adios_err)
+    call adios_write (data_file, "lp", lp, adios_err)
+    call adios_write (data_file, "op", op, adios_err)
+    call adios_write (data_file, "lc", lc, adios_err)
+    call adios_write (data_file, "oc", oc, adios_err)
+    call adios_write (data_file, "N", N, adios_err)
+    call adios_write (data_file, "C", C, adios_err)
+
+    call adios_close (data_file, adios_err)
+
+    !!
+    !! Write Mesh group
+    !!
+    call adios_open (mesh_file, "trimesh", "trimesh.bp", "w", comm, adios_err)
+
+    adios_groupsize = 6*4 &   ! int
+    + 8 * lp * 2 &           ! double
+    + 4 * lc * 3 
+
+    call adios_group_size (mesh_file, adios_groupsize, adios_totalsize, adios_err)
+    call adios_write (mesh_file, "npoints", npoints, adios_err)
+    call adios_write (mesh_file, "num_cells", num_cells, adios_err)
+    call adios_write (mesh_file, "lp", lp, adios_err)
+    call adios_write (mesh_file, "op", op, adios_err)
+    call adios_write (mesh_file, "lc", lc, adios_err)
+    call adios_write (mesh_file, "oc", oc, adios_err)
+    call adios_write (mesh_file, "points", points, adios_err)
+    call adios_write (mesh_file, "cells", cells, adios_err)
+
+    call adios_close (mesh_file, adios_err)
+
+
+    call MPI_Barrier (comm, ierr)
+
+!    call free (N)
+!    call free (points)
+!    call free (C)
+!    call free (cells)
+
+    call adios_finalize (rank, adios_err)
+
+    call MPI_Finalize (ierr)
+
+end program 
diff --git a/examples/Fortran/schema/uniform2d_noxml.F90 b/examples/Fortran/schema/uniform2d_noxml.F90
new file mode 100644
index 0000000..daa73fc
--- /dev/null
+++ b/examples/Fortran/schema/uniform2d_noxml.F90
@@ -0,0 +1,205 @@
+! 
+ ! 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. 
+
+subroutine printUsage (prgname)
+    implicit none
+    character(*),   intent(in)  :: prgname
+    print *, "Usage: mpirun -np <N> ", prgname, "<nx> <ny>"
+    print *, "    <nx> <ny>  2D decomposition values in each dimension of an 2D array"
+    print *, "         The product of these number must be equal the number of processes"
+    print *, "         e.g. for N=12 you may use  4 3"
+end subroutine
+
+subroutine processArgs
+!    integer,        intent(out)  :: nproc, npx, npy
+    integer                      :: nn
+    character(len=32)            :: arg
+    COMMON nproc, npx, npy, arg_err
+
+    nn = command_argument_count()
+!    write (*,*) 'number of command arguments = ', nn
+!    write (*,*) 'number of processor = ', nproc
+    if (nn /= 2) then
+        call getarg(0, arg)
+        call printUsage (arg)
+        arg_err = 1
+     else
+        call getarg(1, arg)  ! write (arg, '(i10)') nproc    
+        read (arg, *) npx
+!        write (*,*) 'number of x processor = ', npx
+        call getarg(2, arg)
+        read (arg, *) npy
+!        write (*,*) 'number of y processor = ', npy
+     endif
+
+     if (npx*npy /= nproc) then
+        arg_err = 1
+        print *, "ERROR: Product of decomposition numbers in X and Y dimension ", npx*npx
+        print *, " != number of processes ", nproc
+     endif
+end subroutine
+
+program uniform2d_f_noxml
+    use adios_write_mod
+    implicit none
+    include 'mpif.h'
+    character(len=256)      :: filename = "uniform2d_f_noxml.bp"
+    integer*8               :: adios_groupsize, adios_totalsize
+    integer*8               :: adios_handle
+    integer*8               :: m_adios_group
+    integer*8               :: varid
+    integer*4               :: comm
+    integer*4               :: rank, i, j, k, p, p1, ierr, adios_err
+    integer*4               :: ndx, ndy                            ! size of array per processor
+    integer*4               :: O1, O2, S1, S2                      ! origin in x,y direction and spacing in x,y direction
+    integer*4               :: offs_x, offs_y                      ! offset in x and y direction
+    integer*4               :: nx_local, ny_local                  ! local address
+    integer*4               :: posx, posy                          ! position index in the array
+    integer*4               :: nx_global, ny_global                ! global address
+    real*8, dimension(:), allocatable       :: data
+    character(:), allocatable               :: schema_version, dimemsions, origin, spacing    
+
+    !will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    integer*4               :: npx                                 ! # of procs in x direction
+    integer*4               :: npy                                 ! # of procs in y direction
+    integer*4               :: nproc                               ! # of total procs
+    integer*4               :: arg_err
+
+    COMMON nproc, npx, npy, arg_err
+
+    call MPI_Init (ierr)
+    call MPI_Comm_dup (MPI_COMM_WORLD, comm, ierr)
+    call MPI_Comm_rank (comm, rank, ierr)
+    call MPI_Comm_size (comm, nproc, ierr)
+
+    arg_err = 0
+    call processArgs
+
+    if (arg_err == 1) then
+        stop
+    endif
+
+    ! will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+    ndx = 65
+    ndy = 129
+
+    !2D array with block,block decomposition
+    posx = mod(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
+
+    O1 = 0
+    O2 = 0
+    S1 = 1
+    S2 = 2
+    schema_version = "1.1"
+    dimemsions = "nx_global,ny_global"
+    origin = "O1,O2"
+    spacing = "S1,S2"
+
+    allocate (data(0:(ndx-1)*(ndy-1)*8))
+    do i = 0, ndx-1
+        do j = 0, ndy-1
+            data(i*ndy+j) = 1.0*DBLE(rank)
+        enddo
+    enddo
+
+    call adios_init_noxml (comm, adios_err)
+    call adios_allocate_buffer (50, adios_err)
+    call adios_declare_group (m_adios_group, "uniform2d", "", 1, adios_err)    
+    call adios_select_method (m_adios_group, "MPI", "", "", adios_err)
+
+    ! This example doesn't use varid during writing.
+    ! So we simply put 'varid' everywhere.
+    ! define a integer
+    call adios_define_var (m_adios_group, "nx_global" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "ny_global" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "nproc" &
+                ,"", adios_integer &
+                ,"" ,"","", varid)
+    call adios_define_var (m_adios_group, "offs_x" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "offs_y" &
+                ,"", adios_integer &
+                ,"","" ,"" , varid)
+    call adios_define_var (m_adios_group, "nx_local" &
+                ,"", adios_integer &
+                ,"","" , "", varid)
+    call adios_define_var (m_adios_group, "ny_local" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "O1" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "O2" &
+                ,"", adios_integer &
+                ,"","" ,"" , varid)
+    call adios_define_var (m_adios_group, "S1" &
+                ,"", adios_integer &
+                ,"","" , "", varid)
+    call adios_define_var (m_adios_group, "S2" &
+                ,"", adios_integer &
+                ,"","","", varid)
+    call adios_define_var (m_adios_group, "data" &
+                    ,"X/Y/Z", adios_double &
+                    ,"ny_local,nx_local", "ny_global,nx_global", "offs_y,offs_x", varid)
+
+    call adios_define_schema_version (m_adios_group, schema_version)
+    call adios_define_mesh_uniform (dimemsions, origin, spacing, "", "2", m_adios_group, "uniformmesh")
+    call adios_define_mesh_timevarying ("no", m_adios_group, "uniformmesh")
+    call adios_define_var_mesh (m_adios_group, "X/Y/Z/data", "uniformmesh")
+    call adios_define_var_centering (m_adios_group, "X/Y/Z/data", "point")
+
+    !function test
+    call adios_define_var_timesteps ("0,1,200",m_adios_group, "X/Y/Z/data")
+    call adios_define_var_timescale ("0,0.01,10", m_adios_group, "X/Y/Z/data")
+    call adios_define_var_timeseriesformat ("5", m_adios_group, "X/Y/Z/data")
+    call adios_define_var_hyperslab ("0,1,32", m_adios_group, "X/Y/Z/data")
+
+    call adios_define_mesh_timevarying ("no", m_adios_group, "uniformmesh")
+    call adios_define_mesh_group ("xgc.mesh", m_adios_group, "uniformmesh")
+    call adios_define_mesh_timesteps ("0,1,200",m_adios_group, "uniformmesh")
+    call adios_define_mesh_timescale ("0,0.01,10", m_adios_group, "uniformmesh")
+    call adios_define_mesh_timeseriesformat ("5", m_adios_group, "uniformmesh")
+
+    adios_groupsize = 11*4 & !int
+    + 8 * (nx_local*ny_local) ! double (data)
+
+    call adios_open (adios_handle, "uniform2d", filename, "w", comm, adios_err)
+    call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+
+    call adios_write (adios_handle, "nx_global", nx_global, adios_err)
+    call adios_write (adios_handle, "ny_global", ny_global, adios_err)
+    call adios_write (adios_handle, "nproc", nproc, adios_err)
+    call adios_write (adios_handle, "offs_x", offs_x, adios_err)
+    call adios_write (adios_handle, "offs_y", offs_y, adios_err)
+    call adios_write (adios_handle, "nx_local", nx_local, adios_err)
+    call adios_write (adios_handle, "ny_local", ny_local, adios_err)
+    call adios_write (adios_handle, "O1", O1, adios_err)
+    call adios_write (adios_handle, "O2", O2, adios_err)
+    call adios_write (adios_handle, "S1", S1, adios_err)
+    call adios_write (adios_handle, "S2", S2, adios_err)
+    call adios_write (adios_handle, "X/Y/Z/data", data, adios_err)
+
+    call adios_close (adios_handle, adios_err)
+    call MPI_Barrier (comm, ierr)
+    call adios_finalize (rank, adios_err)
+    call MPI_Finalize (ierr)
+
+end program
diff --git a/examples/Makefile.in b/examples/Makefile.in
index f32a25c..62c8c58 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/examples/coupling/job1 b/examples/coupling/job1
deleted file mode 100755
index 4fd3ba6..0000000
--- a/examples/coupling/job1
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/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
-source /etc/profile.d/modules.sh
-module load szip
-
-# 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/skel/picongpu/test/Makefile b/examples/skel/picongpu/test/Makefile
deleted file mode 100644
index 1e642dc..0000000
--- a/examples/skel/picongpu/test/Makefile
+++ /dev/null
@@ -1,46 +0,0 @@
-
-# To modify this Makefile, edit Makefile_default.tpl file in ~/.skel/templates/
-# and run skel makefile  
-
-include /ccs/proj/e2e/pnorbert/ADIOS/sith.pgi/bin/../etc/skel/compiler_fragment.mk
-
-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=picongpu
-CTESTS=picongpu_skel_fields_write 
-FTESTS=
-
-DEST_DIR=~/skel-deploy-dir/$(APP)/128
-
-all: $(FTESTS) $(CTESTS)
-
-
-$(CTESTS): $(CTESTS:=.c)
-	$(CC) $(CFLAGS) -o $@ ${@}.c $(LDFLAGS)
-
-$(FTESTS): $(FTESTS:=.f90)
-	$(FC) $(FCFLAGS) -o $@ ${@}.f90 $(FCLIBS)
-
-
-deploy:
-	#Make sure this exists
-	mkdir -p $(DEST_DIR)
-
-	rm -f $(DEST_DIR)/submit*
-	cp $(APP)_skel.xml $(DEST_DIR)/$(APP)_skel.xml.in
-	cp $(CTESTS) submit* $(DEST_DIR)
-	cp $(FTESTS) submit* $(DEST_DIR)
-	cp $(prefix)/bin/set_method.sh $(DEST_DIR)
-	cp $(prefix)/bin/skel_cat.py $(DEST_DIR)
-
-clean:
-	rm -f *.c
-	rm -f *.f90
-	#rm -f submit*
-	rm -f $(CTESTS) $(FTESTS)
-
-
diff --git a/examples/skel/picongpu/test/picongpu.xml b/examples/skel/picongpu/test/picongpu.xml
deleted file mode 100644
index 49cce2e..0000000
--- a/examples/skel/picongpu/test/picongpu.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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
deleted file mode 100644
index d2a9b59..0000000
--- a/examples/skel/picongpu/test/picongpu_params.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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
deleted file mode 100644
index d2a9b59..0000000
--- a/examples/skel/picongpu/test/picongpu_params.xml.default
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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
deleted file mode 100644
index 2536509..0000000
--- a/examples/skel/picongpu/test/picongpu_skel.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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
deleted file mode 100644
index 5ba8782..0000000
--- a/examples/skel/picongpu/test/picongpu_skel_fields_write.c
+++ /dev/null
@@ -1,184 +0,0 @@
-//
-// 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/make.settings b/examples/staging/stage_write/make.settings
index 49710f0..cc1d9b5 100644
--- a/examples/staging/stage_write/make.settings
+++ b/examples/staging/stage_write/make.settings
@@ -1,7 +1,7 @@
 TARGET=pgi
 
 ## Set ADIOS_DIR here or before doing make
-override ADIOS_DIR=/ccs/proj/e2e/$USER/ADIOS/sith.${TARGET}
+override ADIOS_DIR=/ccs/proj/e2e/${USER}/ADIOS/sith.${TARGET}
 
 ## mpicc and mpif90 SETTINGS
 CC=mpicc
diff --git a/examples/staging/stage_write/stage_write.c b/examples/staging/stage_write/stage_write.c
index c07f04b..24d8178 100644
--- a/examples/staging/stage_write/stage_write.c
+++ b/examples/staging/stage_write/stage_write.c
@@ -51,7 +51,7 @@ int64_t    fh;     // ADIOS output file handle
 int64_t     gh;     // ADIOS group for output definitions
 uint64_t    write_total; // data size written by one processor
 uint64_t    largest_block; // the largest variable block one process reads
-char     ** group_namelist; // name of ADIOS group
+char       *group_name; // name of ADIOS group
 char       *readbuf; // read buffer
 int         decomp_values[10];
 
@@ -286,6 +286,8 @@ int process_metadata(int step)
     char gdims[256], ldims[256], offs[256];
     uint64_t sum_count;
     ADIOS_VARINFO *v; // shortcut pointer
+    char     ** group_namelist; // name(s) of ADIOS group(s)
+
 
     if (step > 1)
     {
@@ -296,10 +298,11 @@ int process_metadata(int step)
 
     /* First step processing */
 
-    // get groupname of stream, then declare for output
+    // Get group name, then declare the group for output
     adios_get_grouplist(f, &group_namelist);
-    print0("Group name is %s\n", group_namelist[0]);
-    adios_declare_group(&gh,group_namelist[0],"",adios_flag_yes);
+    group_name = strdup (group_namelist[0]);
+    print0("Group name is %s\n", group_name);
+    adios_declare_group(&gh,group_name,"",adios_flag_yes);
 
 
     varinfo = (VarInfo *) malloc (sizeof(VarInfo) * f->nvars);
@@ -445,7 +448,7 @@ int read_write(int step)
     uint64_t total_size;
 
     // open output file
-    adios_open (&fh, group_namelist[0], outfilename, (step==1 ? "w" : "a"), comm);
+    adios_open (&fh, group_name, outfilename, (step==1 ? "w" : "a"), comm);
     adios_group_size (fh, write_total, &total_size);
     
     for (i=0; i<f->nvars; i++) 
@@ -456,7 +459,7 @@ int read_write(int step)
             ADIOS_SELECTION *sel = adios_selection_boundingbox (varinfo[i].v->ndim,
                     varinfo[i].start, 
                     varinfo[i].count);
-            adios_schedule_read_byid (f, sel, i, 1, 1, readbuf);
+            adios_schedule_read_byid (f, sel, i, 0, 1, readbuf);
             adios_perform_reads (f, 1);   
 
 
diff --git a/examples/staging/stage_write/writer_adios b/examples/staging/stage_write/writer_adios
deleted file mode 120000
index ee50da8..0000000
--- a/examples/staging/stage_write/writer_adios
+++ /dev/null
@@ -1 +0,0 @@
-/ccs/proj/e2e/pnorbert/ADIOS/ADIOS/tests/performance/simple_write/writer_adios
\ No newline at end of file
diff --git a/examples/staging/stage_write_varyingsize/Makefile b/examples/staging/stage_write_varyingsize/Makefile
new file mode 100644
index 0000000..3e3bfa8
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/Makefile
@@ -0,0 +1,22 @@
+
+# Change setup in make.settings
+
+default: genarray_varying stage_write 
+all: default
+
+stage_write: stage_write.c
+	make -f Makefile.stage_write 
+
+genarray_varying: genarray_varying.F90
+	make -f Makefile.genarray_varying
+
+clean:
+	make -f Makefile.stage_write clean
+	make -f Makefile.genarray_varying clean
+	rm -f staging.o[0-9]*
+
+distclean: 
+	make -f Makefile.stage_write distclean
+	make -f Makefile.genarray_varying distclean
+	rm -f staging.o[0-9]*
+
diff --git a/examples/staging/stage_write_varyingsize/Makefile.genarray_varying b/examples/staging/stage_write_varyingsize/Makefile.genarray_varying
new file mode 100644
index 0000000..2b138e0
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/Makefile.genarray_varying
@@ -0,0 +1,22 @@
+include make.settings
+
+## Set ADIOS_DIR here or before doing make
+override ADIOS_INC=`${ADIOS_DIR}/bin/adios_config -c -f`
+override ADIOS_FLIB=`${ADIOS_DIR}/bin/adios_config -l -f`
+
+default: genarray_varying
+all: default
+
+genarray_varying.o : genarray_varying.F90 
+	${FC} -g -c ${ADIOS_INC} genarray_varying.F90  $<
+
+genarray_varying:  genarray_varying.o
+	${FC} -g -o genarray_varying genarray_varying.o ${ADIOS_FLIB} 
+
+
+clean:
+	rm -f *.o *.mod *.fh core.*
+	rm -f genarray_varying
+
+distclean: clean
+
diff --git a/examples/staging/stage_write_varyingsize/Makefile.stage_write b/examples/staging/stage_write_varyingsize/Makefile.stage_write
new file mode 100644
index 0000000..572f9ee
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/Makefile.stage_write
@@ -0,0 +1,29 @@
+include make.settings
+
+## Set ADIOS_DIR here or before doing make
+override ADIOS_INC=`${ADIOS_DIR}/bin/adios_config -c`
+override ADIOS_CLIB=`${ADIOS_DIR}/bin/adios_config -l`
+
+
+default: stage_write 
+all: default
+
+OBJS = utils.o decompose_block.o 
+
+%.o: %.c
+	${CC} ${CFLAGS} -c ${ADIOS_INC} $<
+
+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}
+
+clean:
+	rm -f *.o *.mod *.fh core.*
+	rm -f stage_write
+
+
+distclean: clean
+	rm -f log.* dataspaces.conf conf srv.lck *.bp
+
diff --git a/examples/staging/stage_write_varyingsize/README b/examples/staging/stage_write_varyingsize/README
new file mode 100644
index 0000000..b1d9973
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/README
@@ -0,0 +1,54 @@
+
+
+   This is for debugging. Do not use it yet.
+
+
+
+
+STAGE WRITE CODE
+
+This code can be used to perform your disk I/O after sending the data to a staging area. 
+It can also be used to read in your file with a certain number of processors with a new decomposition and write out the data with the new layout.
+
+BUILD
+=====
+Edit the Makefile for your needs. This example is not built automatically with ADIOS. You need to install ADIOS first, then use the installation to build this code. 
+
+The read method in this code is not set by argument but is in the source. Set it for your target usage. See variable "read_method", set around line 32. 
+
+USAGE
+=====
+The 'job' file provides an example how to launch 3 applications within one job. Besides your own app, first you have to prepare and start the staging server (DataSpaces in the job script). Then you can run both your app and this stage writer code.
+
+Parameters to stage write:
+    E.g. genarray.bp staged.bp MPI \"\" $READPROC 1 1 
+
+    input   Input stream path
+    output  Output file path
+    method  ADIOS method to write with
+    params  Write method parameters (in quotes; comma-separated list)
+    <decomposition>    list of numbers e.g. 32 8 4
+            Decomposition values in each dimension of an array
+            The product of these number must be less then the number
+            of processes. Processes whose rank is higher than the
+            product, will not read/write anything.
+               Arrays with less dimensions than the number of values,
+            will be decomposed with using the numbers from the beginning.
+
+NOTES
+=====
+1. The job example is set for the ./genarray_varying.F90 writing application, which is not built automatically. Use the Makefile.genarray_varying to build it. 
+WARNING: the method used in the genarray_varying.xml should match the reading method in stage_write.c. That is, if you use a file method (e.g. MPI) to write to a file, the stage_write should use the BP reading method to be able to process it. Then you don't need to run the dataspaces server in the job either. Modify both places to use DataSpaces for staging. 
+
+2. The writing application must append new steps into the same file (name). A stream in ADIOS staging cannot consist of multiple file names but of a single "file" with multiple steps in it. E.g. we had to modify the tests/genarray/genarray.F90 to append to a file named "genarray.bp". See ./genarray_varying.F90, which is not built automatically.
+
+3. You probably end up modifying this code. For instance, you might find that the desired decomposition cannot be expressed (e.g. you have arrays with various dimensions and you want decomposition different from them), or you want to pass the output file name within the stream dataset itself, or you want to do something with the data before writing it out.
+
+
+
+
+
+
+
+
+
diff --git a/examples/staging/stage_write_varyingsize/decompose.h b/examples/staging/stage_write_varyingsize/decompose.h
new file mode 100644
index 0000000..0d133ff
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/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/examples/staging/stage_write_varyingsize/decompose_block.c b/examples/staging/stage_write_varyingsize/decompose_block.c
new file mode 100644
index 0000000..8f49267
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/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_varyingsize/decompose_single.c b/examples/staging/stage_write_varyingsize/decompose_single.c
new file mode 100644
index 0000000..522f9b4
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/decompose_single.c
@@ -0,0 +1,27 @@
+#include "decompose.h"
+
+/* Silly decompose: let process 0 do everything */
+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)
+{
+    int i;
+    if (rank == 0) 
+        *writesize = 1;
+    else 
+        *writesize = 0;
+
+    for (i=0; i<ndim; i++)
+    {
+        if (rank == 0) {
+            count[i] = dims[i];
+            *writesize *= dims[i];
+        } else {
+            count[i] = 0;
+        }
+        start[i] = 0;
+    }
+}
+
+
diff --git a/examples/staging/stage_write_varyingsize/genarray_varying.F90 b/examples/staging/stage_write_varyingsize/genarray_varying.F90
new file mode 100644
index 0000000..021d956
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/genarray_varying.F90
@@ -0,0 +1,324 @@
+
+!  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.
+!
+
+!
+!  GENARRAY for staging: same as genarray but appends steps into a single file
+!
+!  Write an ADIOS BP file from many processor for test purposes.
+!
+!  nx * ny * nz     processes write a 3D array, where each process writes an
+!  ndx * ndy * ndz  piece with filling with its rank as integer (4 bytes) value
+!
+!  The size of the local array will be extended with 1 in each dimension at
+!  every step.
+!  The global array size will grow at each step.
+! 
+!
+! (c) Oak Ridge National Laboratory, 2009
+! Author: Norbert Podhorszki
+!
+module genarray_varying_comm
+    ! arguments
+    character(len=256) :: outputfile, inputfile
+    integer :: npx, npy, npz  ! # of processors in x-y-z direction
+    integer :: ndx, ndy, ndz  ! size of array per processor
+    integer :: timesteps      ! number of timesteps to write
+    integer :: sleeptime      ! time to sleep between time steps
+    logical :: common_size    ! .true.  if common local sizes are given as argument
+                              ! .false. if we have to read sizes from a file
+                              ! (not implemented)
+
+    integer :: gndx, gndy, gndz  ! size of the global array
+    integer :: offx,offy,offz    ! offsets of local array in the global array
+
+    real*8, dimension(:,:,:), allocatable :: double_xyz
+
+    ! MPI COMM_WORLD is for all codes started up at once on Cray XK6 
+    integer :: wrank, wnproc
+
+    ! MPI 'world' for this app variables
+    integer :: app_comm, color
+    integer :: rank, nproc
+    integer :: ierr
+
+    ! ADIOS variables
+    character (len=200) :: group
+    character (len=200) :: filename
+    !character (len=6)   :: nprocstr
+    integer*8 :: handle, total_size, group_size, adios_totalsize
+    integer   :: err
+
+    real*8 :: start_time, end_time, total_time,gbs,sz
+    real*8 :: io_start_time, io_end_time, io_total_time
+
+
+end module genarray_varying_comm
+
+
+program genarray
+    use genarray_varying_comm
+    implicit none
+    include 'mpif.h'
+
+    !print *,"call MPI_Init "
+    call MPI_Init (ierr)
+    ! World comm spans all applications started with the same aprun command 
+    ! on a Cray XK6
+    !print *,"call MPI_rank (world) "
+    call MPI_Comm_rank (MPI_COMM_WORLD, wrank, ierr)
+    !print *,"call MPI_size (world) "
+    call MPI_Comm_size (MPI_COMM_WORLD, wnproc , ierr)
+    ! Have to split and create a 'world' communicator for genarray only
+    color = 1
+    !print *,"call MPI_split "
+    call MPI_Barrier(MPI_COMM_WORLD, ierr);
+    call MPI_Comm_split (MPI_COMM_WORLD, color, wrank, app_comm, ierr)
+    !call MPI_Comm_dup (MPI_COMM_WORLD, app_comm, ierr)
+    !print *,"call MPI_rank (app) "
+    call MPI_Comm_rank (app_comm, rank, ierr)
+    !print *,"call MPI_size (app) "
+    call MPI_Comm_size (app_comm, nproc , ierr)
+
+    !print *,"call adios_init "
+    call adios_init ("genarray_varying.xml", app_comm, ierr)
+    !print *,"MPI_Barrier "
+    call MPI_Barrier (app_comm, ierr)
+
+    call processArgs()
+    if (rank == 0) then
+        print *,"Output file(s): "//trim(outputfile)//".<step>.bp"
+        print '(" Process number        : ",i0," x ",i0," x ",i0)', npx,npy,npz
+        if (common_size) then
+            print '(" Array size per process at first step: ",i0," x ",i0," x ",i0)', ndx,ndy,ndz
+        else
+            print *," Array sizes per processes taken from file: "//trim(inputfile)
+        endif
+
+        if (nproc .ne. npx*npy*npz) then
+            print '(" Error: Number of processors ",i0,"does not match ndx*ndy*ndz=",i0)', nproc, npx*npy*npz
+            call exit(1)
+        endif
+    endif
+
+    !write (*,*) 'rank ', rank, "init completed"
+    !write (nprocstr,'(i0)') nproc
+
+    call writeArray()
+    ! Terminate
+    call MPI_Barrier (app_comm, ierr)
+    call adios_finalize (rank, ierr)
+    !call MPI_Barrier (MPI_COMM_WORLD, ierr)
+    print *,"Writer calls MPI_Finalize"
+    call MPI_Finalize (ierr)
+    print *,"Exit writer code "
+end program genarray
+
+
+!!***************************
+subroutine determineLocalSize(tstep)
+    use genarray_varying_comm
+    implicit none
+    integer :: tstep
+    if (common_size) then
+       ! tstep=1: we are done since we know them from argument
+       ! after that: always increase them by 1
+       if (tstep>1) then
+          ndx = ndx+1
+          ndy = ndy+1
+          ndz = ndz+1
+       endif
+    else
+       ! have to read from file
+       print *, "To be implemented: read sizes from file 1"
+       call exit(2)
+    endif
+    print '(" Array size per process at step ",i0,": ",i0," x ",i0," x ",i0)',tstep,ndx,ndy,ndz
+end subroutine determineLocalSize
+
+!!***************************
+subroutine determineGlobalSize()
+    use genarray_varying_comm
+    implicit none
+    if (common_size) then
+        gndx = npx * ndx
+        gndy = npy * ndy
+        gndz = npz * ndz
+    else
+       ! have to read from file
+       print *, "To be implemented: read sizes from file 2"
+       call exit(2)
+    endif
+end subroutine determineGlobalSize
+
+!!***************************
+subroutine determineOffsets()
+    use genarray_varying_comm
+    implicit none
+    integer :: posx, posy, posz ! position index in the array
+    if (common_size) then
+        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
+        offx = posx * ndx
+        offy = posy * ndy
+        offz = posz * ndz
+    else
+       ! have to read from file
+       print *, "To be implemented: read sizes from file 3"
+       call exit(2)
+    endif
+end subroutine determineOffsets
+
+
+!!***************************
+subroutine generateLocalArray()
+    use genarray_varying_comm
+    implicit none
+    integer :: i,j,k
+    allocate( double_xyz(1:ndx, 1:ndy, 1:ndz) )
+    do k=1,ndz
+        do j=1,ndy
+            do i=1,ndx
+                double_xyz(i,j,k) = 1.0d0*rank
+            enddo
+        enddo
+    enddo
+end subroutine generateLocalArray
+
+
+!!***************************
+subroutine writeArray()
+    use genarray_varying_comm
+    implicit none
+    integer*8 adios_handle, adios_groupsize
+    integer adios_err
+    integer :: tstep
+    character(2) :: mode = "w"
+    include 'mpif.h'
+
+
+    if (rank==0) print '("Writing: "," filename ",14x,"size(GB)",4x,"io_time(sec)",6x,"GB/s")'
+    do tstep=1,timesteps
+        if (tstep > 1) mode = "a"
+        call determineLocalSize(tstep)
+        call determineGlobalSize()
+        call determineOffsets()
+        call generateLocalArray()
+
+        double_xyz = tstep + double_xyz
+        call MPI_BARRIER(app_comm, adios_err)
+        io_start_time = MPI_WTIME()
+        group = "genarray"
+        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, "/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()
+        io_total_time = io_end_time - io_start_time
+        sz = adios_totalsize * nproc/1024.d0/1024.d0/1024.d0 !size in GB
+        gbs = sz/io_total_time
+        if (rank==0) print '("Writing: ",a20,d12.2,2x,d12.2,2x,d12.3)', outputfile,sz,io_total_time,gbs
+        if (tstep<timesteps) call sleep(sleeptime)
+        deallocate (double_xyz)
+     end do
+end subroutine writeArray
+
+
+!!***************************
+subroutine usage()
+    print *, "Usage: genarray  output N  M  K  [infile|nx  ny  nz timesteps sleeptime]"
+    print *, "output: name of output file"
+    print *, "N:      number of processes in X dimension"
+    print *, "M:      number of processes in Y dimension"
+    print *, "K:      number of processes in Z dimension"
+    print *, "nx:     local array size in X dimension per processor"
+    print *, "ny:     local array size in Y dimension per processor"
+    print *, "nz:     local array size in Z dimension per processor"
+    print *, "infile: file that describes nx ny nz for each processor"
+    print *, "timesteps: the total number of timesteps to output" 
+    print *, "sleeptime: the time to sleep (s)"
+end subroutine usage
+
+!!***************************
+subroutine processArgs()
+    use genarray_varying_comm
+
+#ifndef __GFORTRAN__
+#ifndef __GNUC__
+    interface
+         integer function iargc()
+         end function iargc
+    end interface
+#endif
+#endif
+
+    character(len=256) :: npx_str, npy_str, npz_str, ndx_str, ndy_str, ndz_str
+    character(len=256) :: time_str,sleep_str
+    integer :: numargs
+
+    !! process arguments
+    numargs = iargc()
+    !print *,"Number of arguments:",numargs
+    if ( numargs < 5 ) then
+        call usage()
+        call exit(1)
+    endif
+    call getarg(1, outputfile)
+    call getarg(2, npx_str)
+    call getarg(3, npy_str)
+    call getarg(4, npz_str)
+    read (npx_str,'(i5)') npx
+    read (npy_str,'(i5)') npy
+    read (npz_str,'(i5)') npz
+    if ( numargs == 5 ) then
+        call getarg(5, inputfile)
+        ndx = 0
+        ndy = 0
+        ndz = 0
+        common_size = .false.
+    else if (numargs == 9) then
+        call getarg(5, ndx_str)
+        call getarg(6, ndy_str)
+        call getarg(7, ndz_str)
+        read (ndx_str,'(i6)') ndx
+        read (ndy_str,'(i6)') ndy
+        read (ndz_str,'(i6)') ndz
+        inputfile=char(0)
+        common_size = .true.
+        call getarg(8, time_str)
+        call getarg(9, sleep_str)
+        read (time_str,'(i6)') timesteps
+        read (sleep_str,'(i6)') sleeptime
+    else
+        call usage()
+        call exit(1)
+    endif
+
+end subroutine processArgs
diff --git a/examples/staging/stage_write_varyingsize/genarray_varying.xml b/examples/staging/stage_write_varyingsize/genarray_varying.xml
new file mode 100644
index 0000000..f97d871
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/genarray_varying.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<adios-config host-language="Fortran">
+  <adios-group name="genarray" coordination-communicator="group_comm">
+    <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="/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"/>
+        <var name="var2" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var3" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var4" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var5" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var6" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var7" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var8" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+        <var name="var9" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
+    </global-bounds>
+    <attribute name="description" path="/var/double_xyz"
+               value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray" method="DATASPACES">verbose=3</method>
+
+  <buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/staging/stage_write/job.32 b/examples/staging/stage_write_varyingsize/job
similarity index 50%
copy from examples/staging/stage_write/job.32
copy to examples/staging/stage_write_varyingsize/job
index 7b05671..7bdaaaa 100755
--- a/examples/staging/stage_write/job.32
+++ b/examples/staging/stage_write_varyingsize/job
@@ -3,17 +3,29 @@
 #PBS -N genarray
 #PBS -j oe
 #PBS -q debug
-#PBS -l walltime=0:20:00,size=48
+#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
+#cd $PBS_O_WORKDIR
 
-SERVER=/ccs/proj/e2e/dataspaces/sith/pgi/bin/dataspaces_server
+if [ `hostname | cut -c 1-4` == "sith" ]; then
+    source /etc/profile.d/modules.sh
+    module unload PE-pgi PE-intel PE-gnu
+    module load PE-gnu
+    module load szip
+    module load dataspaces/1.4.0
+    module load mxml/2.7
+    module load flexpath/adios-1.7
+    #DATASPACES_DIR=/ccs/proj/e2e/dataspaces/sith/pgi
+fi
 
-WRITEPROC=32
-STAGINGPROC=2
-STAGINGPROC_PER_NODE=2
-READPROC=8
+RUNCMD="mpirun -np"
+#RUNCMD="aprun -n"
+SERVER=$DATASPACES_DIR/bin/dataspaces_server
+
+WRITEPROC=1
+STAGINGPROC=1
+READPROC=1
 let "PROCALL=WRITEPROC+READPROC"
 
 # clean-up previous run
@@ -23,7 +35,7 @@ rm staged.bp genarray.bp
 # Prepare config file for DataSpaces
 echo "## Config file for DataSpaces
 ndim = 3
-dims = 512,512,512
+dims = 20,40,70
 max_versions = 10
 #max_readers =" $READPROC " 
 #lock_type = 2
@@ -31,7 +43,7 @@ max_versions = 10
 
 # Run DataSpaces
 echo "-- Start DataSpaces server "$SERVER" on $STAGINGPROC PEs, -s$STAGINGPROC -c$PROCALL"
-mpirun -np $STAGINGPROC -npernode $STAGINGPROC_PER_NODE $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
@@ -48,15 +60,15 @@ done < conf
 
 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 &
-
 # Start STAGE_WRITE
-echo "-- Start STAGE_WRITE on $READPROC PEs"
-mpirun -np $READPROC ./stage_write genarray.bp staged.bp DATASPACES "enable_collective_read_meta;verbose=4" MPI "" $READPROC 1 1 >& log.stage_write &
+#echo "-- Start STAGE_WRITE on $READPROC PEs"
+#$RUNCMD $READPROC ./stage_write genarray.bp staged.bp DATASPACES "verbose=4;poll_interval=100" MPI "" $READPROC 1 1 >& log.stage_write &
+
+# Start GENARRAY
+#echo "-- Start GENARRAY on $WRITEPROC PEs"
+#$RUNCMD $WRITEPROC ./genarray_varying genarray.bp $WRITEPROC 1 1 16 32 64 5 10 >& log.genarray
 
-echo "-- Wait until all applications exit. Run ./check.sh to see status"
+#echo "-- Wait until all applications exit. Run ./check.sh to see status"
 wait
 rm -f conf
 
diff --git a/examples/staging/stage_write/job.32 b/examples/staging/stage_write_varyingsize/job.32
similarity index 76%
rename from examples/staging/stage_write/job.32
rename to examples/staging/stage_write_varyingsize/job.32
index 7b05671..90b78c3 100755
--- a/examples/staging/stage_write/job.32
+++ b/examples/staging/stage_write_varyingsize/job.32
@@ -8,7 +8,18 @@
 
 cd $PBS_O_WORKDIR
 
-SERVER=/ccs/proj/e2e/dataspaces/sith/pgi/bin/dataspaces_server
+if [ `hostname | cut -c 1-4` == "sith" ]; then
+    source /etc/profile.d/modules.sh
+    module unload PE-pgi PE-intel PE-gnu
+    module load PE-gnu
+    module load szip
+    module load dataspaces/1.4.0
+    module load mxml/2.7
+    module load flexpath/adios-1.7
+    #DATASPACES_DIR=/ccs/proj/e2e/dataspaces/sith/pgi
+fi
+
+SERVER=$DATASPACES_DIR/bin/dataspaces_server
 
 WRITEPROC=32
 STAGINGPROC=2
@@ -50,7 +61,7 @@ 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 &
+mpirun -np $WRITEPROC ./genarray_varying genarray.bp $WRITEPROC 1 1 16 32 64 5 10 >& log.genarray &
 
 # Start STAGE_WRITE
 echo "-- Start STAGE_WRITE on $READPROC PEs"
diff --git a/examples/staging/stage_write_varyingsize/make.settings b/examples/staging/stage_write_varyingsize/make.settings
new file mode 100644
index 0000000..3f22e5e
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/make.settings
@@ -0,0 +1,19 @@
+TARGET=gnu
+
+## Set ADIOS_DIR here or before doing make
+override ADIOS_DIR=/ccs/proj/e2e/${USER}/ADIOS/sith.${TARGET}
+#override ADIOS_DIR=/sw/redhat6/adios/1.7.0/rhel6_pgi13.4
+#override ADIOS_DIR=/sw/redhat6/adios/1.6.0/rhel6_pgi13.4
+
+## 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_varyingsize/stage_write.c
similarity index 89%
copy from examples/staging/stage_write/stage_write.c
copy to examples/staging/stage_write_varyingsize/stage_write.c
index c07f04b..d877513 100644
--- a/examples/staging/stage_write/stage_write.c
+++ b/examples/staging/stage_write_varyingsize/stage_write.c
@@ -51,11 +51,12 @@ int64_t    fh;     // ADIOS output file handle
 int64_t     gh;     // ADIOS group for output definitions
 uint64_t    write_total; // data size written by one processor
 uint64_t    largest_block; // the largest variable block one process reads
-char     ** group_namelist; // name of ADIOS group
+char       *group_name; // name of ADIOS group
 char       *readbuf; // read buffer
 int         decomp_values[10];
 
 
+void cleanup_step ();
 int process_metadata(int step);
 int read_write(int step);
 
@@ -194,8 +195,8 @@ int main (int argc, char ** argv)
     adios_init_noxml(comm);
 
     print0 ("Waiting to open stream %s...\n", infilename);
-    f = adios_read_open_stream (infilename, read_method, comm, 
-                                             ADIOS_LOCKMODE_ALL, timeout_sec);
+    f = adios_read_open (infilename, read_method, comm, 
+                         ADIOS_LOCKMODE_ALL, timeout_sec);
     if (adios_errno == err_file_not_found) 
     {
         print ("rank %d: Stream not found after waiting %d seconds: %s\n", 
@@ -236,6 +237,7 @@ int main (int argc, char ** argv)
 
             // advance to 1) next available step with 2) blocking wait 
             curr_step = f->current_step; // save for final bye print
+            cleanup_step();
             adios_advance_step (f, 0, timeout_sec);
 
             if (adios_errno == err_end_of_stream) 
@@ -279,6 +281,26 @@ typedef struct {
 
 VarInfo * varinfo;
 
+// cleanup all info from previous step except
+// do
+//   remove all variable and attribute definitions from output group
+//   free all varinfo (will be inquired again at next step)
+//   free read buffer (required size may change at next step)
+// do NOT 
+//   destroy group
+//
+void cleanup_step ()
+{
+    int i;
+    for (i=0; i<f->nvars; i++) {
+        adios_free_varinfo(varinfo[i].v);
+    }
+    free (varinfo);
+    adios_delete_vardefs (gh);
+    adios_delete_attrdefs (gh);
+    free (readbuf);
+}
+
 int process_metadata(int step)
 {
     int retval = 0;
@@ -286,22 +308,18 @@ int process_metadata(int step)
     char gdims[256], ldims[256], offs[256];
     uint64_t sum_count;
     ADIOS_VARINFO *v; // shortcut pointer
+    char     ** group_namelist; // name(s) of ADIOS group(s)
 
-    if (step > 1)
+    if (step == 1)
     {
-        // right now, nothing to prepare in later steps
-        print("Step %d. return immediately\n",step);
-        return 0;
+        /* First step processing */
+        // get groupname of stream, then declare for output
+        adios_get_grouplist(f, &group_namelist);
+        group_name = strdup (group_namelist[0]);
+        print0("Group name is %s\n", group_name);
+        adios_declare_group(&gh,group_name,"",adios_flag_yes);
     }
 
-    /* First step processing */
-
-    // get groupname of stream, then declare for output
-    adios_get_grouplist(f, &group_namelist);
-    print0("Group name is %s\n", group_namelist[0]);
-    adios_declare_group(&gh,group_namelist[0],"",adios_flag_yes);
-
-
     varinfo = (VarInfo *) malloc (sizeof(VarInfo) * f->nvars);
     if (!varinfo) {
         print("ERROR: rank %d cannot allocate %llu bytes\n", 
@@ -355,8 +373,11 @@ int process_metadata(int step)
                 "but max is set to %d\n", rank, bufsize, max_write_buffer_size);
         return 1;
     }
-    print0 ("Rank %d: allocate %llu MB for output buffer\n", rank, bufsize/1048576+1);
-    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, bufsize/1048576+1); 
+    if (step == 1)
+    {
+        print0 ("Rank %d: allocate %llu MB for output buffer\n", rank, bufsize/1048576+1);
+        adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, bufsize/1048576+1); 
+    }
 
     // allocate read buffer
     bufsize = largest_block + 128;
@@ -369,12 +390,15 @@ int process_metadata(int step)
     readbuf = (char *) malloc ((size_t)bufsize);
     if (!readbuf) {
         print ("ERROR: rank %d: cannot allocate %llu bytes for read buffer\n",
-               rank, bufsize);
+                rank, bufsize);
         return 1;
     }
 
-    // Select output method
-    adios_select_method (gh, wmethodname, wmethodparams, "");
+    if (step == 1)
+    {
+        // Select output method
+        adios_select_method (gh, wmethodname, wmethodparams, "");
+    }
 
     // Define variables for output based on decomposition
     char *vpath, *vname;
@@ -392,15 +416,15 @@ int process_metadata(int step)
                 int64s_to_str (v->ndim, varinfo[i].start, offs);
 
                 print ("rank %d: Define variable path=\"%s\" name=\"%s\"  "
-                       "gdims=%s  ldims=%s  offs=%s\n", 
-                       rank, vpath, vname, gdims, ldims, offs);
+                        "gdims=%s  ldims=%s  offs=%s\n", 
+                        rank, vpath, vname, gdims, ldims, offs);
 
                 adios_define_var (gh, vname, vpath, v->type, ldims, gdims, offs);
             }
             else 
             {
                 print ("rank %d: Define scalar path=\"%s\" name=\"%s\"\n",
-                       rank, vpath, vname);
+                        rank, vpath, vname);
 
                 adios_define_var (gh, vname, vpath, v->type, "", "", "");
             }
@@ -445,7 +469,7 @@ int read_write(int step)
     uint64_t total_size;
 
     // open output file
-    adios_open (&fh, group_namelist[0], outfilename, (step==1 ? "w" : "a"), comm);
+    adios_open (&fh, group_name, outfilename, (step==1 ? "w" : "a"), comm);
     adios_group_size (fh, write_total, &total_size);
     
     for (i=0; i<f->nvars; i++) 
@@ -456,7 +480,7 @@ int read_write(int step)
             ADIOS_SELECTION *sel = adios_selection_boundingbox (varinfo[i].v->ndim,
                     varinfo[i].start, 
                     varinfo[i].count);
-            adios_schedule_read_byid (f, sel, i, 1, 1, readbuf);
+            adios_schedule_read_byid (f, sel, i, 0, 1, readbuf);
             adios_perform_reads (f, 1);   
 
 
diff --git a/examples/staging/stage_write_varyingsize/test_decompose.c b/examples/staging/stage_write_varyingsize/test_decompose.c
new file mode 100644
index 0000000..26146ff
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/test_decompose.c
@@ -0,0 +1,134 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "decompose.h"
+#include "utils.h"
+
+int ndim, nproc;
+uint64_t *dims;
+int *np;
+int rank; // unused, required by print0 in utils.h
+
+void printUsage(char *prgname)
+{
+    print0("Usage: %s N M dim1 ... dimN np1 ... npN\n"
+           "    N           Number of dimensions\n"
+           "    M           Number of processes\n"
+           "    dim1..dimN  Dimensions\n"
+           "    np1..npN    list of decomposition numbers e.g. 32 8 4\n"
+           "            Decomposition values in each dimension of an array\n"
+           "            The product of these number must be less then the number\n"
+           "            of processes. Processes whose rank is higher than the\n"
+           "            product, will not write anything.\n"
+           "               Arrays with less dimensions than the number of values,\n"
+           "            will be decomposed with using the appropriate number of\n"
+           "            values.\n"
+        ,prgname);
+}
+
+int processArgs(int argc, char ** argv)
+{   
+    int i, j, nd, prod; 
+    char *end;
+
+    if (argc < 3) {
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    errno = 0;
+    ndim = strtol(argv[1], &end, 10);
+    if (errno || (end != 0 && *end != '\0')) {
+        print0 ("ERROR: Invalid decomposition number in argument 1: '%s'\n", argv[j]);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    errno = 0;
+    nproc = strtol(argv[2], &end, 10);
+    if (errno || (end != 0 && *end != '\0')) {
+        print0 ("ERROR: Invalid decomposition number in argument 2: '%s'\n", argv[j]);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    if (argc != 3+2*ndim) {
+        print0 ("ERROR: Expected number of arguments is %d\n", 2*ndim+2);
+        printUsage (argv[0]);
+        return 1;
+    }
+    
+    dims = (uint64_t*) malloc (sizeof(uint64_t) * ndim);
+    np   = (int*) malloc (sizeof(int) * ndim);
+
+    nd = 0;
+    j = 3;
+    for (nd=0; nd < ndim; nd++) { // get ndim dimensions
+        errno = 0;
+        dims[nd] = strtoll(argv[j], &end, 10);
+        if (errno || (end != 0 && *end != '\0')) {
+            print0 ("ERROR: Invalid decomposition number in argument %d: '%s'\n",
+                    j, argv[j]);
+            printUsage(argv[0]);
+            return 1;
+        }
+        j++;
+    }
+
+    for (nd=0; nd < ndim; nd++) { // get ndim decomposition values
+        errno = 0;
+        np[nd] = strtoll(argv[j], &end, 10);
+        if (errno || (end != 0 && *end != '\0')) {
+            print0 ("ERROR: Invalid decomposition number in argument %d: '%s'\n",
+                    j, argv[j]);
+            printUsage(argv[0]);
+            return 1;
+        }
+        j++;
+    }
+
+    prod = 1;
+    for (i=0; i<ndim; i++) {
+        prod *= np[i];
+    }
+
+    if (prod > nproc) {
+        print0 ("ERROR: Product of decomposition numbers %d > number of processes %d\n",
+                prod, nproc);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    return 0;
+}
+
+int main (int argc, char ** argv)
+{
+    char ints[256];
+    uint64_t count[10], start[10], totalsize;
+    int i, nd;
+
+    if (processArgs(argc, argv)) 
+        return 1;
+
+    print("# of proc: %d\n", nproc);
+    ints_to_str(ndim, np, ints);
+    print("decomposition: %s\n", ints);
+
+    for (nd = ndim; nd > 0; nd--)
+    {
+        int64s_to_str(nd, dims, ints);
+        print("--------------------------------------------\n");
+        print("%d  dimensions: %s\n", nd, ints);
+        for (i=0; i<nproc; i++) {
+            decompose (nproc, i, nd, dims, np, count, start, &totalsize);
+        }
+    }
+
+    return 0;
+}
+
+
diff --git a/examples/staging/stage_write_varyingsize/utils.c b/examples/staging/stage_write_varyingsize/utils.c
new file mode 100644
index 0000000..c815940
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/utils.c
@@ -0,0 +1,211 @@
+/* 
+ * Staged write of ADIOS files using a staging method
+ *
+ * Copyright (c) 2008 - 2012.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include "utils.h"
+
+void ints_to_str (int n, int *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!n) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%d", values[0]);
+    for (i=1; i<n; i++)
+    {
+        sprintf (v,",%d", values[i]);
+        strcat (s,v);
+    }
+}
+
+void int64s_to_str (int n, uint64_t *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!n) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%llu", values[0]);
+    for (i=1; i<n; i++)
+    {
+        sprintf (v,",%llu", values[i]);
+        strcat (s,v);
+    }
+}
+
+
+const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx)
+{
+    static char s [100];
+    s [0] = 0;
+
+
+    switch (type)
+    {
+        case adios_unsigned_byte:
+            sprintf (s, "%u", ((uint8_t *) data)[idx]);
+            break;
+
+        case adios_byte:
+            sprintf (s, "%d", ((int8_t *) data)[idx]);
+            break;
+
+        case adios_short:
+            sprintf (s, "%hd", ((int16_t *) data)[idx]);
+            break;
+
+        case adios_unsigned_short:
+            sprintf (s, "%hu", ((uint16_t *) data)[idx]);
+            break;
+
+        case adios_integer:
+            sprintf (s, "%d", ((int32_t *) data)[idx]);
+            break;
+
+        case adios_unsigned_integer:
+            sprintf (s, "%u", ((uint32_t *) data)[idx]);
+            break;
+
+        case adios_long:
+            sprintf (s, "%lld", ((int64_t *) data)[idx]);
+            break;
+
+        case adios_unsigned_long:
+            sprintf (s, "%llu", ((uint64_t *) data)[idx]);
+            break;
+
+        case adios_real:
+            sprintf (s, "%g", ((float *) data)[idx]);
+            break;
+
+        case adios_double:
+            sprintf (s, "%lg", ((double *) data)[idx]);
+            break;
+
+        case adios_long_double:
+            sprintf (s, "%Lg", ((long double *) data)[idx]);
+            break;
+
+        case adios_string:
+            return (char*) ((char *)data+idx);
+            break;
+
+        case adios_complex:
+            sprintf (s, "(%g, %g)", 
+                    ((float *) data)[2*idx], ((float *) data)[2*idx+1]);
+            break;
+
+        case adios_double_complex:
+            sprintf (s, "(%lg, %lg)", 
+                    ((double *) data)[2*idx], ((double *) data)[2*idx+1]);
+            break;
+        
+        default:
+            sprintf (s, "unknown");
+            break;
+    }
+
+    return s;
+}
+
+
+
+
+void getbasename (char *path, char **dirname, char **basename)
+{
+    char *work, *ptr;
+
+    work = strdup(path);
+    if (work[strlen(work)-1] == '/' && strlen(work)>1)
+        work[strlen(work)-1] = '\0';
+
+    ptr = rindex(work, '/');
+    if (ptr && ptr != work) {
+        // found a / and but not the beginning / of a full path
+        ptr[0] = 0;
+        *dirname = strdup(work);
+        ptr[0] = '/';
+        *basename = strdup(ptr+1);
+    } else if (ptr == work) {
+        // found / as the first character 
+        *dirname = strdup("/");
+        *basename = strdup(ptr+1);
+    } else {
+        *dirname = NULL; //strdup(".");
+        *basename = strdup(work);
+    }
+    free(work);
+}
+
+
+bool file_exists (char * path)
+{
+    struct stat sb;
+    int i = stat ( path, &sb );
+    if ( i == 0 )
+	/* File found */
+	return true;
+    return false;
+}
+
+bool is_dir(char *path) {
+     struct stat sb;
+     if ( !stat( path, &sb) ) {
+         if ( sb.st_mode & S_IFDIR ) {
+             //if (verbose) printf("isDir( %s ) = true\n", path);
+             return  true;
+         }
+     } /* else {
+         // for whatever reason, stat cannot be retrieved
+         // so just say here, it is not a directory 
+        retval = false;
+     }*/
+     return false;
+}
+
+int createdir_recursive( char* path)
+{
+    int res;
+    char *dirs, *base;
+    /*printf(" called mkdir %s\n", path);*/
+    getbasename(path, &dirs, &base);
+    if ( dirs != NULL)  {
+        if ( !is_dir(dirs) ) {
+	    /*printf(" dirs=%s  base=%s\n", dirs, base);*/
+            res = createdir_recursive(dirs);
+	} else res = 0;
+        free(dirs);
+        if (res) return res;
+    }
+    if (file_exists(path))
+        res = 0;
+    else
+        res = mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+    if (res) {
+        if (errno == EEXIST) {
+            print("Concurrency error: createdir %s failed: %s\n", path, strerror(errno));
+            print("Some other process created this dir already during this function call\n");
+            res = 0;
+        } else {
+            print("createdir %s failed: %s\n", path, strerror(errno));
+        }
+    }
+    //else
+    //   print("createdir %s succeeded\n", path);
+
+    free(base);
+    return (res);
+}
+
diff --git a/examples/staging/stage_write_varyingsize/utils.h b/examples/staging/stage_write_varyingsize/utils.h
new file mode 100644
index 0000000..21196aa
--- /dev/null
+++ b/examples/staging/stage_write_varyingsize/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/runconf b/runconf
index 7a12ec7..9ca8d6e 100755
--- a/runconf
+++ b/runconf
@@ -18,8 +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. for user $USER"
-    source /etc/profile.d/modules.sh
+    echo "Configure on SITH for $TARGET env. for user ${USER}"
     module unload hdf5
     module unload netcdf
     module unload PE-gnu
@@ -28,8 +27,9 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     module unload PE-pathscale
     module unload pgi gcc intel pathscale
     module unload python
+    module unload mxml
     module load PE-$TARGET
-    module load mxml
+    module load mxml/2.9
     MXMLDIR=$MXML_DIR
     module unload mxml
     module load python
@@ -54,25 +54,31 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     module unload netcdf
     #module load szip
     module load bzip2
-    module load dataspaces/1.4.0
+    #module load dataspaces/1.4.0
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
+    WITHFLEX=""
+    WITHFGR=""
+    WITHFASTBIT=""
     if [ "$TARGET" == "pgi" ]; then
         export CC=pgcc
         export CXX=pgCC
         export FC=pgf90
         WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
+        WITHFGR="--with-fgr=/ccs/proj/e2e/qliu/tap" 
+        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.7.2"
+        DATASPACES_DIR="/ccs/home/hbui/usr/software/dataspaces-dev"
     elif [ "$TARGET" == "gnu" ]; then
         export CC=gcc
         export CXX=g++
         export FC=gfortran
         WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
+        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.7.2"
     elif [ "$TARGET" == "intel" ]; then
         export CC=icc
         export CXX=icpc
         export FC=ifort
-        WITHFLEX=""
     else
         echo "TARGET must be pgi or gnu or intel"
         exit 1
@@ -80,7 +86,7 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-g -fPIC" 
-    $SRCDIR/configure --prefix=/ccs/proj/e2e/$USER/ADIOS/sith.$TARGET \
+    $SRCDIR/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/sith.$TARGET \
         --config-cache \
         --enable-dependency-tracking \
         --enable-research-transports \
@@ -88,21 +94,23 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         --with-mxml=$MXMLDIR \
         --with-hdf5=${SEQ_HDF5_DIR} \
         --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        --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-zlib=/lib64 \
+        --with-zlib \
         --with-bzip2=$BZIP2_DIR \
         --with-dataspaces=$DATASPACES_DIR \
+        --with-dimes=$DATASPACES_DIR \
         $WITHFLEX \
+        $WITHFGR \
+        $WITHFASTBIT \
         --with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
         --with-isobar=/ccs/proj/e2e/ncsu/sith.gnu \
-        --with-fgr=/ccs/proj/e2e/qliu/tap \
         --with-glib=/ccs/proj/e2e/qliu/glib
         #--with-szip=$SZIP_DIR \
+        #--with-phdf5=${PAR_HDF5_DIR} \
+        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
+        #--with-nc4par=${PAR_NC_DIR} \
+        #--with-nc4par-libs="${PAR_NC_CLIB}" \
         #--with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
         #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
         #--enable-shared --disable-static
@@ -111,14 +119,20 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         #--with-datatap=/ccs/home/habbasi/work/ewok/
         #--enable-datatap=ib
 
-elif [ `hostname | cut -c 1-4` == "yona" ]; then
+elif [ `hostname | cut -c 1-4` == "rhea" ]; then
 
     ########
-    # Yona #
+    # Rhea #
     ########
-    TARGET=pgi
-    echo "Configure on Yona for $TARGET env."
     source /etc/profile.d/modules.sh
+    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
+
+    if [ -z "$TARGET" ]; then
+        echo "Cannot determine Programming environment. Exit"
+        exit 1
+    fi
+    echo "Configure on Rhea for $TARGET env. for user ${USER}"
+    module unload mxml
     module unload hdf5
     module unload netcdf
     module unload PE-gnu
@@ -126,29 +140,34 @@ elif [ `hostname | cut -c 1-4` == "yona" ]; then
     module unload PE-intel
     module unload PE-pathscale
     module unload pgi gcc intel pathscale
-    #module unload python
+    module unload python
     module load PE-$TARGET
     module load mxml
-    #module load python
+    MXMLDIR=$MXML_DIR
+    module unload mxml
+    module load python
     # Use both seq hdf5 (for utils) and 
     #   parallel hdf5 (for PHDF5 method)
-    module load hdf5/1.8.5
+    module load hdf5/1.8.11
     SEQ_HDF5_DIR=$HDF5_DIR
     SEQ_HDF5_CLIB=$HDF5_CLIB
     module unload hdf5
-    #module load hdf5/1.8.5_par
-    #PAR_HDF5_DIR=$HDF5_DIR
-    #PAR_HDF5_CLIB=$HDF5_CLIB
-    #module unload hdf5
+    module load hdf5-parallel/1.8.11
+    PAR_HDF5_DIR=$HDF5_DIR
+    PAR_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
     # Seq. and Parallel NetCDF 4 
-    module load netcdf/3.6.2
+    module load netcdf/4.1.3
     SEQ_NC_DIR=$NETCDF_DIR
     SEQ_NC_CLIB=$NETCDF_CLIB
     module unload netcdf
-    #module load netcdf/4.1.1_par
+    #module load netcdf/4.1.3_par
     #PAR_NC_DIR=$NETCDF_DIR
     #PAR_NC_CLIB=$NETCDF_CLIB
     #module unload netcdf
+    #module load szip
+    #module load bzip2
+    #module load dataspaces/1.4.0
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
@@ -156,76 +175,86 @@ elif [ `hostname | cut -c 1-4` == "yona" ]; then
         export CC=pgcc
         export CXX=pgCC
         export FC=pgf90
+        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "gnu" ]; then
         export CC=gcc
         export CXX=g++
         export FC=gfortran
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
+        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "intel" ]; then
         export CC=icc
         export CXX=icpc
         export FC=ifort
+        WITHFLEX=""
     else
         echo "TARGET must be pgi or gnu or intel"
         exit 1
     fi
         
+    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-g -fPIC" 
-    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
+    $SRCDIR/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/rhea.$TARGET \
+        --config-cache \
         --enable-dependency-tracking \
-        --enable-research-transports  \
-        --with-hdf5=${SEQ_HDF5_DIR} \
-        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        --with-netcdf=${SEQ_NC_DIR} \
-        --with-netcdf-libs="${SEQ_NC_CLIB}" \
-        --with-lustre=/usr \
-        --without-datatap --without-infiniband
+        --enable-research-transports \
+        --with-lustre \
+        --with-mxml=$MXMLDIR 
+        #--with-hdf5=${SEQ_HDF5_DIR} \
+        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
         #--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
+        #--with-zlib \
+        #--with-bzip2=$BZIP2_DIR \
+        #--with-dataspaces=$DATASPACES_DIR \
+        #$WITHFLEX \
+        #--with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
+        #--with-isobar=/ccs/proj/e2e/ncsu/sith.gnu \
+        #--with-fgr=/ccs/proj/e2e/qliu/tap \
+        #--with-glib=/ccs/proj/e2e/qliu/glib
+        #--with-szip=$SZIP_DIR \
 
+elif [ `hostname | cut -c 1-4` == "yona" ]; then
 
-elif [ `hostname | cut -c 1-4` == "lens" ]; then
-    source /etc/profile.d/modules.sh
+    ########
+    # Yona #
+    ########
     source /etc/profile.d/modules.sh
     TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
-
-    if [ -z "$TARGET" ]; then
-        echo "Cannot determine Programming environment. Exit"
-        exit 1
-    fi
-    echo "Configure on LENS for $TARGET env."
+    echo "Configure on Yona for $TARGET env."
     module unload hdf5
     module unload netcdf
     module unload PE-gnu
     module unload PE-pgi
+    module unload PE-intel
     module unload PE-pathscale
-    module unload pgi
+    module unload pgi gcc intel pathscale
+    #module unload python
     module load PE-$TARGET
     module load mxml
+    #module load python
     # Use both seq hdf5 (for utils) and 
     #   parallel hdf5 (for PHDF5 method)
-    module load hdf5/1.8.6
+    module load hdf5/1.8.5
     SEQ_HDF5_DIR=$HDF5_DIR
     SEQ_HDF5_CLIB=$HDF5_CLIB
     module unload hdf5
-    #module load hdf5/1.8.6_ompi1.4.2
+    #module load hdf5/1.8.5_par
     #PAR_HDF5_DIR=$HDF5_DIR
     #PAR_HDF5_CLIB=$HDF5_CLIB
     #module unload hdf5
-    # Seq NetCDF 3 for bp2ncd
-    #module load netcdf/3.6.2
+    # Seq. and Parallel NetCDF 4 
+    module load netcdf/3.6.2
+    SEQ_NC_DIR=$NETCDF_DIR
+    SEQ_NC_CLIB=$NETCDF_CLIB
+    module unload netcdf
+    #module load netcdf/4.1.1_par
+    #PAR_NC_DIR=$NETCDF_DIR
+    #PAR_NC_CLIB=$NETCDF_CLIB
+    #module unload netcdf
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
@@ -233,28 +262,50 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
         export CC=pgcc
         export CXX=pgCC
         export FC=pgf90
-        module switch pgi pgi/10.5
     elif [ "$TARGET" == "gnu" ]; then
         export CC=gcc
         export CXX=g++
         export FC=gfortran
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=pgcc
+        export CXX=pgCC
+        export FC=pgf90
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=icc
+        export CXX=icpc
+        export FC=ifort
     else
-        echo "TARGET must be pgi or gnu"
+        echo "TARGET must be pgi or gnu or intel"
         exit 1
     fi
-
-    export CFLAGS="-g -fPIC"
-    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/lens.$TARGET \
+        
+    export CFLAGS="-g -fPIC" 
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
         --enable-dependency-tracking \
         --enable-research-transports  \
         --with-hdf5=${SEQ_HDF5_DIR} \
         --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        --without-datatap
-        #--with-mxml=/ccs/proj/e2e/pnorbert/mxml \
+        --with-netcdf=${SEQ_NC_DIR} \
+        --with-netcdf-libs="${SEQ_NC_CLIB}" \
+        --with-lustre=/usr \
+        --without-datatap --without-infiniband
+        #--with-phdf5=${PAR_HDF5_DIR} \
+        #--with-phdf5-libs="${PAR_HDF5_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-5` == "titan" ]; then
 
     BUILD_STAGING=true
+    #source /opt/modules/default/etc/modules.sh
     TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
     if [ $BUILD_STAGING == "false" ]; then
     
@@ -264,10 +315,8 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #TARGET=pgi
         echo "Configure on TITAN (XK7) 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
@@ -289,7 +338,7 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         # use the two lines below for openmpi
         #export CC=mpicc
         #export FC=mpif90
-        CFLAGS="-g -fPIC -O0" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/xk6.$TARGET \
+        CFLAGS="-g -fPIC -O0" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/xk6.$TARGET \
             --enable-dependency-tracking \
             --with-lustre
             #--with-fgr=/ccs/proj/e2e/qliu/tap \
@@ -314,13 +363,13 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         export CC=cc
         export FC=ftn
         export CXX=CC
-        source /opt/modules/default/etc/modules.sh
         module unload szip
         module unload hdf5
         module unload netcdf
         module unload hdf5-parallel
         module unload netcdf-hdf5parallel
         module unload mxml
+        module unload fastbit
         module unload PrgEnv-gnu
         module unload PrgEnv-pgi
         module unload PrgEnv-intel
@@ -335,14 +384,18 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         unset LDFLAGS
         if [ "$TARGET" == "pgi" ]; then
             #module swap pgi pgi/11.8.0
-            # NSSI needs -pgcpplibs flag 
+            # FASTBIT needs libstdc++ and -pgcpplibs flag
             export LDFLAGS="-pgcpplibs" 
+            export EXTRA_LIBS="/opt/gcc/4.8.2/snos/lib64/libstdc++.a"
             #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
             WITHFLEX=""
         elif [ "$TARGET" == "gnu" ]; then
-            # NSSI/FLEXPATH needs libstdc++
+            # NSSI/FLEXPATH/FASTBIT needs libstdc++
+            export LDFLAGS="-pgcpplibs" 
             export EXTRA_LIBS="${GCC_PATH}/snos/lib64/libstdc++.a"
             WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/titan/$TARGET"
+            # FASTBIT needs libstdc++
+            #export EXTRA_LIBS="/opt/gcc/4.8.2/snos/lib64/libstdc++.a"
             #module swap gcc gcc/4.4.4
             #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
         fi
@@ -352,22 +405,28 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #module load netcdf-hdf5parallel
         module load szip
         #module load papi
-        module load mxml
+        module load mxml/2.9
+        module load fastbit
         # 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" 
-        ${SRCDIR}/configure --prefix=/ccs/proj/e2e/$USER/ADIOS/xk6.$TARGET \
+        LIBS="$EXTRA_LIBS" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/xk6.$TARGET \
         --enable-dependency-tracking \
+        --disable-maintainer-mode \
         --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-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
         --with-dataspaces=$DATASPACES_DIR \
         --with-dimes=$DATASPACES_DIR \
         $WITHFLEX \
-        --with-lustre
+        --with-fastbit=$FASTBIT_DIR \
+        --with-lustre \
+        --disable-timers --disable-timer-events \
+        --with-zlib --with-bzip2 
 
+        #--enable-skel-timing
         #--with-fgr=/ccs/proj/e2e/qliu/tap \
         #--with-glib=/ccs/proj/e2e/qliu/glib \
         #--with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
@@ -388,13 +447,13 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
       #################
       # EOS Cray XC30 #
       #################
+      #source /opt/modules/default/etc/modules.sh
       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
@@ -426,7 +485,7 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
           --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-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
             
 
 elif [ `hostname | cut -c 1-7` == "chester" ]; then
@@ -434,13 +493,12 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       ###############
       # Chester XK6 #
       ###############
+      #source /opt/modules/default/etc/modules.sh
       TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
       echo "Configure on Chester (XK6) 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
@@ -475,14 +533,16 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       #module load xt-papi
       module load mxml
       module load pmi
+      module load rca
       # use the two lines below for openmpi
       #export CC=mpicc
       #export FC=mpif90
-      CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/chester.$TARGET \
+      CFLAGS="-g -fPIC" LDFLAGS="$CRAY_RCA_POST_LINK_OPTS" \
+      ${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 \
+          --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
+          --with-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
           --with-dataspaces=$DATASPACES_DIR \
           --with-dimes=$DATASPACES_DIR \
           $FLEXPATH \
@@ -496,202 +556,9 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
 #            --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 \
+#          --with-cray-ugni-incdir=/opt/cray/gni-headers/2.1-1.0400.4351.3.1.gem/include \
             
 
-elif [ `hostname | cut -c 1-5` == "smoky" ]; then
-
-    #########
-    # Smoky #
-    #########
-    echo "Configure on SMOKY"
-    source /etc/profile.d/modules.sh
-    module unload hdf5
-    module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-intel
-    module unload PE-pathscale
-    module unload pgi gcc intel pathscale
-    TARGET=pgi
-    module load PE-$TARGET
-    # Use both seq hdf5 (for utils) and 
-    #   parallel hdf5 (for PHDF5 method)
-    #module load hdf5/1.8.5
-    #SEQ_HDF5_DIR=$HDF5_DIR
-    #SEQ_HDF5_DIR=/sw/smoky/hdf5/1.8.5/centos5.5_pgi10.4
-    #SEQ_HDF5_CLIB=$HDF5_CLIB
-    #module unload hdf5/1.8.5
-    #module load hdf5/1.8.5_ompi1.4.2
-    #PAR_HDF5_DIR=$HDF5_DIR
-    #PAR_HDF5_DIR=/sw/smoky/hdf5/1.8.5/centos5.5_pgi10.4_ompi1.4.2
-    #PAR_HDF5_CLIB=$HDF5_CLIB
-    export MPICC=mpicc
-    export MPICXX=mpiCC
-    export MPIFC=mpif90
-    if [ "$TARGET" == "pgi" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=icc
-        export CXX=icpc
-        export FC=ifort
-    else
-        echo "TARGET must be pgi or gnu"
-        exit 1
-    fi
-        
-    export CFLAGS="-g -fPIC" 
-    ${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 \
-        --without-hdf5 --without-phdf5 \
-        --without-netcdf --without-nc4par \
-        --with-lustre=/usr \
-        --without-datatap --without-infiniband \
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
-        #--with-hdf5=${SEQ_HDF5_DIR} \
-        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        #--with-netcdf=${SEQ_NC_DIR} \
-        #--with-netcdf-libs="${SEQ_NC_CLIB}" \
-        #--with-nc4par=${PAR_NC_DIR} \
-        #--with-nc4par-libs="${PAR_NC_CLIB}" \
-
-
-elif [ `hostname | cut -c 1-6` == "jaguar" ]; then
-
-    BUILD_STAGING=false
-    if [ $BUILD_STAGING == "false" ]; then
-    
-        ##########
-        # Jaguar #
-        ##########
-        TARGET=pgi
-        echo "Configure on JAGUAR (XT5) 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 xt-papi
-        module load PrgEnv-$TARGET
-        module swap xtpe-interlagos xtpe-istanbul
-        #module load szip
-        #module load xt-papi
-        module load mxml
-        # use the two lines below for openmpi
-        #export CC=mpicc
-        #export FC=mpif90
-        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 \
-            --with-phdf5=/opt/cray/hdf5-parallel/1.8.7/pgi/109 \
-            --without-portals
-#            --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 \
-            
-    else 
-    
-        ##########
-        # Jaguar #
-        ##########
-        TARGET=pgi
-        echo "Configure on JAGUAR 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
-        module unload netcdf
-        module unload hdf5-parallel
-        module unload netcdf-hdf5parallel
-        module unload PrgEnv-gnu
-        module unload PrgEnv-pgi
-        module unload PrgEnv-intel
-        module unload PrgEnv-cray
-        module unload xt-papi
-        #module unload xtpe-quadcore
-        module load PrgEnv-$TARGET
-        if [ "$TARGET" == "pgi" ]; then
-            module swap pgi pgi/10.4.0
-            # NSSI needs -pgcpplibs flag 
-            export LDFLAGS="-pgcpplibs" 
-            WITHDART="--with-dart=/sw/xt5/adios/1.2.1/cnl2.2_pgi10.4/spaces"
-        elif [ "$TARGET" == "gnu" ]; then
-            # NSSI needs libstdc++
-            export EXTRA_LIBS="/opt/gcc/4.4.4/snos/lib64/libstdc++.a"
-            module swap gcc gcc/4.4.4
-            WITHDART="--with-dart=/sw/xt5/adios/1.2.1/cnl2.2_gnu4.4.4/spaces"
-        else
-            WITHDART=""
-        fi
-     
-        # NOTE hdf5-parallel module does not work with C++ compiler
-        #module load hdf5-parallel
-        #module load netcdf-hdf5parallel
-        module load szip
-        module load xt-papi
-        module load mxml
-        # 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" 
-        #${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} \
-        --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 \
-        $WITHDART \
-        --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 \
-    
-    fi
-    
-elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
-    #####################
-    # Intrepid BlueGene #
-    #####################
-    echo "Configure on Intrepid (BlueGene)"
-    export MPICC=mpixlc_r
-    export MPIFC=mpixlf90
-    export CFLAGS=""
-    export FC=xlf90
-    export CC=xlc_r
-
-    ${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  #
@@ -730,45 +597,15 @@ elif [ `hostname -f | cut -c 1-5` == "vesta" ]; then
             --with-mxml=/home/qliu/mxml \
             --without-datatap --without-infiniband --with-bgq
 
-elif [ `hostname | cut -c 1-4` == "euge" ]; then
-    ###################
-    # Eugene BlueGene #
-    ###################
-    echo "Configure on Eugene (BlueGene)"
-    export MPICC=mpixlc_r
-    export MPIFC=mpixlf90
-    #export CFLAGS="-g -O0"
-    export CFLAGS=""
-    export FC=xlf90
-    export CC=xlc_r
-    export MACRODEFFLAG="-WL,-D"
-
-    source /etc/profile.d/modules.sh
-    module load python
-    # NetCDF 3 for bp2ncd
-    module load netcdf/3.6.2-linux
-    # Seq HDF5 for bp2h5 
-    #module load hdf5/1.8.5-linux
-    export HDF5_DIR="/sw/bgp/hdf5/1.8.5/sles10.2_xlc9.0xlf11.1/install"
-    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
-
-    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/eugene \
-            --enable-dependency-tracking \
-            --with-hdf5=$HDF5_DIR \
-            --with-hdf5-libs="$HDF5_CLIB" \
-            --without-phdf5
-
-    
-elif [ `hostname | cut -c 1-4` == "nid0" ]; then
-    ############
-    # Franklin #
-    ############
-    TARGET=pgi
-    echo "Configure on FRANKLIN for $TARGET env."
-    export CC=cc
-    export CXX=CC
-    export FC=ftn
+elif [ `hostname | cut -c 1-6` == "edison" ]; then
+    ##########
+    # EDISON #
+    ##########
+    TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+    echo "Configure on EDISON for $TARGET env."
+    export MPICC=cc
+    export MPICXX=CC
+    export MPIFC=ftn
     module unload hdf5
     module unload netcdf
     module unload hdf5-parallel
@@ -778,28 +615,50 @@ elif [ `hostname | cut -c 1-4` == "nid0" ]; then
     module unload PrgEnv-pathscale
     module unload PrgEnv-cray
     module load PrgEnv-$TARGET
-    #if [ "${TARGET}" == "pgi" ]; then
-    #    module swap pgi pgi/10.5.0
-    #fi
-    export LDFLAGS="-pgcpplibs"
+    module swap cray-libsci
+    module load python
+    WITHDART=""
+    if [ "$TARGET" == "pgi" ]; then
+        export CC=pgcc
+        export CXX=pgCC
+        export FC=pgf90
+        export LDFLAGS="-pgcpplibs"
+        #WITHDART="--with-dataspaces=/global/homes/p/pnorbert/dataspaces/1.1.0/$TARGET"
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+        export LDFLAGS=""
+        #WITHDART="--with-dataspaces=/global/homes/p/pnorbert/dataspaces/1.1.0/$TARGET"
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=icc
+        export CXX=icpc
+        export FC=ifort
+        export LDFLAGS=""
+        WITHDART=""
+    else
+        echo "TARGET must be pgi or gnu or intel"
+        exit 1
+    fi
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
-    #${SRCDIR}/configure --prefix=/project/projectdirs/m499/adios \
-    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios \
+    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios/master/edison/$TARGET \
         --enable-dependency-tracking \
-        --with-mxml=$HOME/mxml \
-        --with-hdf5=/opt/cray/hdf5/1.8.5.0/hdf5-${TARGET} \
-        --with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
-        --with-phdf5=/opt/cray/hdf5-parallel/1.8.5.0/hdf5-parallel-${TARGET} \
-        --with-nc4par=/opt/cray/netcdf-hdf5parallel/4.1.1.0/netcdf-hdf5parallel-${TARGET} \
-        --with-dart=/global/homes/p/pnorbert/dart.0628.pgi
-    
+        --with-mxml=$HOME/mxml/mxml.edison \
+        --with-lustre=/usr \
+        $WITHDART \
+        --with-cray-pmi-incdir=/opt/cray/pmi/default/include \
+        --with-cray-pmi-libdir=/opt/cray/pmi/default/lib64 \
+        --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
+        --with-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
+	--without-infiniband \
+        --without-hdf5 --without-netcdf
 
 elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     ##########
     # Hopper #
     ##########
-    TARGET=pgi
+    TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
     echo "Configure on HOPPER for $TARGET env."
     export MPICC=cc
     export MPICXX=CC
@@ -808,12 +667,12 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     module unload netcdf
     module unload hdf5-parallel
     module unload netcdf-hdf5parallel
-    module unload PrgEnv-gnu
-    module unload PrgEnv-pgi
-    module unload PrgEnv-pathscale
-    module unload PrgEnv-cray
-    TARGET=pgi
-    module load PrgEnv-$TARGET
+    #module unload PrgEnv-gnu
+    #module unload PrgEnv-pgi
+    #module unload PrgEnv-pathscale
+    #module unload PrgEnv-cray
+    #module load PrgEnv-$TARGET
+    #module swap cray-libsci
     module load python
     if [ "$TARGET" == "pgi" ]; then
         export CC=pgcc
@@ -839,7 +698,7 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     fi
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
-    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios/1.4.1/hopper/$TARGET \
+    ${SRCDIR}/configure --prefix=/project/projectdirs/m499/adios/devel-hopper-$TARGET \
         --enable-dependency-tracking \
         --with-mxml=$HOME/mxml/mxml.hopper \
         --with-lustre=/usr \
@@ -848,6 +707,7 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
         --with-cray-pmi-libdir=/opt/cray/pmi/default/lib64 \
         --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
         --with-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
+	--without-infiniband \
         --without-hdf5 --without-netcdf
 
 
@@ -981,7 +841,36 @@ elif [ `hostname | cut -c 1-4` == "qliu" ]; then
         #--with-hdf5=/home/thkorde/local \
         #--with-netcdf=/home/thkorde/local
 
-elif [ `hostname | cut -c 1-5` == "adios" ]; then
+
+elif [ `hostname | cut -c 1-2` == "ln" ]; then
+    #######################
+    # Tianhe-1A           #
+    #######################
+    echo "Configure on Tianhe-1A."
+    #export MPICC=
+    #export MPICXX=
+    #export MPIFC=
+    export CC=icc
+    export CXX=icpc
+    export FC=ifort
+
+    ${SRCDIR}/configure --prefix=/vol6/home/Jeremy/adios-install \
+        --enable-dependency-tracking \
+        --with-mxml=/vol6/home/Jeremy/mxml-install \
+        --enable-skel-timing \
+        --disable-maintainer-mode 
+
+
+        #--with-phdf5=/opt/hdf5-1.8.12-parallel \
+        #--with-hdf5=/opt/hdf5-1.8.12 \
+        #--with-netcdf=/opt/netcdf-3.6.3 \
+        #--with-zlib=/opt/zlib  \
+        #--with-szip=/opt/szip-2.1 \
+        #--with-bzip2=/usr/lib/i386-linux-gnu \
+        #--with-isobar=/opt/isobar \
+        #--with-flexpath=/opt/chaos
+
+elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
 
     #######################
     # ADIOS Virtual Box #
@@ -995,17 +884,22 @@ elif [ `hostname | cut -c 1-5` == "adios" ]; then
     export FC=gfortran
 
     export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
-    ${SRCDIR}/configure --prefix=/opt/adios/1.6 \
+    ${SRCDIR}/configure --prefix=/opt/adios/1.8 \
+        --disable-maintainer-mode \
         --enable-dependency-tracking \
         --with-mxml=/opt/mxml \
-        --with-phdf5=/opt/hdf5-1.8.12-parallel \
-        --with-hdf5=/opt/hdf5-1.8.12 \
-        --with-netcdf=/opt/netcdf-3.6.3 \
-        --with-zlib=/opt/zlib  \
-        --with-szip=/opt/szip-2.1 \
-        --with-bzip2=/usr/lib/i386-linux-gnu \
+        --with-zlib \
+        --with-bzip2 \
+        --with-szip=/opt/szip \
         --with-isobar=/opt/isobar \
-        --with-flexpath=/opt/chaos
+        --with-flexpath=/opt/chaos \
+        --with-fastbit=/opt/fastbit \
+        --with-hdf5=/opt/hdf5-1.8.12 \
+        --with-phdf5=/opt/hdf5-1.8.12-parallel \
+        --with-netcdf=/opt/netcdf-4.3.0 \
+        --enable-timers \
+        --disable-timer-events
+
 
 
 else
diff --git a/scripts/FindADIOS.cmake b/scripts/FindADIOS.cmake
index 690269c..9071655 100644
--- a/scripts/FindADIOS.cmake
+++ b/scripts/FindADIOS.cmake
@@ -109,7 +109,6 @@ if(ADIOS_FIND_COMPONENTS)
         endif()
     endforeach()
 endif()
-string(REGEX REPLACE ";" "" OPTLIST "${OPTLIST}")
 
 # we start by assuming we found ADIOS and falsify it if some
 # dependencies are missing (or if we did not find ADIOS at all)
@@ -163,7 +162,8 @@ if(ADIOS_FOUND)
     # ADIOS headers
     list(APPEND ADIOS_INCLUDE_DIRS ${ADIOS_ROOT_DIR}/include)
 
-    # check for compiled in dependencies
+    # check for compiled in dependencies, recomve ";" in ADIOS_LINKFLAGS (from cmake build)
+    string(REGEX REPLACE ";" " " ADIOS_LINKFLAGS "${ADIOS_LINKFLAGS}")
     message(STATUS "ADIOS linker flags (unparsed): ${ADIOS_LINKFLAGS}")
 
     # find all library paths -L
@@ -171,9 +171,9 @@ if(ADIOS_FOUND)
     #         different sources (quite unlikely)
     #         http://www.cmake.org/pipermail/cmake/2008-November/025128.html
     set(ADIOS_LIBRARY_DIRS "")
-    string(REGEX MATCHALL "-L([A-Za-z_0-9/\\.-]+)" _ADIOS_LIBDIRS "${ADIOS_LINKFLAGS}")
+    string(REGEX MATCHALL " -L([A-Za-z_0-9/\\.-]+)" _ADIOS_LIBDIRS " ${ADIOS_LINKFLAGS}")
     foreach(_LIBDIR ${_ADIOS_LIBDIRS})
-        string(REPLACE "-L" "" _LIBDIR ${_LIBDIR})
+        string(REPLACE " -L" "" _LIBDIR ${_LIBDIR})
         list(APPEND ADIOS_LIBRARY_DIRS ${_LIBDIR})
     endforeach()
     # we could append ${CMAKE_PREFIX_PATH} now but that is not really necessary
@@ -181,12 +181,12 @@ if(ADIOS_FOUND)
     #message(STATUS "ADIOS DIRS to look for libs: ${ADIOS_LIBRARY_DIRS}")
 
     # parse all -lname libraries and find an absolute path for them
-    string(REGEX MATCHALL "-l([A-Za-z_0-9\\.-]+)" _ADIOS_LIBS "${ADIOS_LINKFLAGS}")
+    string(REGEX MATCHALL " -l([A-Za-z_0-9\\.-]+)" _ADIOS_LIBS " ${ADIOS_LINKFLAGS}")
     foreach(_LIB ${_ADIOS_LIBS})
-        string(REPLACE "-l" "" _LIB ${_LIB})
+        string(REPLACE " -l" "" _LIB ${_LIB})
 
         # find static lib: absolute path in -L then default
-        find_library(_LIB_DIR NAMES ${_LIB} PATHS ${ADIOS_LIBRARY_DIRS})
+        find_library(_LIB_DIR NAMES ${_LIB} PATHS ${ADIOS_LIBRARY_DIRS} CMAKE_FIND_ROOT_PATH_BOTH)
 
         # found?
         if(_LIB_DIR)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4ad0d0c..3ff9837 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -28,6 +28,15 @@ set(libadiosreadf_a_CFLAGS "")
 set(libadiosread_nompi_a_CFLAGS "")
 set(libadiosreadf_nompi_a_CFLAGS "")
 
+## Transform plugin source files
+set(transforms_write_method_SOURCES "")
+set(transforms_read_method_SOURCES "")
+
+#include (transforms/Makefile.plugins.cmake)
+
+##
+## Core transform framework source files
+##
 set (transforms_common_HDRS core/adios_copyspec.h 
                          core/adios_subvolume.h 
                          core/adios_selection_util.h 
@@ -36,11 +45,11 @@ set (transforms_common_HDRS core/adios_copyspec.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 
+set (transforms_read_HDRS 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_transforms_transinfo.h
                        core/transforms/adios_patchdata.h)
 
 set (transforms_write_HDRS  core/transforms/adios_transforms_write.h 
@@ -62,14 +71,17 @@ set (transforms_read_SOURCES ${transforms_read_HDRS}
                           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_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_identity_read.c 
-                          transforms/adios_transform_zlib_read.c 
+                          transforms/adios_transform_bzip2_read.c
+                          transforms/adios_transform_identity_read.c
+                          transforms/adios_transform_zlib_read.c
                           core/adios_selection_util.c 
+                          core/transforms/plugindetect/detect_plugin_read_hook_decls.h
+                          core/transforms/plugindetect/detect_plugin_read_hook_reg.h
+                          core/adios_read_ext.c
                           ${transforms_read_method_SOURCES})
 
 set (transforms_write_SOURCES ${transforms_write_HDRS} 
@@ -86,6 +98,28 @@ set (transforms_write_SOURCES ${transforms_write_HDRS}
                            transforms/adios_transform_zlib_write.c
                            ${transforms_write_method_SOURCES})
 
+#######Query source files
+set(query_common_HDRS query/common_query.h
+                      query/adios_query_hooks.h
+                      query/query_utils.h)
+
+set(query_common_SOURCES ${query_common_HDRS}
+                         query/common_query.c
+                         query/adios_query_hooks.c
+                         query/query_utils.c)
+
+# Include source files that are specific to each query plugin
+set(query_method_HDRS "")
+set(query_method_SOURCES "")
+include(query/Makefile.plugins.cmake)
+
+set(query_method_SOURCES ${query_method_SOURCES} ${query_method_HDRS})
+
+set(query_SOURCES ${query_common_SOURCES} ${query_method_SOURCES})
+
+set(query_C_SOURCES ${query_SOURCES} query/adios_query.c)
+set(query_F_SOURCES ${query_SOURCES} query/adiosf_query.c)
+
 #start adios.a and adios_nompi.a
 if(BUILD_WRITE)
     set(libadios_a_SOURCES core/adios.c 
@@ -101,6 +135,8 @@ if(BUILD_WRITE)
                      core/adios_read.c 
                      core/adios_read_v1.c 
                      core/common_read.c 
+                     core/adios_infocache.c
+                     core/adios_read_ext.c
                      core/globals.c 
                      core/adios_timing.c 
                      core/adios_read_hooks.c 
@@ -111,6 +147,7 @@ if(BUILD_WRITE)
                      ${transforms_common_SOURCES} 
                      ${transforms_read_SOURCES} 
                      ${transforms_write_SOURCES} 
+                     ${query_C_SOURCES}
                      core/util.c 
                      core/qhashtbl.c 
                      read/read_bp.c 
@@ -134,6 +171,7 @@ if(BUILD_WRITE)
                      ${transforms_common_SOURCES} 
                      ${transforms_read_SOURCES} 
                      ${transforms_write_SOURCES} 
+                     ${query_C_SOURCES}
                      core/buffer.c 
                      core/adios_bp_v1.c  
                      core/adios_endianness.c 
@@ -143,6 +181,8 @@ if(BUILD_WRITE)
                      core/adios_read.c 
                      core/adios_read_v1.c 
                      core/common_read.c 
+                     core/adios_infocache.c
+                     core/adios_read_ext.c
                      core/globals.c 
                      core/mpidummy.c 
                      core/adios_timing.c 
@@ -167,6 +207,7 @@ if(BUILD_WRITE)
                        ${transforms_common_SOURCES} 
                        ${transforms_read_SOURCES} 
                        ${transforms_write_SOURCES} 
+                       ${query_F_SOURCES}
                        core/buffer.c 
                        core/adios_bp_v1.c  
                        core/adios_endianness.c
@@ -174,6 +215,8 @@ if(BUILD_WRITE)
                        core/adios_error.c 
                        core/bp_utils.c                
                        core/common_read.c 
+                       core/adios_infocache.c
+                       core/adios_read_ext.c
                        core/globals.c 
                        core/adios_timing.c 
                        core/adios_read_hooks.c 
@@ -256,6 +299,14 @@ if(BUILD_WRITE)
         endif(BUILD_FORTRAN)
     endif(HAVE_FLEXPATH)
 
+    if(HAVE_ICEE)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_icee.c read/read_icee.c)
+        set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_icee.c  read/read_icee.c)
+        if(BUILD_FORTRAN)
+            set(FortranLibSources ${FortranLibSources} write/adios_icee.c read/read_icee.c)
+        endif()
+    endif()
+
     if(HAVE_NSSI)
         set(dist_libadios_a_SOURCES  nssi/adios_nssi_args.x)
         set(nodist_libadios_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
@@ -342,12 +393,14 @@ if(BUILD_WRITE)
         set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES}
                          core/adiosf_defs_mod.f90
                          core/adiosf_write_mod.f90 
-                         core/adiosf_read_mod.f90)
+                         core/adiosf_read_mod.f90
+                         query/adios_query_mod.f90)
    
         set(libadiosf_nompi_a_SOURCES ${libadiosf_nompi_a_SOURCES}
                               core/adiosf_defs_mod.f90
                               core/adiosf_write_mod.f90
-                              core/adiosf_read_mod.f90)
+                              core/adiosf_read_mod.f90
+                              query/adios_query_mod.f90)
 
         set(libadiosf_v1_a_SOURCES ${libadiosf_v1_a_SOURCES} 
                          core/adiosf_defs_mod.f90
@@ -372,15 +425,21 @@ if(BUILD_WRITE)
 #           )
 
         add_custom_command(
+            OUTPUT adios_write_mod.o
+#            COMMAND  $(FC) -c core/adiosf_write_mod.f90
+            DEPENDS adios_defs_mod.o
+        )
+
+        
+        add_custom_command(
             OUTPUT adios_write_mod.mod
-            COMMAND  $(FC) -c core/adiosf_write_mod.f90
-            DEPENDS core/adiosf_write_mod.f90 adios_defs_mod.mod
+            DEPENDS adios_defs_mod.o
         )
 
         add_custom_command(
             OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/adios_write_mod.mod
             COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod ${CMAKE_CURRENT_SOURCE_DIR}
-        DEPENDS adios_write_mod.mod
+            DEPENDS adios_write_mod.mod
         )
 #       file(COPY ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
 
@@ -415,7 +474,9 @@ set(include_HEADERS ${include_HEADERS} public/adios.h
                    public/adios_read_v2.h 
                    public/adios_read_v2_fwd.h 
                    public/adios_selection.h
-                   public/adios_schema.h) 
+                   public/adios_schema.h
+                   public/adios_read_ext.h
+                   public/adios_query.h)
 
 set(libadiosread_a_SOURCES core/adios_bp_v1.c
                       core/adios_endianness.c 
@@ -425,8 +486,11 @@ set(libadiosread_a_SOURCES core/adios_bp_v1.c
                       core/adios_read.c 
                       core/adios_read_v1.c 
                       core/common_read.c 
+                      core/adios_infocache.c
+                      core/adios_read_ext.c
                       ${transforms_common_SOURCES} 
                       ${transforms_read_SOURCES} 
+                      ${query_C_SOURCES}
                       core/globals.c 
                       core/adios_read_hooks.c 
                       core/adios_logger.c 
@@ -440,7 +504,6 @@ if(HAVE_DMALLOC)
     set(libadiosread_a_CPPFLAGS "${libadiosread_a_CPPFLAGS} ${MACRODEFFLAG}DMALLOC")
 endif(HAVE_DMALLOC)
 
-
 if(HAVE_DATASPACES)
     set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_dataspaces.c)
 endif(HAVE_DATASPACES)
@@ -457,6 +520,10 @@ if(HAVE_FLEXPATH)
     set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_flexpath.c)
 endif(HAVE_FLEXPATH)
 
+if(HAVE_ICEE)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_icee.c)
+endif()
+
 if(HAVE_NSSI)
     set(dist_libadiosread_a_SOURCES nssi/adios_nssi_args.x)
     set(nodist_libadiosread_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
@@ -482,8 +549,11 @@ if(BUILD_FORTRAN)
                       core/futils.c 
                       core/adios_error.c 
                       core/common_read.c 
+                      core/adios_infocache.c
+                      core/adios_read_ext.c
                       ${transforms_common_SOURCES} 
                       ${transforms_read_SOURCES} 
+                      ${query_F_SOURCES}
                       core/globals.c 
                       core/adios_read_hooks.c 
                       core/adios_logger.c 
@@ -508,6 +578,10 @@ if(BUILD_FORTRAN)
         set(FortranReadLibSource ${FortranReadLibSource} read/read_flexpath.c)
     endif(HAVE_FLEXPATH)
   
+    if(HAVE_ICEE)
+        set(FortranReadLibSource ${FortranReadLibSource} read/read_icee.c)
+    endif()
+
     if(HAVE_NSSI)
         set(dist_libadiosreadf_a_SOURCES nssi/adios_nssi_args.x)
         set(nodist_libadiosreadf_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
@@ -522,27 +596,47 @@ if(BUILD_FORTRAN)
     set(libadiosreadf_v1_a_SOURCES ${FortranReadLibSource} core/adiosf_read_v1.c)
     set(libadiosreadf_v1_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS}")
     set(libadiosreadf_v1_a_CFLAGS "${libadiosreadf_a_CFLAGS}")
-    set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES} core/adiosf_defs_mod.f90 core/adiosf_read_mod.f90)
-    set(nodist_include_HEADERS ${nodist_include_HEADERS} adios_read_mod.mod adios_defs_mod.mod)
-    set(CLEANFILES ${CLEANFILES} adios_read_mod.mod adios_defs_mod.mod)
+    set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES}
+                                core/adiosf_defs_mod.f90 
+                                core/adiosf_read_mod.f90
+                                query/adios_query_mod.f90)
+    set(nodist_include_HEADERS ${nodist_include_HEADERS} adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod)
+    set(CLEANFILES ${CLEANFILES} adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod)
   
-    ADD_CUSTOM_COMMAND(
-        OUTPUT adios_read_mod.mod
-        COMMAND $(FC) -c core/adiosf_read_mod.f90
-        DEPENDS core/adiosf_read_mod.f90 adios_defs_mod.mod
+    add_custom_command(
+        OUTPUT adios_read_mod.o
+#        COMMAND $(FC) -c core/adiosf_read_mod.f90
+        DEPENDS adios_defs_mod.o
         )  
     add_custom_command(
+        OUTPUT adios_read_mod.mod
+        DEPENDS adios_read_mod.o
+    )
+    add_custom_command(
         OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/adios_read_mod.mod
         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/adios_read_mod.mod ${CMAKE_CURRENT_SOURCE_DIR}
         DEPENDS adios_read_mod.mod
         )
 
-    ADD_CUSTOM_COMMAND(
-        OUTPUT adios_defs_mod.mod
-        COMMAND $(FC) -c core/adiosf_defs_mod.f90
-        DEPENDS core/adios_defs_mod.f90
+    add_custom_command(
+        OUTPUT adios_query_mod.o
+        DEPENDS adios_read_mod.o
         )
     add_custom_command(
+        OUTPUT adios_query_mod.mod
+        DEPENDS adios_query_mod.o
+    )
+    add_custom_command(
+        OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/adios_query_mod.mod
+        COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/adios_query_mod.mod ${CMAKE_CURRENT_SOURCE_DIR}
+        DEPENDS adios_query_mod.mod
+        ) 
+
+    add_custom_command(
+        OUTPUT adios_defs_mod.mod
+        DEPENDS adios_defs_mod.o
+    )
+    add_custom_command(
         OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/adios_defs_mod.mod
         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/adios_defs_mod.mod ${CMAKE_CURRENT_SOURCE_DIR}
         DEPENDS adios_defs_mod.mod
@@ -573,8 +667,11 @@ set(libadiosread_nompi_a_SOURCES core/mpidummy.c
                       core/adios_read.c 
                       core/adios_read_v1.c 
                       core/common_read.c 
+                      core/adios_infocache.c
+                      core/adios_read_ext.c
                       ${transforms_common_SOURCES} 
                       ${transforms_read_SOURCES} 
+                      ${query_C_SOURCES}
 #                      core/adios_internals.c 
                       core/adios_logger.c 
                       core/buffer.c 
@@ -605,6 +702,10 @@ if(HAVE_FLEXPATH)
     set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_flexpath.c)
 endif(HAVE_FLEXPATH)
 
+if(HAVE_ICEE)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_icee.c)
+endif()
+
 if(HAVE_NSSI)
     set(dist_libadiosread_nompi_a_SOURCES nssi/adios_nssi_args.x)
     set(nodist_libadiosread_nompi_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
@@ -630,8 +731,11 @@ if(BUILD_FORTRAN)
                           core/adios_error.c 
                           core/adios_logger.c 
                           core/common_read.c 
+                          core/adios_infocache.c
+                          core/adios_read_ext.c
                           ${transforms_common_SOURCES} 
                           ${transforms_read_SOURCES} 
+                          ${query_F_SOURCES}
                           core/globals.c 
                           core/adios_read_hooks.c 
                           core/util.c 
@@ -653,6 +757,10 @@ if(BUILD_FORTRAN)
         set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_flexpath.c)
     endif(HAVE_FLEXPATH)
 
+    if(HAVE_ICEE)
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_icee.c)
+    endif()
+
     if(HAVE_NSSI)
         set(dist_libadiosreadf_nompi_a_SOURCES nssi/adios_nssi_args.x)
         set(nodist_libadiosreadf_nompi_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
@@ -687,6 +795,7 @@ set(libadios_internal_nompi_a_SOURCES core/mpidummy.c
                                     core/adios_internals.c 
                                     ${transforms_common_SOURCES} 
                                     ${transforms_write_SOURCES} 
+                                    ${query_C_SOURCES}
                                     core/buffer.c 
                                     core/adios_error.c 
                                     core/adios_logger.c 
@@ -709,19 +818,27 @@ set_target_properties(adios_internal_nompi PROPERTIES COMPILE_FLAGS "${libadios_
 add_subdirectory(core)
 add_subdirectory(write)
 
-install(FILES ${PROJECT_BINARY_DIR}/src/libadios.a
-        ${PROJECT_BINARY_DIR}/src/libadios_nompi.a
-        ${PROJECT_BINARY_DIR}/src/libadiosf.a
-        ${PROJECT_BINARY_DIR}/src/libadiosf_v1.a
-        ${PROJECT_BINARY_DIR}/src/libadiosread.a
-        ${PROJECT_BINARY_DIR}/src/libadiosread_nompi.a
-        ${PROJECT_BINARY_DIR}/src/libadiosreadf.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
+install(FILES ${PROJECT_BINARY_DIR}/src/libadiosread.a
+              ${PROJECT_BINARY_DIR}/src/libadiosread_nompi.a
         DESTINATION ${libdir})
+if(BUILD_FORTRAN)
+    install(FILES ${PROJECT_BINARY_DIR}/src/libadiosreadf.a
+                  ${PROJECT_BINARY_DIR}/src/libadiosreadf_nompi.a
+                  ${PROJECT_BINARY_DIR}/src/libadiosreadf_nompi_v1.a
+                  ${PROJECT_BINARY_DIR}/src/libadiosreadf_v1.a
+            DESTINATION ${libdir})
+endif()
 
-
+if(BUILD_WRITE)
+    install(FILES ${PROJECT_BINARY_DIR}/src/libadios.a
+                  ${PROJECT_BINARY_DIR}/src/libadios_nompi.a
+            DESTINATION ${libdir})
+    if(BUILD_FORTRAN)
+        install(FILES ${PROJECT_BINARY_DIR}/src/libadiosf.a
+                      ${PROJECT_BINARY_DIR}/src/libadiosf_v1.a
+                      ${PROJECT_BINARY_DIR}/src/libadiosf_nompi.a
+                      ${PROJECT_BINARY_DIR}/src/libadiosf_nompi_v1.a
+                DESTINATION ${libdir})
+    endif()
+endif()
 #Note: ${MACRODEFFLAG}NOMPI chokes IBM's bgxlf compiler but it can pass ${MACRODEFFLAG}_NOMPI.
diff --git a/src/Makefile.am b/src/Makefile.am
index f1ccd0f..3132c9f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-INCLUDES=-I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
+AM_CPPFLAGS=-I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms -I$(top_srcdir)/src/core/query
 
 AUTOMAKE_OPTIONS = no-dependencies
 METASOURCES=AUTO
@@ -31,10 +31,10 @@ include_HEADERS=
 nodist_include_HEADERS=
 lib_LIBRARIES=
 
-libadiosread_a_CPPFLAGS=
-libadiosreadf_a_CPPFLAGS=
-libadiosread_nompi_a_CPPFLAGS=
-libadiosreadf_nompi_a_CPPFLAGS=
+libadiosread_a_CPPFLAGS=$(AM_CPPFLAGS)
+libadiosreadf_a_CPPFLAGS=$(AM_CPPFLAGS)
+libadiosread_nompi_a_CPPFLAGS=$(AM_CPPFLAGS)
+libadiosreadf_nompi_a_CPPFLAGS=$(AM_CPPFLAGS)
 
 libadiosread_a_CFLAGS= 
 libadiosreadf_a_CFLAGS= 
@@ -58,11 +58,11 @@ transforms_common_HDRS = core/adios_copyspec.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 \
+transforms_read_HDRS = 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_transforms_transinfo.h \
                        core/transforms/adios_patchdata.h
 
 transforms_write_HDRS = core/transforms/adios_transforms_write.h \
@@ -87,6 +87,7 @@ transforms_read_SOURCES = $(transforms_read_HDRS) \
                           core/adios_selection_util.c \
                           core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
                           core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+                          core/adios_read_ext.c \
                           $(transforms_read_method_SOURCES)
 
 transforms_write_SOURCES = $(transforms_write_HDRS) \
@@ -98,6 +99,27 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
                            core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
                            $(transforms_write_method_SOURCES)
 
+#######Query source files 
+
+query_common_HDRS = query/common_query.h query/adios_query_hooks.h query/query_utils.h
+query_common_SOURCES = $(query_common_HDRS) \
+                       query/common_query.c  \
+                       query/adios_query_hooks.c \
+                       query/query_utils.c
+
+# Include source files that are specific to each query plugin
+query_method_HDRS = 
+query_method_SOURCES =
+include query/Makefile.plugins
+
+query_method_SOURCES += $(query_method_HDRS) 
+
+query_SOURCES      = $(query_common_SOURCES) \
+                     $(query_method_SOURCES)
+
+query_C_SOURCES    = $(query_SOURCES) query/adios_query.c
+query_F_SOURCES    = $(query_SOURCES) query/adiosf_query.c
+
 if BUILD_WRITE
 lib_LIBRARIES += libadios.a libadios_nompi.a
 libadios_a_SOURCES = core/adios.c \
@@ -113,6 +135,8 @@ libadios_a_SOURCES = core/adios.c \
                      core/adios_read.c \
                      core/adios_read_v1.c \
                      core/common_read.c \
+                     core/adios_infocache.c \
+                     core/adios_read_ext.c \
                      core/globals.c \
                      core/adios_timing.c \
                      core/adios_read_hooks.c \
@@ -124,6 +148,7 @@ libadios_a_SOURCES = core/adios.c \
                      $(transforms_common_SOURCES) \
                      $(transforms_read_SOURCES) \
                      $(transforms_write_SOURCES) \
+                     $(query_C_SOURCES) \
                      read/read_bp.c \
                      read/read_bp_staged.c \
                      read/read_bp_staged1.c \
@@ -143,6 +168,7 @@ libadios_nompi_a_SOURCES = core/adios.c \
                      $(transforms_common_SOURCES) \
                      $(transforms_read_SOURCES) \
                      $(transforms_write_SOURCES) \
+                     $(query_C_SOURCES) \
                      core/buffer.c \
                      core/adios_bp_v1.c  \
                      core/adios_endianness.c \
@@ -152,6 +178,8 @@ libadios_nompi_a_SOURCES = core/adios.c \
                      core/adios_read.c \
                      core/adios_read_v1.c \
                      core/common_read.c \
+                     core/adios_infocache.c \
+                     core/adios_read_ext.c \
                      core/globals.c \
                      core/mpidummy.c \
                      core/adios_timing.c \
@@ -178,6 +206,7 @@ FortranLibSources = core/adiosf.c \
                      $(transforms_common_SOURCES) \
                      $(transforms_read_SOURCES) \
                      $(transforms_write_SOURCES) \
+                     $(query_F_SOURCES) \
                      core/buffer.c \
                      core/adios_bp_v1.c  \
                      core/adios_endianness.c\
@@ -185,6 +214,8 @@ FortranLibSources = core/adiosf.c \
                      core/adios_error.c \
                      core/bp_utils.c \
                      core/common_read.c \
+                     core/adios_infocache.c \
+                     core/adios_read_ext.c \
                      core/globals.c \
                      core/adios_timing.c \
                      core/adios_read_hooks.c \
@@ -210,13 +241,13 @@ FortranLibSEQSources = core/mpidummy.c
 
 endif # BUILD_FORTRAN
 
-libadios_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
+libadios_a_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
 libadios_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
-libadios_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_SEQ_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
+libadios_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_SEQ_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
 libadios_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
-libadiosf_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
+libadiosf_a_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
 libadiosf_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
-libadiosf_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_SEQ_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
+libadiosf_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_SEQ_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
 libadiosf_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
 
 if HAVE_DATASPACES
@@ -269,6 +300,14 @@ FortranLibSources += write/adios_flexpath.c read/read_flexpath.c
 endif
 endif
 
+if HAVE_ICEE
+libadios_a_SOURCES += write/adios_icee.c read/read_icee.c
+libadios_nompi_a_SOURCES += write/adios_icee.c  read/read_icee.c
+if BUILD_FORTRAN
+FortranLibSources += write/adios_icee.c read/read_icee.c
+endif
+endif
+
 if HAVE_NSSI
 dist_libadios_a_SOURCES = nssi/adios_nssi_args.x
 nodist_libadios_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -344,11 +383,13 @@ libadiosf_nompi_v1_a_CFLAGS = $(libadiosf_nompi_a_CFLAGS)
 
 libadiosf_a_SOURCES += core/adiosf_defs_mod.f90 \
                        core/adiosf_write_mod.f90 \
-                       core/adiosf_read_mod.f90 
+                       core/adiosf_read_mod.f90 \
+                       query/adios_query_mod.f90
 
 libadiosf_nompi_a_SOURCES += core/adiosf_defs_mod.f90 \
                              core/adiosf_write_mod.f90 \
-                             core/adiosf_read_mod.f90 
+                             core/adiosf_read_mod.f90  \
+                             query/adios_query_mod.f90
 
 libadiosf_v1_a_SOURCES += core/adiosf_defs_mod.f90 \
                           core/adiosf_write_mod.f90 
@@ -360,8 +401,8 @@ libadiosf_nompi_v1_a_SOURCES += core/adiosf_defs_mod.f90 \
 nodist_include_HEADERS += adios_write_mod.mod 
 CLEANFILES += adios_write_mod.mod
 
-adios_write_mod.mod: core/adiosf_write_mod.f90 adios_defs_mod.mod
-	$(FC) -c core/adiosf_write_mod.f90
+adiosf_write_mod.$(OBJEXT): adiosf_defs_mod.$(OBJEXT)
+adios_write_mod.mod: adiosf_write_mod.$(OBJEXT)
 
 endif
 
@@ -379,8 +420,9 @@ include_HEADERS += public/adios.h \
                    public/adios_read_v2.h \
                    public/adios_read_v2_fwd.h \
                    public/adios_selection.h \
-				   public/adios_schema.h
-
+		   public/adios_schema.h \
+                   public/adios_read_ext.h \
+                   public/adios_query.h
 
 lib_LIBRARIES += libadiosread.a
 libadiosread_a_SOURCES = core/adios_bp_v1.c \
@@ -391,8 +433,11 @@ libadiosread_a_SOURCES = core/adios_bp_v1.c \
                       core/adios_read.c \
                       core/adios_read_v1.c \
                       core/common_read.c \
+                      core/adios_infocache.c \
+                      core/adios_read_ext.c \
                       $(transforms_common_SOURCES) \
                       $(transforms_read_SOURCES) \
+                      $(query_C_SOURCES) \
                       core/globals.c \
                       core/adios_read_hooks.c \
                       core/adios_logger.c \
@@ -413,6 +458,9 @@ endif
 if HAVE_FLEXPATH
 libadiosread_a_SOURCES += read/read_flexpath.c
 endif
+if HAVE_ICEE
+libadiosread_a_SOURCES += read/read_icee.c
+endif
 if HAVE_NSSI
 dist_libadiosread_a_SOURCES = nssi/adios_nssi_args.x
 nodist_libadiosread_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -432,8 +480,11 @@ FortranReadLibSource = core/adios_bp_v1.c \
                       core/futils.c \
                       core/adios_error.c \
                       core/common_read.c \
+                      core/adios_infocache.c \
+                      core/adios_read_ext.c \
                       $(transforms_common_SOURCES) \
                       $(transforms_read_SOURCES) \
+                      $(query_F_SOURCES) \
                       core/globals.c \
                       core/adios_read_hooks.c \
                       core/adios_logger.c \
@@ -454,6 +505,9 @@ endif
 if HAVE_FLEXPATH 
 FortranReadLibSource += read/read_flexpath.c
 endif
+if HAVE_ICEE 
+FortranReadLibSource += read/read_icee.c
+endif
 if HAVE_NSSI
 dist_libadiosreadf_a_SOURCES = nssi/adios_nssi_args.x
 nodist_libadiosreadf_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -470,17 +524,20 @@ libadiosreadf_v1_a_CPPFLAGS = $(libadiosreadf_a_CPPFLAGS)
 libadiosreadf_v1_a_CFLAGS = $(libadiosreadf_a_CFLAGS)
 
 libadiosreadf_a_SOURCES += core/adiosf_defs_mod.f90 \
-                           core/adiosf_read_mod.f90
+                           core/adiosf_read_mod.f90 \
+                           query/adios_query_mod.f90
 
 #nodist_libadiosreadf_a_SOURCES += adios_read_mod.mod
-nodist_include_HEADERS += adios_read_mod.mod adios_defs_mod.mod
-CLEANFILES += adios_read_mod.mod adios_defs_mod.mod
+nodist_include_HEADERS += adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod
+CLEANFILES += adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod
 
-adios_read_mod.mod: core/adiosf_read_mod.f90 adios_defs_mod.mod 
-	$(FC) -c core/adiosf_read_mod.f90
+adiosf_read_mod.$(OBJEXT): adiosf_defs_mod.$(OBJEXT)
+adios_read_mod.mod: adiosf_read_mod.$(OBJEXT)
 
-adios_defs_mod.mod: core/adiosf_defs_mod.f90
-	$(FC) -c core/adiosf_defs_mod.f90
+adios_query_mod.$(OBJEXT): adiosf_read_mod.$(OBJEXT)
+adios_query_mod.mod: adios_query_mod.$(OBJEXT)
+
+adios_defs_mod.mod: adiosf_defs_mod.$(OBJEXT)
 
 endif
 
@@ -494,8 +551,11 @@ libadiosread_nompi_a_SOURCES = core/mpidummy.c\
                       core/adios_read.c \
                       core/adios_read_v1.c \
                       core/common_read.c \
+                      core/adios_infocache.c \
+                      core/adios_read_ext.c \
                       $(transforms_common_SOURCES) \
                       $(transforms_read_SOURCES) \
+                      $(query_C_SOURCES) \
                       core/adios_logger.c \
                       core/buffer.c \
                       core/globals.c \
@@ -517,6 +577,9 @@ endif
 if HAVE_FLEXPATH
 libadiosread_nompi_a_SOURCES += read/read_flexpath.c
 endif
+if HAVE_ICEE
+libadiosread_nompi_a_SOURCES += read/read_icee.c
+endif
 if HAVE_NSSI
 dist_libadiosread_nompi_a_SOURCES = nssi/adios_nssi_args.x
 nodist_libadiosread_nompi_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -540,8 +603,11 @@ FortranReadSeqLibSource = core/mpidummy.c\
                           core/adios_error.c \
                           core/adios_logger.c \
                           core/common_read.c \
+                          core/adios_infocache.c \
+                          core/adios_read_ext.c \
                           $(transforms_common_SOURCES) \
                           $(transforms_read_SOURCES) \
+                          $(query_F_SOURCES) \
                           core/globals.c \
                           core/adios_read_hooks.c \
                           core/util.c \
@@ -559,6 +625,9 @@ endif
 if HAVE_FLEXPATH
 FortranReadSeqLibSource += read/read_flexpath.c
 endif
+if HAVE_ICEE
+FortranReadSeqLibSource += read/read_icee.c
+endif
 if HAVE_NSSI
 dist_libadiosreadf_nompi_a_SOURCES = nssi/adios_nssi_args.x
 nodist_libadiosreadf_nompi_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -584,6 +653,7 @@ libadios_internal_nompi_a_SOURCES = core/mpidummy.c \
                                     core/adios_internals.c \
                                     $(transforms_common_SOURCES) \
                                     $(transforms_write_SOURCES) \
+                                    $(query_C_SOURCES) \
                                     core/buffer.c \
                                     core/adios_error.c \
                                     core/adios_logger.c \
@@ -597,7 +667,7 @@ libadios_internal_nompi_a_SOURCES += core/adios_internals_mxml.c
 endif
 
 
-libadios_internal_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_INTERNAL $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
+libadios_internal_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(MACRODEFFLAG)_INTERNAL $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 #Note: $(MACRODEFFLAG)NOMPI chokes IBM's bgxlf compiler but it can pass $(MACRODEFFLAG)_NOMPI. 
 
 if HAVE_DMALLOC
@@ -636,12 +706,19 @@ 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 \
-             $(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_icee.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/common_read.h core/adios_infocache.h core/futils.h core/globals.h core/ds_metadata.h \
              core/util.h core/flexpath.h core/qhashtbl.h \
-             nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h
+             $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
+             $(query_common_HDRS) $(query_method_HDRS) \
+             transforms/transform_plugins.h \
+	     transforms/adios_transform_identity_read.h \
+	     transforms/adios_transform_szip.h \
+	     transforms/adios_transform_alacrity_common.h \
+	     transforms/adios_transform_template_read.c \
+	     transforms/adios_transform_template_write.c \
+             query/Makefile.plugins.cmake \
+             nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h 
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 16ed292..e19bf66 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -40,35 +40,43 @@ 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
- at BUILD_WRITE_TRUE@am__append_2 = libadios.a libadios_nompi.a
- 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_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_23 = write/adios_flexpath.c  read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_24 = write/adios_flexpath.c read/read_flexpath.c
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_25 = 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_26 = $(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_27 = 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_28 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_29 = adios_nssi_args.c adios_nssi_args.h
+	$(srcdir)/Makefile.in $(srcdir)/query/Makefile.plugins \
+	$(srcdir)/transforms/Makefile.plugins
+ at HAVE_FASTBIT_TRUE@am__append_2 = query/query_fastbit.c \
+ at HAVE_FASTBIT_TRUE@	query/fastbit_adios.c
+ at HAVE_FASTBIT_TRUE@am__append_3 = query/fastbit_adios.h
+ at HAVE_ALACRITY_TRUE@am__append_4 = query/query_alac.c
+ at BUILD_WRITE_TRUE@am__append_5 = libadios.a libadios_nompi.a
+ at BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__append_6 = write/adios_mpi_bgq.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_7 = 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_8 = write/adios_mpi_bgq.c  
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_9 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_10 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_11 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_12 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_13 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_14 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_15 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_16 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_17 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_18 = write/adios_phdf5.c 
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_19 = $(MACRODEFFLAG)PHDF5 $(MACRODEFFLAG)H5_USE_16_API 
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_20 = $(PHDF5_CPPFLAGS)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_21 = write/adios_phdf5.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_22 = $(PHDF5_CPPFLAGS)
+ at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_23 = write/adios_nc4.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_24 = write/adios_nc4.c 
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_25 = write/adios_flexpath.c  read/read_flexpath.c
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_26 = write/adios_flexpath.c  read/read_flexpath.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_27 = write/adios_flexpath.c read/read_flexpath.c
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__append_28 = write/adios_icee.c read/read_icee.c
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__append_29 = write/adios_icee.c  read/read_icee.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__append_30 = write/adios_icee.c read/read_icee.c
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_31 = 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_32 = $(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_33 = 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_34 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_35 = adios_nssi_args.c adios_nssi_args.h
 
 #libadios_a_SOURCES += write/adios_mpi_stagger.c \
 #                      write/adios_mpi_aggregate.c \
@@ -84,64 +92,68 @@ DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
 #                       write/adios_mpi_stripe.c \
 #                       write/adios_mpi_amr1.c \
 #                       write/adios_adaptive.c 
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_30 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_31 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_32 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_33 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
+ at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_36 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
+ at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_37 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
+ at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_38 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
+ at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_39 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 
 #nodist_libadiosreadf_a_SOURCES += adios_write.mod
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_34 = adios_write_mod.mod 
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_35 = adios_write_mod.mod
- at HAVE_DATASPACES_TRUE@am__append_36 = read/read_dataspaces.c
- at HAVE_DIMES_TRUE@am__append_37 = read/read_dimes.c
- at HAVE_DATATAP_TRUE@am__append_38 = read/read_datatap.c
- at HAVE_FLEXPATH_TRUE@am__append_39 = read/read_flexpath.c
- at HAVE_NSSI_TRUE@am__append_40 = nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_NSSI_TRUE@am__append_41 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_40 = adios_write_mod.mod 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_41 = adios_write_mod.mod
+ at HAVE_DATASPACES_TRUE@am__append_42 = read/read_dataspaces.c
+ at HAVE_DIMES_TRUE@am__append_43 = read/read_dimes.c
+ at HAVE_DATATAP_TRUE@am__append_44 = read/read_datatap.c
+ at HAVE_FLEXPATH_TRUE@am__append_45 = read/read_flexpath.c
+ at HAVE_ICEE_TRUE@am__append_46 = read/read_icee.c
+ at HAVE_NSSI_TRUE@am__append_47 = nssi/adios_nssi_config.c read/read_nssi.c
+ at HAVE_NSSI_TRUE@am__append_48 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
 #libadiosread_a_CPPFLAGS += $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
- at HAVE_NSSI_TRUE@am__append_42 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_43 = libadiosreadf.a libadiosreadf_v1.a
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_44 = read/read_dataspaces.c
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_45 = read/read_dimes.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_46 = read/read_datatap.c
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_47 = read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_48 = nssi/adios_nssi_config.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_49 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_50 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_51 = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
+ at HAVE_NSSI_TRUE@am__append_49 = $(ADIOSLIB_CFLAGS) 
+ at BUILD_FORTRAN_TRUE@am__append_50 = libadiosreadf.a libadiosreadf_v1.a
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_51 = read/read_dataspaces.c
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_52 = read/read_dimes.c
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_53 = read/read_datatap.c
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_54 = read/read_flexpath.c
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__append_55 = read/read_icee.c
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_56 = nssi/adios_nssi_config.c read/read_nssi.c
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_57 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_58 = $(ADIOSLIB_CFLAGS) 
+ at BUILD_FORTRAN_TRUE@am__append_59 = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
 
 #nodist_libadiosreadf_a_SOURCES += adios_read_mod.mod
- at BUILD_FORTRAN_TRUE@am__append_52 = adios_read_mod.mod adios_defs_mod.mod
- at BUILD_FORTRAN_TRUE@am__append_53 = adios_read_mod.mod adios_defs_mod.mod
- at HAVE_DATASPACES_TRUE@am__append_54 = read/read_dataspaces.c
- at HAVE_DIMES_TRUE@am__append_55 = read/read_dimes.c
- at HAVE_DATATAP_TRUE@am__append_56 = read/read_datatap.c
- at HAVE_FLEXPATH_TRUE@am__append_57 = read/read_flexpath.c
- at HAVE_NSSI_TRUE@am__append_58 = nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_NSSI_TRUE@am__append_59 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at HAVE_NSSI_TRUE@am__append_60 = $(ADIOSLIB_CFLAGS) 
+ at BUILD_FORTRAN_TRUE@am__append_60 = adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod
+ at BUILD_FORTRAN_TRUE@am__append_61 = adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod
+ at HAVE_DATASPACES_TRUE@am__append_62 = read/read_dataspaces.c
+ at HAVE_DIMES_TRUE@am__append_63 = read/read_dimes.c
+ at HAVE_DATATAP_TRUE@am__append_64 = read/read_datatap.c
+ at HAVE_FLEXPATH_TRUE@am__append_65 = read/read_flexpath.c
+ at HAVE_ICEE_TRUE@am__append_66 = read/read_icee.c
+ at HAVE_NSSI_TRUE@am__append_67 = nssi/adios_nssi_config.c read/read_nssi.c
+ at HAVE_NSSI_TRUE@am__append_68 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at HAVE_NSSI_TRUE@am__append_69 = $(ADIOSLIB_CFLAGS) 
 
 # Note: utils/adios_lint needs to link with adios_internals_mxml.o which depends
 #       on adios_internals.c, buffer.c and adios_transport_hooks.c. 
 #       We put these objects in libadiosread_nompi
 #       so we do not need to make another _nompi lib just for adios_lint
- at BUILD_FORTRAN_TRUE@am__append_61 = libadiosreadf_nompi.a libadiosreadf_nompi_v1.a
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_62 = read/read_dataspaces.c
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_63 = read/read_dimes.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_64 = read/read_datatap.c
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_65 = read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_66 = nssi/adios_nssi_config.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_67 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL \
+ at BUILD_FORTRAN_TRUE@am__append_70 = libadiosreadf_nompi.a libadiosreadf_nompi_v1.a
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_71 = read/read_dataspaces.c
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_72 = read/read_dimes.c
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_73 = read/read_datatap.c
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_74 = read/read_flexpath.c
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__append_75 = read/read_icee.c
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_76 = nssi/adios_nssi_config.c read/read_nssi.c
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_77 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	$(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	$(ADIOSLIB_CPPFLAGS) # \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	$(MACRODEFFLAG)USE_TIMERS
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_68 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_69 = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
- at BUILD_WRITE_TRUE@am__append_70 = core/adios_internals_mxml.c 
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_78 = $(ADIOSLIB_CFLAGS) 
+ at BUILD_FORTRAN_TRUE@am__append_79 = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
+ at BUILD_WRITE_TRUE@am__append_80 = core/adios_internals_mxml.c 
 #Note: $(MACRODEFFLAG)NOMPI chokes IBM's bgxlf compiler but it can pass $(MACRODEFFLAG)_NOMPI. 
- at HAVE_DMALLOC_TRUE@am__append_71 = $(MACRODEFFLAG)DMALLOC 
- at HAVE_DMALLOC_TRUE@am__append_72 = $(MACRODEFFLAG)DMALLOC 
+ at HAVE_DMALLOC_TRUE@am__append_81 = $(MACRODEFFLAG)DMALLOC 
+ at HAVE_DMALLOC_TRUE@am__append_82 = $(MACRODEFFLAG)DMALLOC 
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -155,6 +167,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -171,11 +184,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -214,7 +232,8 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.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/adios_timing.c core/adios_read_hooks.c \
+	core/adios_infocache.c core/adios_read_ext.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 \
 	core/adios_copyspec.h core/adios_subvolume.h \
@@ -228,11 +247,11 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -263,7 +282,12 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adios_query.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 \
@@ -271,8 +295,8 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.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 \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c nssi/adios_nssi_config.c write/adios_nssi.c \
 	nssi/adios_nssi_filter.c read/read_nssi.c
 am__objects_1 =
 am__objects_2 = $(am__objects_1) \
@@ -293,7 +317,8 @@ am__objects_4 = $(am__objects_1) \
 	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)
+	libadios_a-adios_selection_util.$(OBJEXT) \
+	libadios_a-adios_read_ext.$(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) \
@@ -307,18 +332,30 @@ am__objects_6 = $(am__objects_1) \
 	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) \
+am__objects_7 = $(am__objects_1) libadios_a-common_query.$(OBJEXT) \
+	libadios_a-adios_query_hooks.$(OBJEXT) \
+	libadios_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_8 = libadios_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadios_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_9 = libadios_a-query_alac.$(OBJEXT)
+am__objects_10 = $(am__objects_1)
+am__objects_11 = $(am__objects_8) $(am__objects_9) $(am__objects_10)
+am__objects_12 = $(am__objects_7) $(am__objects_11)
+am__objects_13 = $(am__objects_12) libadios_a-adios_query.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_14 = libadios_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_15 = 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_9 = libadios_a-adios_dimes.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_16 = 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_10 = libadios_a-adios_datatap.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_17 = 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_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) \
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_18 = libadios_a-adios_phdf5.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_19 = libadios_a-adios_nc4.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_20 = 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_14 = libadios_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_21 = libadios_a-adios_icee.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadios_a-read_icee.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_22 = 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)
@@ -335,6 +372,8 @@ am__objects_6 = $(am__objects_1) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_read.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_read_v1.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-common_read.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_a-adios_infocache.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_a-adios_read_ext.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-globals.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_timing.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_read_hooks.$(OBJEXT) \
@@ -344,7 +383,7 @@ am__objects_6 = $(am__objects_1) \
 @BUILD_WRITE_TRUE@	libadios_a-util.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-qhashtbl.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	$(am__objects_2) $(am__objects_4) \
- at BUILD_WRITE_TRUE@	$(am__objects_6) \
+ at BUILD_WRITE_TRUE@	$(am__objects_6) $(am__objects_13) \
 @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) \
@@ -354,10 +393,11 @@ am__objects_6 = $(am__objects_1) \
 @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_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)
+ at BUILD_WRITE_TRUE@	$(am__objects_14) $(am__objects_15) \
+ at BUILD_WRITE_TRUE@	$(am__objects_16) $(am__objects_17) \
+ at BUILD_WRITE_TRUE@	$(am__objects_18) $(am__objects_19) \
+ at BUILD_WRITE_TRUE@	$(am__objects_20) $(am__objects_21) \
+ at BUILD_WRITE_TRUE@	$(am__objects_22)
 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)
@@ -393,36 +433,52 @@ am__libadios_internal_nompi_a_SOURCES_DIST = core/mpidummy.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adios_query.c core/buffer.c \
 	core/adios_error.c core/adios_logger.c core/adios_timing.c \
 	core/util.c core/qhashtbl.c core/futils.c \
 	core/adios_transport_hooks.c core/adios_internals_mxml.c
-am__objects_15 = $(am__objects_1) \
+am__objects_23 = $(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) \
+am__objects_24 = 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) \
+am__objects_25 = $(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)
- at BUILD_WRITE_TRUE@am__objects_18 = libadios_internal_nompi_a-adios_internals_mxml.$(OBJEXT)
+	$(am__objects_24)
+am__objects_26 = $(am__objects_1) \
+	libadios_internal_nompi_a-common_query.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_query_hooks.$(OBJEXT) \
+	libadios_internal_nompi_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_27 = libadios_internal_nompi_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadios_internal_nompi_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_28 = libadios_internal_nompi_a-query_alac.$(OBJEXT)
+am__objects_29 = $(am__objects_27) $(am__objects_28) $(am__objects_10)
+am__objects_30 = $(am__objects_26) $(am__objects_29)
+am__objects_31 = $(am__objects_30) \
+	libadios_internal_nompi_a-adios_query.$(OBJEXT)
+ at BUILD_WRITE_TRUE@am__objects_32 = libadios_internal_nompi_a-adios_internals_mxml.$(OBJEXT)
 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) \
+	$(am__objects_23) $(am__objects_25) $(am__objects_31) \
 	libadios_internal_nompi_a-buffer.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_error.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_logger.$(OBJEXT) \
@@ -431,7 +487,7 @@ am_libadios_internal_nompi_a_OBJECTS =  \
 	libadios_internal_nompi_a-qhashtbl.$(OBJEXT) \
 	libadios_internal_nompi_a-futils.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_transport_hooks.$(OBJEXT) \
-	$(am__objects_18)
+	$(am__objects_32)
 libadios_internal_nompi_a_OBJECTS =  \
 	$(am_libadios_internal_nompi_a_OBJECTS)
 libadios_nompi_a_AR = $(AR) $(ARFLAGS)
@@ -449,11 +505,11 @@ am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -462,6 +518,7 @@ am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.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 \
+	core/adios_read_ext.c \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
 	transforms/adios_transform_bzip2_read.c \
@@ -484,25 +541,31 @@ am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adios_query.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 write/adios_flexpath.c \
-	read/read_flexpath.c
-am__objects_19 = $(am__objects_1) \
+	core/adios_read_v1.c core/common_read.c core/adios_infocache.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 \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c
+am__objects_33 = $(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_20 =  \
+am__objects_34 =  \
 	libadios_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -510,15 +573,15 @@ am__objects_20 =  \
 	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_21 = $(am__objects_1) \
+am__objects_35 = $(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_20)
-am__objects_22 =  \
+	libadios_nompi_a-adios_read_ext.$(OBJEXT) $(am__objects_34)
+am__objects_36 =  \
 	libadios_nompi_a-adios_transform_identity_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -526,27 +589,42 @@ am__objects_22 =  \
 	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_23 = $(am__objects_1) \
+am__objects_37 = $(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_22)
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_24 = libadios_nompi_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_36)
+am__objects_38 = $(am__objects_1) \
+	libadios_nompi_a-common_query.$(OBJEXT) \
+	libadios_nompi_a-adios_query_hooks.$(OBJEXT) \
+	libadios_nompi_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_39 =  \
+ at HAVE_FASTBIT_TRUE@	libadios_nompi_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadios_nompi_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_40 =  \
+ at HAVE_ALACRITY_TRUE@	libadios_nompi_a-query_alac.$(OBJEXT)
+am__objects_41 = $(am__objects_39) $(am__objects_40) $(am__objects_10)
+am__objects_42 = $(am__objects_38) $(am__objects_41)
+am__objects_43 = $(am__objects_42) \
+	libadios_nompi_a-adios_query.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_44 = 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_25 = libadios_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_45 = 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_26 = libadios_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_46 = libadios_nompi_a-adios_datatap.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadios_nompi_a-read_datatap.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_27 = libadios_nompi_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_47 = libadios_nompi_a-adios_flexpath.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadios_nompi_a-read_flexpath.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_48 = libadios_nompi_a-adios_icee.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadios_nompi_a-read_icee.$(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_19) $(am__objects_21) \
- at BUILD_WRITE_TRUE@	$(am__objects_23) \
+ at BUILD_WRITE_TRUE@	$(am__objects_33) $(am__objects_35) \
+ at BUILD_WRITE_TRUE@	$(am__objects_37) $(am__objects_43) \
 @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) \
@@ -556,6 +634,8 @@ am__objects_23 = $(am__objects_1) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_read.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_read_v1.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-common_read.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_nompi_a-adios_infocache.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_nompi_a-adios_read_ext.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-globals.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-mpidummy.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_timing.$(OBJEXT) \
@@ -570,8 +650,9 @@ am__objects_23 = $(am__objects_1) \
 @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_24) $(am__objects_25) \
- at BUILD_WRITE_TRUE@	$(am__objects_26) $(am__objects_27)
+ at BUILD_WRITE_TRUE@	$(am__objects_44) $(am__objects_45) \
+ at BUILD_WRITE_TRUE@	$(am__objects_46) $(am__objects_47) \
+ at BUILD_WRITE_TRUE@	$(am__objects_48)
 libadios_nompi_a_OBJECTS = $(am_libadios_nompi_a_OBJECTS)
 libadiosf_a_AR = $(AR) $(ARFLAGS)
 libadiosf_a_LIBADD =
@@ -588,11 +669,11 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -601,6 +682,7 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	core/adios_read_ext.c \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
 	transforms/adios_transform_bzip2_read.c \
@@ -623,75 +705,95 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
-	read/read_datatap.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.c write/adios_mpi_lustre.c \
-	write/adios_mpi_amr.c write/adios_var_merge.c \
-	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_28 = $(am__objects_1) \
+	core/adios_infocache.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 read/read_datatap.c \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c nssi/adios_nssi_config.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_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 query/adios_query_mod.f90
+am__objects_49 = $(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_29 = libadiosf_a-adios_transform_identity_read.$(OBJEXT) \
+am__objects_50 = 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_30 = $(am__objects_1) \
+am__objects_51 = $(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_29)
-am__objects_31 = libadiosf_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_a-adios_selection_util.$(OBJEXT) \
+	libadiosf_a-adios_read_ext.$(OBJEXT) $(am__objects_50)
+am__objects_52 = 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_32 = $(am__objects_1) \
+am__objects_53 = $(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_31)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_33 = libadiosf_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_52)
+am__objects_54 = $(am__objects_1) libadiosf_a-common_query.$(OBJEXT) \
+	libadiosf_a-adios_query_hooks.$(OBJEXT) \
+	libadiosf_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_55 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosf_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosf_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_56 = libadiosf_a-query_alac.$(OBJEXT)
+am__objects_57 = $(am__objects_55) $(am__objects_56) $(am__objects_10)
+am__objects_58 = $(am__objects_54) $(am__objects_57)
+am__objects_59 = $(am__objects_58) libadiosf_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_60 = 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_34 = libadiosf_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_61 = 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_35 = libadiosf_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_62 = 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_36 = libadiosf_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_63 = 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_37 = libadiosf_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_64 = libadiosf_a-adios_icee.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadiosf_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_65 = 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_38 = libadiosf_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_66 = 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_28) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_30) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_32) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_49) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_51) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_53) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_59) \
 @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) \
@@ -699,6 +801,8 @@ am__objects_32 = $(am__objects_1) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_read_ext.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_timing.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_read_hooks.$(OBJEXT) \
@@ -712,28 +816,30 @@ am__objects_32 = $(am__objects_1) \
 @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_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@	$(am__objects_36) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_37)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_39 = libadiosf_a-adios_mpi_bgq.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_40 = libadiosf_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_41 = libadiosf_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_42 = libadiosf_a-adios_mpi.$(OBJEXT) \
+ 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@	$(am__objects_63) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_64) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_65)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_67 = libadiosf_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_68 = libadiosf_a-adios_phdf5.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_69 = libadiosf_a-adios_nc4.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_70 = 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_39) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_40) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_41)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_67) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_68) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_69)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_38) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_42) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_66) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_70) \
 @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) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_read_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_read_mod.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adios_query_mod.$(OBJEXT)
 am__dist_libadiosf_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosf_a_OBJECTS =
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at nodist_libadiosf_a_OBJECTS = libadiosf_a-adios_nssi_args.$(OBJEXT)
@@ -754,11 +860,11 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -767,6 +873,7 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	core/adios_read_ext.c \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
 	transforms/adios_transform_bzip2_read.c \
@@ -789,27 +896,34 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
-	read/read_datatap.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 \
-	core/mpidummy.c core/adiosf_read.c core/adiosf_defs_mod.f90 \
-	core/adiosf_write_mod.f90 core/adiosf_read_mod.f90
-am__objects_43 = $(am__objects_1) \
+	core/adios_infocache.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 read/read_datatap.c \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c nssi/adios_nssi_config.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 \
+	query/adios_query_mod.f90
+am__objects_71 = $(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_44 =  \
+am__objects_72 =  \
 	libadiosf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -817,15 +931,15 @@ am__objects_44 =  \
 	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_45 = $(am__objects_1) \
+am__objects_73 = $(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_44)
-am__objects_46 =  \
+	libadiosf_nompi_a-adios_read_ext.$(OBJEXT) $(am__objects_72)
+am__objects_74 =  \
 	libadiosf_nompi_a-adios_transform_identity_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -833,31 +947,47 @@ am__objects_46 =  \
 	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_47 = $(am__objects_1) \
+am__objects_75 = $(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_46)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_48 = libadiosf_nompi_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_74)
+am__objects_76 = $(am__objects_1) \
+	libadiosf_nompi_a-common_query.$(OBJEXT) \
+	libadiosf_nompi_a-adios_query_hooks.$(OBJEXT) \
+	libadiosf_nompi_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_77 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosf_nompi_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosf_nompi_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_78 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosf_nompi_a-query_alac.$(OBJEXT)
+am__objects_79 = $(am__objects_77) $(am__objects_78) $(am__objects_10)
+am__objects_80 = $(am__objects_76) $(am__objects_79)
+am__objects_81 = $(am__objects_80) \
+	libadiosf_nompi_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_82 = 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_49 = libadiosf_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_83 = 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_50 = libadiosf_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_84 = 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_51 = libadiosf_nompi_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_85 = 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_52 = libadiosf_nompi_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_86 = libadiosf_nompi_a-adios_icee.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadiosf_nompi_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_87 = 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_53 = libadiosf_nompi_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_88 = 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_43) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_45) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_47) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_71) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_73) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_75) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_81) \
 @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) \
@@ -865,6 +995,8 @@ am__objects_47 = $(am__objects_1) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_read_ext.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_timing.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_read_hooks.$(OBJEXT) \
@@ -878,19 +1010,21 @@ am__objects_47 = $(am__objects_1) \
 @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_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@	$(am__objects_51) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_52)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_54 = libadiosf_nompi_a-mpidummy.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_82) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_83) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_84) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_85) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_86) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_87)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_89 = 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_53) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_54) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_88) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_89) \
 @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) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_read_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_read_mod.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adios_query_mod.$(OBJEXT)
 libadiosf_nompi_a_OBJECTS = $(am_libadiosf_nompi_a_OBJECTS)
 libadiosf_nompi_v1_a_AR = $(AR) $(ARFLAGS)
 libadiosf_nompi_v1_a_LIBADD =
@@ -907,11 +1041,11 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -920,6 +1054,7 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.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 \
+	core/adios_read_ext.c \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
 	transforms/adios_transform_bzip2_read.c \
@@ -942,27 +1077,33 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
-	read/read_datatap.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 \
-	core/mpidummy.c core/adiosf_read_v1.c core/adiosf_defs_mod.f90 \
+	core/adios_infocache.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 read/read_datatap.c \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c nssi/adios_nssi_config.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
-am__objects_55 = $(am__objects_1) \
+am__objects_90 = $(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_56 =  \
+am__objects_91 =  \
 	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) \
@@ -970,15 +1111,16 @@ am__objects_56 =  \
 	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_57 = $(am__objects_1) \
+am__objects_92 = $(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_56)
-am__objects_58 =  \
+	libadiosf_nompi_v1_a-adios_read_ext.$(OBJEXT) \
+	$(am__objects_91)
+am__objects_93 =  \
 	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) \
@@ -986,31 +1128,46 @@ am__objects_58 =  \
 	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_59 = $(am__objects_1) \
+am__objects_94 = $(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_58)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_60 = libadiosf_nompi_v1_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_93)
+am__objects_95 = $(am__objects_1) \
+	libadiosf_nompi_v1_a-common_query.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_query_hooks.$(OBJEXT) \
+	libadiosf_nompi_v1_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_96 = libadiosf_nompi_v1_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosf_nompi_v1_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_97 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosf_nompi_v1_a-query_alac.$(OBJEXT)
+am__objects_98 = $(am__objects_96) $(am__objects_97) $(am__objects_10)
+am__objects_99 = $(am__objects_95) $(am__objects_98)
+am__objects_100 = $(am__objects_99) \
+	libadiosf_nompi_v1_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_101 = 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_61 = libadiosf_nompi_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_102 = 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_62 = libadiosf_nompi_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_103 = 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_63 = libadiosf_nompi_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_104 = 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_64 = libadiosf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_105 = libadiosf_nompi_v1_a-adios_icee.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadiosf_nompi_v1_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_106 = 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_65 = libadiosf_nompi_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_107 = 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_55) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_57) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_59) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_90) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_92) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_94) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_100) \
 @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) \
@@ -1018,6 +1175,8 @@ am__objects_59 = $(am__objects_1) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_read_ext.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_timing.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_read_hooks.$(OBJEXT) \
@@ -1031,15 +1190,16 @@ am__objects_59 = $(am__objects_1) \
 @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_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@	$(am__objects_63) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_64)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_66 = libadiosf_nompi_v1_a-mpidummy.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_101) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_102) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_103) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_104) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_105) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_106)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_108 = 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_65) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_66) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_107) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_108) \
 @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)
@@ -1059,11 +1219,11 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1072,6 +1232,7 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	core/adios_read_ext.c \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
 	transforms/adios_transform_bzip2_read.c \
@@ -1094,30 +1255,35 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.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 \
+	transforms/adios_transform_alacrity_write.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
-	read/read_datatap.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.c write/adios_mpi_lustre.c \
-	write/adios_mpi_amr.c write/adios_var_merge.c \
-	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_67 = $(am__objects_1) \
+	core/adios_infocache.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 read/read_datatap.c \
+	write/adios_flexpath.c read/read_flexpath.c write/adios_icee.c \
+	read/read_icee.c nssi/adios_nssi_config.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_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_109 = $(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_68 =  \
+am__objects_110 =  \
 	libadiosf_v1_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1125,15 +1291,15 @@ am__objects_68 =  \
 	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_69 = $(am__objects_1) \
+am__objects_111 = $(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_68)
-am__objects_70 =  \
+	libadiosf_v1_a-adios_read_ext.$(OBJEXT) $(am__objects_110)
+am__objects_112 =  \
 	libadiosf_v1_a-adios_transform_identity_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -1141,31 +1307,48 @@ am__objects_70 =  \
 	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_71 = $(am__objects_1) \
+am__objects_113 = $(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_70)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_72 = libadiosf_v1_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_112)
+am__objects_114 = $(am__objects_1) \
+	libadiosf_v1_a-common_query.$(OBJEXT) \
+	libadiosf_v1_a-adios_query_hooks.$(OBJEXT) \
+	libadiosf_v1_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_115 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosf_v1_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosf_v1_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_116 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosf_v1_a-query_alac.$(OBJEXT)
+am__objects_117 = $(am__objects_115) $(am__objects_116) \
+	$(am__objects_10)
+am__objects_118 = $(am__objects_114) $(am__objects_117)
+am__objects_119 = $(am__objects_118) \
+	libadiosf_v1_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_120 = 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_73 = libadiosf_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_121 = 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_74 = libadiosf_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_122 = 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_75 = libadiosf_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_123 = 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_76 = libadiosf_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE at am__objects_124 = libadiosf_v1_a-adios_icee.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_ICEE_TRUE@	libadiosf_v1_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_125 = 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_77 = libadiosf_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_126 = 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_67) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_69) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_71) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_109) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_111) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_113) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_119) \
 @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) \
@@ -1173,6 +1356,8 @@ am__objects_71 = $(am__objects_1) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_read_ext.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_timing.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_read_hooks.$(OBJEXT) \
@@ -1186,24 +1371,25 @@ am__objects_71 = $(am__objects_1) \
 @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_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@	$(am__objects_75) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_76)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_78 = libadiosf_v1_a-adios_mpi_bgq.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_79 = libadiosf_v1_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_80 = libadiosf_v1_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_81 = libadiosf_v1_a-adios_mpi.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_120) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_121) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_122) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_123) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_124) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_125)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_127 = libadiosf_v1_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_128 = libadiosf_v1_a-adios_phdf5.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_129 = libadiosf_v1_a-adios_nc4.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_130 = 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_78) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_79) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_80)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_127) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_128) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_129)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_77) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_81) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_126) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_130) \
 @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)
@@ -1213,7 +1399,8 @@ 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/adios_copyspec.h \
+	core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1224,11 +1411,11 @@ am__libadiosread_a_SOURCES_DIST = core/adios_bp_v1.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1243,18 +1430,23 @@ am__libadiosread_a_SOURCES_DIST = core/adios_bp_v1.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adios_query.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_82 = $(am__objects_1) \
+	read/read_icee.c nssi/adios_nssi_config.c read/read_nssi.c
+am__objects_131 = $(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_83 =  \
+am__objects_132 =  \
 	libadiosread_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1262,21 +1454,37 @@ am__objects_83 =  \
 	libadiosread_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_84 = $(am__objects_1) \
+am__objects_133 = $(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_83)
- at HAVE_DATASPACES_TRUE@am__objects_85 = libadiosread_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_86 = libadiosread_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_87 =  \
+	libadiosread_a-adios_read_ext.$(OBJEXT) $(am__objects_132)
+am__objects_134 = $(am__objects_1) \
+	libadiosread_a-common_query.$(OBJEXT) \
+	libadiosread_a-adios_query_hooks.$(OBJEXT) \
+	libadiosread_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_135 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosread_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosread_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_136 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosread_a-query_alac.$(OBJEXT)
+am__objects_137 = $(am__objects_135) $(am__objects_136) \
+	$(am__objects_10)
+am__objects_138 = $(am__objects_134) $(am__objects_137)
+am__objects_139 = $(am__objects_138) \
+	libadiosread_a-adios_query.$(OBJEXT)
+ at HAVE_DATASPACES_TRUE@am__objects_140 = libadiosread_a-read_dataspaces.$(OBJEXT)
+ at HAVE_DIMES_TRUE@am__objects_141 =  \
+ at HAVE_DIMES_TRUE@	libadiosread_a-read_dimes.$(OBJEXT)
+ at HAVE_DATATAP_TRUE@am__objects_142 =  \
 @HAVE_DATATAP_TRUE@	libadiosread_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_88 =  \
+ at HAVE_FLEXPATH_TRUE@am__objects_143 =  \
 @HAVE_FLEXPATH_TRUE@	libadiosread_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_89 =  \
+ at HAVE_ICEE_TRUE@am__objects_144 = libadiosread_a-read_icee.$(OBJEXT)
+ at HAVE_NSSI_TRUE@am__objects_145 =  \
 @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) \
@@ -1286,17 +1494,20 @@ 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) $(am__objects_82) \
-	$(am__objects_84) libadiosread_a-globals.$(OBJEXT) \
+	libadiosread_a-common_read.$(OBJEXT) \
+	libadiosread_a-adios_infocache.$(OBJEXT) \
+	libadiosread_a-adios_read_ext.$(OBJEXT) $(am__objects_131) \
+	$(am__objects_133) $(am__objects_139) \
+	libadiosread_a-globals.$(OBJEXT) \
 	libadiosread_a-adios_read_hooks.$(OBJEXT) \
 	libadiosread_a-adios_logger.$(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_85) \
-	$(am__objects_86) $(am__objects_87) $(am__objects_88) \
-	$(am__objects_89)
+	libadiosread_a-read_bp_staged1.$(OBJEXT) $(am__objects_140) \
+	$(am__objects_141) $(am__objects_142) $(am__objects_143) \
+	$(am__objects_144) $(am__objects_145)
 am__dist_libadiosread_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosread_a_OBJECTS =
 @HAVE_NSSI_TRUE at nodist_libadiosread_a_OBJECTS =  \
@@ -1309,7 +1520,8 @@ 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_copyspec.h \
+	core/adios_read_v1.c core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1320,11 +1532,11 @@ am__libadiosread_nompi_a_SOURCES_DIST = core/mpidummy.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1339,17 +1551,23 @@ am__libadiosread_nompi_a_SOURCES_DIST = core/mpidummy.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adios_query.c 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 \
 	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_90 = $(am__objects_1) \
+	read/read_flexpath.c read/read_icee.c nssi/adios_nssi_config.c \
+	read/read_nssi.c
+am__objects_146 = $(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_91 =  \
+am__objects_147 =  \
 	libadiosread_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1357,20 +1575,36 @@ am__objects_91 =  \
 	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_92 = $(am__objects_1) \
+am__objects_148 = $(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_91)
- at HAVE_DATASPACES_TRUE@am__objects_93 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_94 =  \
+	libadiosread_nompi_a-adios_read_ext.$(OBJEXT) \
+	$(am__objects_147)
+am__objects_149 = $(am__objects_1) \
+	libadiosread_nompi_a-common_query.$(OBJEXT) \
+	libadiosread_nompi_a-adios_query_hooks.$(OBJEXT) \
+	libadiosread_nompi_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_150 = libadiosread_nompi_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosread_nompi_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_151 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosread_nompi_a-query_alac.$(OBJEXT)
+am__objects_152 = $(am__objects_150) $(am__objects_151) \
+	$(am__objects_10)
+am__objects_153 = $(am__objects_149) $(am__objects_152)
+am__objects_154 = $(am__objects_153) \
+	libadiosread_nompi_a-adios_query.$(OBJEXT)
+ at HAVE_DATASPACES_TRUE@am__objects_155 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
+ at HAVE_DIMES_TRUE@am__objects_156 =  \
 @HAVE_DIMES_TRUE@	libadiosread_nompi_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_95 = libadiosread_nompi_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_96 = libadiosread_nompi_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_97 = libadiosread_nompi_a-adios_nssi_config.$(OBJEXT) \
+ at HAVE_DATATAP_TRUE@am__objects_157 = libadiosread_nompi_a-read_datatap.$(OBJEXT)
+ at HAVE_FLEXPATH_TRUE@am__objects_158 = libadiosread_nompi_a-read_flexpath.$(OBJEXT)
+ at HAVE_ICEE_TRUE@am__objects_159 =  \
+ at HAVE_ICEE_TRUE@	libadiosread_nompi_a-read_icee.$(OBJEXT)
+ at HAVE_NSSI_TRUE@am__objects_160 = 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) \
@@ -1381,16 +1615,19 @@ 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) $(am__objects_90) \
-	$(am__objects_92) libadiosread_nompi_a-adios_logger.$(OBJEXT) \
+	libadiosread_nompi_a-common_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_infocache.$(OBJEXT) \
+	libadiosread_nompi_a-adios_read_ext.$(OBJEXT) \
+	$(am__objects_146) $(am__objects_148) $(am__objects_154) \
+	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-qhashtbl.$(OBJEXT) \
-	libadiosread_nompi_a-read_bp.$(OBJEXT) $(am__objects_93) \
-	$(am__objects_94) $(am__objects_95) $(am__objects_96) \
-	$(am__objects_97)
+	libadiosread_nompi_a-read_bp.$(OBJEXT) $(am__objects_155) \
+	$(am__objects_156) $(am__objects_157) $(am__objects_158) \
+	$(am__objects_159) $(am__objects_160)
 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)
@@ -1401,7 +1638,8 @@ 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/adios_copyspec.h \
+	core/adios_error.c core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1412,11 +1650,11 @@ am__libadiosreadf_a_SOURCES_DIST = core/adios_bp_v1.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1431,19 +1669,25 @@ am__libadiosreadf_a_SOURCES_DIST = core/adios_bp_v1.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 core/adiosf_read.c \
-	core/adiosf_defs_mod.f90 core/adiosf_read_mod.f90
-am__objects_98 = $(am__objects_1) \
+	read/read_icee.c nssi/adios_nssi_config.c read/read_nssi.c \
+	core/adiosf_read.c core/adiosf_defs_mod.f90 \
+	core/adiosf_read_mod.f90 query/adios_query_mod.f90
+am__objects_161 = $(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_99 =  \
+am__objects_162 =  \
 	libadiosreadf_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1451,28 +1695,46 @@ am__objects_99 =  \
 	libadiosreadf_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_100 = $(am__objects_1) \
+am__objects_163 = $(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_99)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_101 = libadiosreadf_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_102 = libadiosreadf_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_103 = libadiosreadf_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_104 = libadiosreadf_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_105 = libadiosreadf_a-adios_nssi_config.$(OBJEXT) \
+	libadiosreadf_a-adios_read_ext.$(OBJEXT) $(am__objects_162)
+am__objects_164 = $(am__objects_1) \
+	libadiosreadf_a-common_query.$(OBJEXT) \
+	libadiosreadf_a-adios_query_hooks.$(OBJEXT) \
+	libadiosreadf_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_165 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_166 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosreadf_a-query_alac.$(OBJEXT)
+am__objects_167 = $(am__objects_165) $(am__objects_166) \
+	$(am__objects_10)
+am__objects_168 = $(am__objects_164) $(am__objects_167)
+am__objects_169 = $(am__objects_168) \
+	libadiosreadf_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_170 = libadiosreadf_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_171 = libadiosreadf_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_172 = libadiosreadf_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_173 = libadiosreadf_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__objects_174 = libadiosreadf_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_175 = libadiosreadf_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_106 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_176 =  \
 @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_98) $(am__objects_100) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_read_ext.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_161) $(am__objects_163) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_169) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_logger.$(OBJEXT) \
@@ -1481,13 +1743,14 @@ am__objects_100 = $(am__objects_1) \
 @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_101) $(am__objects_102) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_103) $(am__objects_104) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_105)
- at BUILD_FORTRAN_TRUE@am_libadiosreadf_a_OBJECTS = $(am__objects_106) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_170) $(am__objects_171) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_172) $(am__objects_173) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_174) $(am__objects_175)
+ at BUILD_FORTRAN_TRUE@am_libadiosreadf_a_OBJECTS = $(am__objects_176) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adiosf_read.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	adiosf_defs_mod.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	adiosf_read_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@	adiosf_read_mod.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	adios_query_mod.$(OBJEXT)
 am__dist_libadiosreadf_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosreadf_a_OBJECTS =
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at nodist_libadiosreadf_a_OBJECTS = libadiosreadf_a-adios_nssi_args.$(OBJEXT)
@@ -1499,7 +1762,8 @@ 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/adios_copyspec.h \
+	core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1510,11 +1774,11 @@ am__libadiosreadf_nompi_a_SOURCES_DIST = core/mpidummy.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1529,17 +1793,22 @@ am__libadiosreadf_nompi_a_SOURCES_DIST = core/mpidummy.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
+	read/read_datatap.c read/read_flexpath.c read/read_icee.c \
 	nssi/adios_nssi_config.c read/read_nssi.c core/adiosf_read.c
-am__objects_107 = $(am__objects_1) \
+am__objects_177 = $(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_108 =  \
+am__objects_178 =  \
 	libadiosreadf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1547,21 +1816,35 @@ am__objects_108 =  \
 	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_109 = $(am__objects_1) \
+am__objects_179 = $(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_108)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_110 = libadiosreadf_nompi_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_111 = libadiosreadf_nompi_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_112 = libadiosreadf_nompi_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_113 = libadiosreadf_nompi_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_114 = libadiosreadf_nompi_a-adios_nssi_config.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_read_ext.$(OBJEXT) \
+	$(am__objects_178)
+am__objects_180 = $(am__objects_1) \
+	libadiosreadf_nompi_a-common_query.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_query_hooks.$(OBJEXT) \
+	libadiosreadf_nompi_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_181 = libadiosreadf_nompi_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_nompi_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_182 = libadiosreadf_nompi_a-query_alac.$(OBJEXT)
+am__objects_183 = $(am__objects_181) $(am__objects_182) \
+	$(am__objects_10)
+am__objects_184 = $(am__objects_180) $(am__objects_183)
+am__objects_185 = $(am__objects_184) \
+	libadiosreadf_nompi_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_186 = libadiosreadf_nompi_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_187 = libadiosreadf_nompi_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_188 = libadiosreadf_nompi_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_189 = libadiosreadf_nompi_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__objects_190 = libadiosreadf_nompi_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_191 = 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_115 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_192 =  \
 @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) \
@@ -1570,17 +1853,20 @@ am__objects_109 = $(am__objects_1) \
 @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_107) $(am__objects_109) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_read_ext.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_177) $(am__objects_179) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_185) \
 @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) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-read_bp.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_110) $(am__objects_111) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_112) $(am__objects_113) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_114)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_186) $(am__objects_187) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_188) $(am__objects_189) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_190) $(am__objects_191)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_115) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_192) \
 @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 =
@@ -1593,7 +1879,8 @@ 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/adios_copyspec.h \
+	core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1604,11 +1891,11 @@ am__libadiosreadf_nompi_v1_a_SOURCES_DIST = core/mpidummy.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1623,39 +1910,58 @@ am__libadiosreadf_nompi_v1_a_SOURCES_DIST = core/mpidummy.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
+	read/read_datatap.c read/read_flexpath.c read/read_icee.c \
 	nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
-am__objects_116 = $(am__objects_1) \
+am__objects_193 = $(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_117 = libadiosreadf_nompi_v1_a-adios_transform_identity_read.$(OBJEXT) \
+am__objects_194 = 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_118 = $(am__objects_1) \
+am__objects_195 = $(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_117)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_119 = libadiosreadf_nompi_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_120 = libadiosreadf_nompi_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_121 = libadiosreadf_nompi_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_122 = libadiosreadf_nompi_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_123 = libadiosreadf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_read_ext.$(OBJEXT) \
+	$(am__objects_194)
+am__objects_196 = $(am__objects_1) \
+	libadiosreadf_nompi_v1_a-common_query.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_query_hooks.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_197 = libadiosreadf_nompi_v1_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_nompi_v1_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_198 = libadiosreadf_nompi_v1_a-query_alac.$(OBJEXT)
+am__objects_199 = $(am__objects_197) $(am__objects_198) \
+	$(am__objects_10)
+am__objects_200 = $(am__objects_196) $(am__objects_199)
+am__objects_201 = $(am__objects_200) \
+	libadiosreadf_nompi_v1_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_202 = libadiosreadf_nompi_v1_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_203 = libadiosreadf_nompi_v1_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_204 = libadiosreadf_nompi_v1_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_205 = libadiosreadf_nompi_v1_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__objects_206 = libadiosreadf_nompi_v1_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_207 = 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_124 = libadiosreadf_nompi_v1_a-mpidummy.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@am__objects_208 = 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) \
@@ -1663,17 +1969,20 @@ am__objects_118 = $(am__objects_1) \
 @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_116) $(am__objects_118) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_read_ext.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_193) $(am__objects_195) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_201) \
 @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) \
 @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_119) $(am__objects_120) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_121) $(am__objects_122) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_123)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_202) $(am__objects_203) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_204) $(am__objects_205) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_206) $(am__objects_207)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_124) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_208) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adiosf_read_v1.$(OBJEXT)
 libadiosreadf_nompi_v1_a_OBJECTS =  \
 	$(am_libadiosreadf_nompi_v1_a_OBJECTS)
@@ -1681,7 +1990,8 @@ 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/adios_copyspec.h \
+	core/adios_error.c core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.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 \
@@ -1692,11 +2002,11 @@ am__libadiosreadf_v1_a_SOURCES_DIST = core/adios_bp_v1.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_transforms_transinfo.h \
 	core/transforms/adios_patchdata.h \
 	core/transforms/adios_transforms_read.c \
 	core/transforms/adios_transforms_hooks_read.c \
@@ -1711,19 +2021,24 @@ am__libadiosreadf_v1_a_SOURCES_DIST = core/adios_bp_v1.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 \
+	transforms/adios_transform_alacrity_read.c \
+	query/common_query.h query/adios_query_hooks.h \
+	query/query_utils.h query/common_query.c \
+	query/adios_query_hooks.c query/query_utils.c \
+	query/query_fastbit.c query/fastbit_adios.c query/query_alac.c \
+	query/fastbit_adios.h query/adiosf_query.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 \
+	read/read_icee.c nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
-am__objects_125 = $(am__objects_1) \
+am__objects_209 = $(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_126 =  \
+am__objects_210 =  \
 	libadiosreadf_v1_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1731,28 +2046,46 @@ am__objects_126 =  \
 	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_127 = $(am__objects_1) \
+am__objects_211 = $(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_126)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_128 = libadiosreadf_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_129 = libadiosreadf_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_130 = libadiosreadf_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_131 = libadiosreadf_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_132 = libadiosreadf_v1_a-adios_nssi_config.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_read_ext.$(OBJEXT) $(am__objects_210)
+am__objects_212 = $(am__objects_1) \
+	libadiosreadf_v1_a-common_query.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_query_hooks.$(OBJEXT) \
+	libadiosreadf_v1_a-query_utils.$(OBJEXT)
+ at HAVE_FASTBIT_TRUE@am__objects_213 =  \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_v1_a-query_fastbit.$(OBJEXT) \
+ at HAVE_FASTBIT_TRUE@	libadiosreadf_v1_a-fastbit_adios.$(OBJEXT)
+ at HAVE_ALACRITY_TRUE@am__objects_214 =  \
+ at HAVE_ALACRITY_TRUE@	libadiosreadf_v1_a-query_alac.$(OBJEXT)
+am__objects_215 = $(am__objects_213) $(am__objects_214) \
+	$(am__objects_10)
+am__objects_216 = $(am__objects_212) $(am__objects_215)
+am__objects_217 = $(am__objects_216) \
+	libadiosreadf_v1_a-adiosf_query.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_218 = libadiosreadf_v1_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_219 = libadiosreadf_v1_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_220 = libadiosreadf_v1_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_221 = libadiosreadf_v1_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_ICEE_TRUE at am__objects_222 = libadiosreadf_v1_a-read_icee.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_223 = 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_133 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_224 =  \
 @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_125) $(am__objects_127) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_infocache.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_read_ext.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_209) $(am__objects_211) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_217) \
 @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) \
@@ -1761,11 +2094,11 @@ am__objects_127 = $(am__objects_1) \
 @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_128) $(am__objects_129) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_130) $(am__objects_131) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_132)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_218) $(am__objects_219) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_220) $(am__objects_221) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_222) $(am__objects_223)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_133) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_224) \
 @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) \
@@ -1887,6 +2220,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -1948,6 +2283,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -2033,7 +2371,7 @@ PAMI_LDFLAGS = @PAMI_LDFLAGS@
 PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
-PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@ $(am__append_16)
+PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@ $(am__append_19)
 PHDF5_LDFLAGS = @PHDF5_LDFLAGS@
 PHDF5_LIBS = @PHDF5_LIBS@
 PORTALS_CFLAGS = @PORTALS_CFLAGS@
@@ -2047,11 +2385,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -2117,7 +2457,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms -I$(top_srcdir)/src/core/query
 AUTOMAKE_OPTIONS = no-dependencies
 METASOURCES = AUTO
 @HAVE_NSSI_TRUE at nssi_staging_server_SOURCES = nssi/nssi_staging_server.cpp nssi/aggregation.cpp
@@ -2134,27 +2474,31 @@ 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_29) $(am__append_35) $(am__append_53)
+CLEANFILES = $(am__append_35) $(am__append_41) $(am__append_61)
 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_read_v2_fwd.h public/adios_selection.h \
-	public/adios_schema.h
-nodist_include_HEADERS = $(am__append_34) $(am__append_52)
-lib_LIBRARIES = $(am__append_2) $(am__append_4) libadiosread.a \
-	$(am__append_43) libadiosread_nompi.a $(am__append_61)
-libadiosread_a_CPPFLAGS = $(am__append_41) $(ADIOSLIB_EXTRA_CPPFLAGS) \
-	$(ADIOSREADLIB_CPPFLAGS) $(am__append_71)
-libadiosreadf_a_CPPFLAGS = $(am__append_49) $(am__append_51)
-libadiosread_nompi_a_CPPFLAGS = $(am__append_59) $(MACRODEFFLAG)_NOMPI \
+	public/adios_schema.h public/adios_read_ext.h \
+	public/adios_query.h
+nodist_include_HEADERS = $(am__append_40) $(am__append_60)
+lib_LIBRARIES = $(am__append_5) $(am__append_7) libadiosread.a \
+	$(am__append_50) libadiosread_nompi.a $(am__append_70)
+libadiosread_a_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_48) \
 	$(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) \
-	$(am__append_72)
-libadiosreadf_nompi_a_CPPFLAGS = $(am__append_67) $(am__append_69)
-libadiosread_a_CFLAGS = $(am__append_42)
-libadiosreadf_a_CFLAGS = $(am__append_50)
-libadiosread_nompi_a_CFLAGS = $(am__append_60)
-libadiosreadf_nompi_a_CFLAGS = $(am__append_68)
+	$(am__append_81)
+libadiosreadf_a_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_57) \
+	$(am__append_59)
+libadiosread_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_68) \
+	$(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) \
+	$(ADIOSREADLIB_CPPFLAGS) $(am__append_82)
+libadiosreadf_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_77) \
+	$(am__append_79)
+libadiosread_a_CFLAGS = $(am__append_49)
+libadiosreadf_a_CFLAGS = $(am__append_58)
+libadiosread_nompi_a_CFLAGS = $(am__append_69)
+libadiosreadf_nompi_a_CFLAGS = $(am__append_78)
 
 # Identity plugin:
 
@@ -2192,11 +2536,11 @@ transforms_common_HDRS = core/adios_copyspec.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 \
+transforms_read_HDRS = 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_transforms_transinfo.h \
                        core/transforms/adios_patchdata.h
 
 transforms_write_HDRS = core/transforms/adios_transforms_write.h \
@@ -2221,6 +2565,7 @@ transforms_read_SOURCES = $(transforms_read_HDRS) \
                           core/adios_selection_util.c \
                           core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
                           core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+                          core/adios_read_ext.c \
                           $(transforms_read_method_SOURCES)
 
 transforms_write_SOURCES = $(transforms_write_HDRS) \
@@ -2232,6 +2577,24 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
                            core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
                            $(transforms_write_method_SOURCES)
 
+
+#######Query source files 
+query_common_HDRS = query/common_query.h query/adios_query_hooks.h query/query_utils.h
+query_common_SOURCES = $(query_common_HDRS) \
+                       query/common_query.c  \
+                       query/adios_query_hooks.c \
+                       query/query_utils.c
+
+
+# Include source files that are specific to each query plugin
+query_method_HDRS = $(am__append_3)
+query_method_SOURCES = $(am__append_2) $(am__append_4) \
+	$(query_method_HDRS)
+query_SOURCES = $(query_common_SOURCES) \
+                     $(query_method_SOURCES)
+
+query_C_SOURCES = $(query_SOURCES) query/adios_query.c
+query_F_SOURCES = $(query_SOURCES) query/adiosf_query.c
 @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 \
@@ -2239,6 +2602,7 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_WRITE_TRUE@	core/bp_utils.c core/futils.c \
 @BUILD_WRITE_TRUE@	core/adios_error.c core/adios_read.c \
 @BUILD_WRITE_TRUE@	core/adios_read_v1.c core/common_read.c \
+ at BUILD_WRITE_TRUE@	core/adios_infocache.c core/adios_read_ext.c \
 @BUILD_WRITE_TRUE@	core/globals.c core/adios_timing.c \
 @BUILD_WRITE_TRUE@	core/adios_read_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_transport_hooks.c \
@@ -2246,25 +2610,29 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_WRITE_TRUE@	core/util.c core/qhashtbl.c \
 @BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
 @BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
- at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) read/read_bp.c \
+ at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(query_C_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_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_25)
+ at BUILD_WRITE_TRUE@	$(am__append_6) $(am__append_9) \
+ at BUILD_WRITE_TRUE@	$(am__append_12) $(am__append_15) \
+ at BUILD_WRITE_TRUE@	$(am__append_18) $(am__append_23) \
+ at BUILD_WRITE_TRUE@	$(am__append_25) $(am__append_28) \
+ at BUILD_WRITE_TRUE@	$(am__append_31)
 @BUILD_WRITE_TRUE at libadios_nompi_a_SOURCES = core/adios.c \
 @BUILD_WRITE_TRUE@	core/common_adios.c core/adios_internals.c \
 @BUILD_WRITE_TRUE@	core/adios_internals_mxml.c \
 @BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
 @BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
- at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) core/buffer.c \
+ at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(query_C_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 \
 @BUILD_WRITE_TRUE@	core/adios_read_v1.c core/common_read.c \
+ at BUILD_WRITE_TRUE@	core/adios_infocache.c core/adios_read_ext.c \
 @BUILD_WRITE_TRUE@	core/globals.c core/mpidummy.c \
 @BUILD_WRITE_TRUE@	core/adios_timing.c core/adios_read_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_transport_hooks.c \
@@ -2272,8 +2640,9 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @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_7) $(am__append_10) \
- at BUILD_WRITE_TRUE@	$(am__append_13) $(am__append_23)
+ at BUILD_WRITE_TRUE@	$(am__append_10) $(am__append_13) \
+ at BUILD_WRITE_TRUE@	$(am__append_16) $(am__append_26) \
+ at BUILD_WRITE_TRUE@	$(am__append_29)
 @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 \
@@ -2282,6 +2651,7 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(query_F_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 \
@@ -2289,6 +2659,8 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_error.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/bp_utils.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/common_read.c \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_infocache.c \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_read_ext.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/globals.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_timing.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_read_hooks.c \
@@ -2302,35 +2674,40 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @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_8) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_11) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_14) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_24) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_27)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_17) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_27) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_30) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_33)
 @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_5) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_18) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_21)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_8) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_21) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_24)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at FortranLibSEQSources = core/mpidummy.c
- at BUILD_WRITE_TRUE@libadios_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_17) \
- at BUILD_WRITE_TRUE@	$(am__append_26) $(am__append_30)
+ at BUILD_WRITE_TRUE@libadios_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_20) \
+ at BUILD_WRITE_TRUE@	$(am__append_32) $(am__append_36)
 @BUILD_WRITE_TRUE at libadios_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
- at BUILD_WRITE_TRUE@libadios_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
+ at BUILD_WRITE_TRUE@libadios_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_31)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_37)
 @BUILD_WRITE_TRUE at libadios_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
- at BUILD_WRITE_TRUE@libadiosf_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_19) \
- at BUILD_WRITE_TRUE@	$(am__append_28) $(am__append_32)
+ at BUILD_WRITE_TRUE@libadiosf_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_22) \
+ at BUILD_WRITE_TRUE@	$(am__append_34) $(am__append_38)
 @BUILD_WRITE_TRUE at libadiosf_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
- at BUILD_WRITE_TRUE@libadiosf_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
+ at BUILD_WRITE_TRUE@libadiosf_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at BUILD_WRITE_TRUE@	$(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_33)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_39)
 @BUILD_WRITE_TRUE at libadiosf_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at dist_libadios_a_SOURCES = nssi/adios_nssi_args.x
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at nodist_libadios_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
@@ -2345,7 +2722,8 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_defs_mod.f90 \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_write_mod.f90 \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read_mod.f90
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read_mod.f90 \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	query/adios_query_mod.f90
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at libadiosf_v1_a_SOURCES =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(FortranLibSources) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(FortranLibMPISources) \
@@ -2358,7 +2736,8 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_defs_mod.f90 \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_write_mod.f90 \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read_mod.f90
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf_read_mod.f90 \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	query/adios_query_mod.f90
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at libadiosf_nompi_v1_a_SOURCES =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(FortranLibSources) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(FortranLibSEQSources) \
@@ -2372,59 +2751,68 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 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 \
+	core/adios_infocache.c core/adios_read_ext.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 $(am__append_36) \
-	$(am__append_37) $(am__append_38) $(am__append_39) \
-	$(am__append_40)
+	$(query_C_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 $(am__append_42) \
+	$(am__append_43) $(am__append_44) $(am__append_45) \
+	$(am__append_46) $(am__append_47)
 @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 \
+ at BUILD_FORTRAN_TRUE@	core/common_read.c core/adios_infocache.c \
+ at BUILD_FORTRAN_TRUE@	core/adios_read_ext.c \
 @BUILD_FORTRAN_TRUE@	$(transforms_common_SOURCES) \
- at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) core/globals.c \
+ at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) \
+ at BUILD_FORTRAN_TRUE@	$(query_F_SOURCES) core/globals.c \
 @BUILD_FORTRAN_TRUE@	core/adios_read_hooks.c \
 @BUILD_FORTRAN_TRUE@	core/adios_logger.c core/util.c \
 @BUILD_FORTRAN_TRUE@	core/qhashtbl.c read/read_bp.c \
 @BUILD_FORTRAN_TRUE@	read/read_bp_staged.c \
- at BUILD_FORTRAN_TRUE@	read/read_bp_staged1.c $(am__append_44) \
- at BUILD_FORTRAN_TRUE@	$(am__append_45) $(am__append_46) \
- at BUILD_FORTRAN_TRUE@	$(am__append_47) $(am__append_48)
+ at BUILD_FORTRAN_TRUE@	read/read_bp_staged1.c $(am__append_51) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_52) $(am__append_53) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_54) $(am__append_55) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_56)
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at dist_libadiosreadf_a_SOURCES = nssi/adios_nssi_args.x
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at nodist_libadiosreadf_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
 @BUILD_FORTRAN_TRUE at libadiosreadf_a_SOURCES = $(FortranReadLibSource) \
 @BUILD_FORTRAN_TRUE@	core/adiosf_read.c \
 @BUILD_FORTRAN_TRUE@	core/adiosf_defs_mod.f90 \
- at BUILD_FORTRAN_TRUE@	core/adiosf_read_mod.f90
+ at BUILD_FORTRAN_TRUE@	core/adiosf_read_mod.f90 \
+ at BUILD_FORTRAN_TRUE@	query/adios_query_mod.f90
 @BUILD_FORTRAN_TRUE at libadiosreadf_v1_a_SOURCES = $(FortranReadLibSource) core/adiosf_read_v1.c
 @BUILD_FORTRAN_TRUE at libadiosreadf_v1_a_CPPFLAGS = $(libadiosreadf_a_CPPFLAGS)
 @BUILD_FORTRAN_TRUE at libadiosreadf_v1_a_CFLAGS = $(libadiosreadf_a_CFLAGS)
 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 $(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 $(am__append_54) \
-	$(am__append_55) $(am__append_56) $(am__append_57) \
-	$(am__append_58)
+	core/common_read.c core/adios_infocache.c \
+	core/adios_read_ext.c $(transforms_common_SOURCES) \
+	$(transforms_read_SOURCES) $(query_C_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 $(am__append_62) $(am__append_63) \
+	$(am__append_64) $(am__append_65) $(am__append_66) \
+	$(am__append_67)
 @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 \
+ at BUILD_FORTRAN_TRUE@	core/common_read.c core/adios_infocache.c \
+ at BUILD_FORTRAN_TRUE@	core/adios_read_ext.c \
 @BUILD_FORTRAN_TRUE@	$(transforms_common_SOURCES) \
- at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) core/globals.c \
+ at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) \
+ at BUILD_FORTRAN_TRUE@	$(query_F_SOURCES) core/globals.c \
 @BUILD_FORTRAN_TRUE@	core/adios_read_hooks.c core/util.c \
 @BUILD_FORTRAN_TRUE@	core/qhashtbl.c read/read_bp.c \
- at BUILD_FORTRAN_TRUE@	$(am__append_62) $(am__append_63) \
- at BUILD_FORTRAN_TRUE@	$(am__append_64) $(am__append_65) \
- at BUILD_FORTRAN_TRUE@	$(am__append_66)
+ at BUILD_FORTRAN_TRUE@	$(am__append_71) $(am__append_72) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_73) $(am__append_74) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_75) $(am__append_76)
 @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
@@ -2435,10 +2823,11 @@ noinst_LIBRARIES = libadios_internal_nompi.a
 libadios_internal_nompi_a_SOURCES = core/mpidummy.c core/adios_bp_v1.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_timing.c core/util.c core/qhashtbl.c core/futils.c \
-	core/adios_transport_hooks.c $(am__append_70)
-libadios_internal_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_INTERNAL $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
+	$(query_C_SOURCES) core/buffer.c core/adios_error.c \
+	core/adios_logger.c core/adios_timing.c core/util.c \
+	core/qhashtbl.c core/futils.c core/adios_transport_hooks.c \
+	$(am__append_80)
+libadios_internal_nompi_a_CPPFLAGS = $(AM_CPPFLAGS) $(MACRODEFFLAG)_INTERNAL $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 
 #bin_PROGRAMS+=adios_flags
 #nodist_adios_flags_SOURCES = adios_flags.h 
@@ -2461,20 +2850,27 @@ 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 \
-             $(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_icee.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/common_read.h core/adios_infocache.h core/futils.h core/globals.h core/ds_metadata.h \
              core/util.h core/flexpath.h core/qhashtbl.h \
-             nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h
+             $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
+             $(query_common_HDRS) $(query_method_HDRS) \
+             transforms/transform_plugins.h \
+	     transforms/adios_transform_identity_read.h \
+	     transforms/adios_transform_szip.h \
+	     transforms/adios_transform_alacrity_common.h \
+	     transforms/adios_transform_template_read.c \
+	     transforms/adios_transform_template_write.c \
+             query/Makefile.plugins.cmake \
+             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 $(srcdir)/transforms/Makefile.plugins $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/transforms/Makefile.plugins $(srcdir)/query/Makefile.plugins $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -2734,6 +3130,18 @@ libadios_a-common_read.o: core/common_read.c
 libadios_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_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`
 
+libadios_a-adios_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadios_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadios_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadios_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.c'; fi`
+
 libadios_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -2950,6 +3358,48 @@ libadios_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadios_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadios_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadios_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadios_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadios_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadios_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadios_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadios_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadios_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadios_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadios_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadios_a-adios_query.o: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_query.o `test -f 'query/adios_query.c' || echo '$(srcdir)/'`query/adios_query.c
+
+libadios_a-adios_query.obj: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_query.obj `if test -f 'query/adios_query.c'; then $(CYGPATH_W) 'query/adios_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query.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
 
@@ -3070,6 +3520,18 @@ libadios_a-read_flexpath.o: read/read_flexpath.c
 libadios_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadios_a-adios_icee.o: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadios_a-adios_icee.obj: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadios_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadios_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadios_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -3220,6 +3682,48 @@ libadios_internal_nompi_a-adios_transform_alacrity_write.o: transforms/adios_tra
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadios_internal_nompi_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadios_internal_nompi_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadios_internal_nompi_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadios_internal_nompi_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadios_internal_nompi_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadios_internal_nompi_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadios_internal_nompi_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadios_internal_nompi_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadios_internal_nompi_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadios_internal_nompi_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadios_internal_nompi_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadios_internal_nompi_a-adios_query.o: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_query.o `test -f 'query/adios_query.c' || echo '$(srcdir)/'`query/adios_query.c
+
+libadios_internal_nompi_a-adios_query.obj: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_query.obj `if test -f 'query/adios_query.c'; then $(CYGPATH_W) 'query/adios_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query.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
 
@@ -3358,6 +3862,12 @@ libadios_nompi_a-adios_selection_util.o: 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_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadios_nompi_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -3466,6 +3976,48 @@ libadios_nompi_a-adios_transform_alacrity_write.o: transforms/adios_transform_al
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadios_nompi_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadios_nompi_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadios_nompi_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadios_nompi_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadios_nompi_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadios_nompi_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadios_nompi_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadios_nompi_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadios_nompi_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadios_nompi_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadios_nompi_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadios_nompi_a-adios_query.o: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_query.o `test -f 'query/adios_query.c' || echo '$(srcdir)/'`query/adios_query.c
+
+libadios_nompi_a-adios_query.obj: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_query.obj `if test -f 'query/adios_query.c'; then $(CYGPATH_W) 'query/adios_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query.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
 
@@ -3520,6 +4072,12 @@ libadios_nompi_a-common_read.o: core/common_read.c
 libadios_nompi_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_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`
 
+libadios_nompi_a-adios_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadios_nompi_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
 libadios_nompi_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3652,6 +4210,18 @@ libadios_nompi_a-read_flexpath.o: read/read_flexpath.c
 libadios_nompi_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadios_nompi_a-adios_icee.o: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadios_nompi_a-adios_icee.obj: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadios_nompi_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadios_nompi_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosf_a-adiosf.o: core/adiosf.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adiosf.o `test -f 'core/adiosf.c' || echo '$(srcdir)/'`core/adiosf.c
 
@@ -3736,6 +4306,12 @@ libadiosf_a-adios_selection_util.o: 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_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosf_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -3844,6 +4420,48 @@ libadiosf_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrit
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosf_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosf_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosf_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosf_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosf_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosf_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosf_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosf_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosf_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosf_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosf_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosf_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosf_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -3886,6 +4504,12 @@ libadiosf_a-common_read.o: core/common_read.c
 libadiosf_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_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`
 
+libadiosf_a-adios_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosf_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
 libadiosf_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -4012,6 +4636,18 @@ libadiosf_a-read_flexpath.o: read/read_flexpath.c
 libadiosf_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosf_a-adios_icee.o: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadiosf_a-adios_icee.obj: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadiosf_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosf_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosf_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -4174,6 +4810,12 @@ libadiosf_nompi_a-adios_selection_util.o: 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_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosf_nompi_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -4282,6 +4924,48 @@ libadiosf_nompi_a-adios_transform_alacrity_write.o: transforms/adios_transform_a
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosf_nompi_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosf_nompi_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosf_nompi_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosf_nompi_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosf_nompi_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosf_nompi_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosf_nompi_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosf_nompi_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosf_nompi_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosf_nompi_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosf_nompi_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosf_nompi_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosf_nompi_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -4324,6 +5008,12 @@ libadiosf_nompi_a-common_read.o: core/common_read.c
 libadiosf_nompi_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_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`
 
+libadiosf_nompi_a-adios_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosf_nompi_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
 libadiosf_nompi_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -4450,6 +5140,18 @@ libadiosf_nompi_a-read_flexpath.o: read/read_flexpath.c
 libadiosf_nompi_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosf_nompi_a-adios_icee.o: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadiosf_nompi_a-adios_icee.obj: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadiosf_nompi_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosf_nompi_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosf_nompi_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -4570,6 +5272,12 @@ libadiosf_nompi_v1_a-adios_selection_util.o: 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_read_ext.o: core/adios_read_ext.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_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosf_nompi_v1_a-adios_read_ext.obj: core/adios_read_ext.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_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -4678,6 +5386,48 @@ libadiosf_nompi_v1_a-adios_transform_alacrity_write.o: transforms/adios_transfor
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosf_nompi_v1_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosf_nompi_v1_a-adios_query_hooks.o: query/adios_query_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_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosf_nompi_v1_a-adios_query_hooks.obj: query/adios_query_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_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosf_nompi_v1_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosf_nompi_v1_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosf_nompi_v1_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosf_nompi_v1_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosf_nompi_v1_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosf_nompi_v1_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosf_nompi_v1_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosf_nompi_v1_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosf_nompi_v1_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosf_nompi_v1_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -4720,6 +5470,12 @@ libadiosf_nompi_v1_a-common_read.o: core/common_read.c
 libadiosf_nompi_v1_a-common_read.obj: core/common_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-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`
 
+libadiosf_nompi_v1_a-adios_infocache.o: core/adios_infocache.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_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosf_nompi_v1_a-adios_infocache.obj: core/adios_infocache.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_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
 libadiosf_nompi_v1_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -4846,6 +5602,18 @@ libadiosf_nompi_v1_a-read_flexpath.o: read/read_flexpath.c
 libadiosf_nompi_v1_a-read_flexpath.obj: read/read_flexpath.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_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosf_nompi_v1_a-adios_icee.o: write/adios_icee.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_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadiosf_nompi_v1_a-adios_icee.obj: write/adios_icee.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_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadiosf_nompi_v1_a-read_icee.o: read/read_icee.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_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosf_nompi_v1_a-read_icee.obj: read/read_icee.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_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosf_nompi_v1_a-adios_nssi_config.o: nssi/adios_nssi_config.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_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -4966,6 +5734,12 @@ libadiosf_v1_a-adios_selection_util.o: 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_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosf_v1_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -5074,6 +5848,48 @@ libadiosf_v1_a-adios_transform_alacrity_write.o: transforms/adios_transform_alac
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosf_v1_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosf_v1_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosf_v1_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosf_v1_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosf_v1_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosf_v1_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosf_v1_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosf_v1_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosf_v1_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosf_v1_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosf_v1_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosf_v1_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosf_v1_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -5116,6 +5932,12 @@ libadiosf_v1_a-common_read.o: core/common_read.c
 libadiosf_v1_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_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`
 
+libadiosf_v1_a-adios_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosf_v1_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
 libadiosf_v1_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -5242,6 +6064,18 @@ libadiosf_v1_a-read_flexpath.o: read/read_flexpath.c
 libadiosf_v1_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosf_v1_a-adios_icee.o: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_icee.o `test -f 'write/adios_icee.c' || echo '$(srcdir)/'`write/adios_icee.c
+
+libadiosf_v1_a-adios_icee.obj: write/adios_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_icee.obj `if test -f 'write/adios_icee.c'; then $(CYGPATH_W) 'write/adios_icee.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_icee.c'; fi`
+
+libadiosf_v1_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosf_v1_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosf_v1_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -5362,6 +6196,18 @@ 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_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosread_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosread_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosread_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -5464,6 +6310,48 @@ libadiosread_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacr
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosread_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosread_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosread_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosread_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosread_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosread_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosread_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosread_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosread_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosread_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosread_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosread_a-adios_query.o: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_query.o `test -f 'query/adios_query.c' || echo '$(srcdir)/'`query/adios_query.c
+
+libadiosread_a-adios_query.obj: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_query.obj `if test -f 'query/adios_query.c'; then $(CYGPATH_W) 'query/adios_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query.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
 
@@ -5536,6 +6424,12 @@ libadiosread_a-read_flexpath.o: read/read_flexpath.c
 libadiosread_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosread_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosread_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosread_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -5608,6 +6502,18 @@ 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_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosread_nompi_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosread_nompi_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosread_nompi_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -5710,6 +6616,48 @@ libadiosread_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transform
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosread_nompi_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosread_nompi_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosread_nompi_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosread_nompi_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosread_nompi_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosread_nompi_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosread_nompi_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosread_nompi_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosread_nompi_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosread_nompi_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosread_nompi_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosread_nompi_a-adios_query.o: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_query.o `test -f 'query/adios_query.c' || echo '$(srcdir)/'`query/adios_query.c
+
+libadiosread_nompi_a-adios_query.obj: query/adios_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_query.obj `if test -f 'query/adios_query.c'; then $(CYGPATH_W) 'query/adios_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query.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
 
@@ -5776,6 +6724,12 @@ libadiosread_nompi_a-read_flexpath.o: read/read_flexpath.c
 libadiosread_nompi_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosread_nompi_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosread_nompi_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosread_nompi_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -5830,6 +6784,18 @@ 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_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosreadf_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosreadf_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosreadf_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -5932,6 +6898,48 @@ libadiosreadf_a-adios_transform_alacrity_read.o: transforms/adios_transform_alac
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosreadf_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosreadf_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosreadf_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosreadf_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosreadf_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosreadf_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosreadf_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosreadf_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosreadf_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosreadf_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosreadf_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosreadf_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosreadf_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -6004,6 +7012,12 @@ libadiosreadf_a-read_flexpath.o: read/read_flexpath.c
 libadiosreadf_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosreadf_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosreadf_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosreadf_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -6076,6 +7090,18 @@ 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_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosreadf_nompi_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosreadf_nompi_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosreadf_nompi_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -6178,6 +7204,48 @@ libadiosreadf_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transfor
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosreadf_nompi_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosreadf_nompi_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosreadf_nompi_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosreadf_nompi_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosreadf_nompi_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosreadf_nompi_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosreadf_nompi_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosreadf_nompi_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosreadf_nompi_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosreadf_nompi_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosreadf_nompi_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosreadf_nompi_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosreadf_nompi_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -6232,6 +7300,12 @@ libadiosreadf_nompi_a-read_flexpath.o: read/read_flexpath.c
 libadiosreadf_nompi_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosreadf_nompi_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosreadf_nompi_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosreadf_nompi_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -6304,6 +7378,18 @@ 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_infocache.o: core/adios_infocache.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_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosreadf_nompi_v1_a-adios_infocache.obj: core/adios_infocache.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_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_read_ext.o: core/adios_read_ext.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_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosreadf_nompi_v1_a-adios_read_ext.obj: core/adios_read_ext.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_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -6406,6 +7492,48 @@ libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.o: transforms/adios_trans
 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-common_query.o: query/common_query.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_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosreadf_nompi_v1_a-common_query.obj: query/common_query.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_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_query_hooks.o: query/adios_query_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_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosreadf_nompi_v1_a-adios_query_hooks.obj: query/adios_query_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_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosreadf_nompi_v1_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosreadf_nompi_v1_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosreadf_nompi_v1_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosreadf_nompi_v1_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosreadf_nompi_v1_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosreadf_nompi_v1_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosreadf_nompi_v1_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosreadf_nompi_v1_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosreadf_nompi_v1_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosreadf_nompi_v1_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -6460,6 +7588,12 @@ libadiosreadf_nompi_v1_a-read_flexpath.o: read/read_flexpath.c
 libadiosreadf_nompi_v1_a-read_flexpath.obj: read/read_flexpath.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_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosreadf_nompi_v1_a-read_icee.o: read/read_icee.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_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosreadf_nompi_v1_a-read_icee.obj: read/read_icee.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_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosreadf_nompi_v1_a-adios_nssi_config.o: nssi/adios_nssi_config.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_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -6514,6 +7648,18 @@ 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_infocache.o: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_infocache.o `test -f 'core/adios_infocache.c' || echo '$(srcdir)/'`core/adios_infocache.c
+
+libadiosreadf_v1_a-adios_infocache.obj: core/adios_infocache.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_infocache.obj `if test -f 'core/adios_infocache.c'; then $(CYGPATH_W) 'core/adios_infocache.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_infocache.c'; fi`
+
+libadiosreadf_v1_a-adios_read_ext.o: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_read_ext.o `test -f 'core/adios_read_ext.c' || echo '$(srcdir)/'`core/adios_read_ext.c
+
+libadiosreadf_v1_a-adios_read_ext.obj: core/adios_read_ext.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_read_ext.obj `if test -f 'core/adios_read_ext.c'; then $(CYGPATH_W) 'core/adios_read_ext.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_read_ext.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
 
@@ -6616,6 +7762,48 @@ libadiosreadf_v1_a-adios_transform_alacrity_read.o: transforms/adios_transform_a
 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-common_query.o: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-common_query.o `test -f 'query/common_query.c' || echo '$(srcdir)/'`query/common_query.c
+
+libadiosreadf_v1_a-common_query.obj: query/common_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-common_query.obj `if test -f 'query/common_query.c'; then $(CYGPATH_W) 'query/common_query.c'; else $(CYGPATH_W) '$(srcdir)/query/common_query.c'; fi`
+
+libadiosreadf_v1_a-adios_query_hooks.o: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_query_hooks.o `test -f 'query/adios_query_hooks.c' || echo '$(srcdir)/'`query/adios_query_hooks.c
+
+libadiosreadf_v1_a-adios_query_hooks.obj: query/adios_query_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_query_hooks.obj `if test -f 'query/adios_query_hooks.c'; then $(CYGPATH_W) 'query/adios_query_hooks.c'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_hooks.c'; fi`
+
+libadiosreadf_v1_a-query_utils.o: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_utils.o `test -f 'query/query_utils.c' || echo '$(srcdir)/'`query/query_utils.c
+
+libadiosreadf_v1_a-query_utils.obj: query/query_utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_utils.obj `if test -f 'query/query_utils.c'; then $(CYGPATH_W) 'query/query_utils.c'; else $(CYGPATH_W) '$(srcdir)/query/query_utils.c'; fi`
+
+libadiosreadf_v1_a-query_fastbit.o: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_fastbit.o `test -f 'query/query_fastbit.c' || echo '$(srcdir)/'`query/query_fastbit.c
+
+libadiosreadf_v1_a-query_fastbit.obj: query/query_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_fastbit.obj `if test -f 'query/query_fastbit.c'; then $(CYGPATH_W) 'query/query_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/query/query_fastbit.c'; fi`
+
+libadiosreadf_v1_a-fastbit_adios.o: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-fastbit_adios.o `test -f 'query/fastbit_adios.c' || echo '$(srcdir)/'`query/fastbit_adios.c
+
+libadiosreadf_v1_a-fastbit_adios.obj: query/fastbit_adios.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-fastbit_adios.obj `if test -f 'query/fastbit_adios.c'; then $(CYGPATH_W) 'query/fastbit_adios.c'; else $(CYGPATH_W) '$(srcdir)/query/fastbit_adios.c'; fi`
+
+libadiosreadf_v1_a-query_alac.o: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_alac.o `test -f 'query/query_alac.c' || echo '$(srcdir)/'`query/query_alac.c
+
+libadiosreadf_v1_a-query_alac.obj: query/query_alac.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-query_alac.obj `if test -f 'query/query_alac.c'; then $(CYGPATH_W) 'query/query_alac.c'; else $(CYGPATH_W) '$(srcdir)/query/query_alac.c'; fi`
+
+libadiosreadf_v1_a-adiosf_query.o: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adiosf_query.o `test -f 'query/adiosf_query.c' || echo '$(srcdir)/'`query/adiosf_query.c
+
+libadiosreadf_v1_a-adiosf_query.obj: query/adiosf_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adiosf_query.obj `if test -f 'query/adiosf_query.c'; then $(CYGPATH_W) 'query/adiosf_query.c'; else $(CYGPATH_W) '$(srcdir)/query/adiosf_query.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
 
@@ -6688,6 +7876,12 @@ libadiosreadf_v1_a-read_flexpath.o: read/read_flexpath.c
 libadiosreadf_v1_a-read_flexpath.obj: read/read_flexpath.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-read_flexpath.obj `if test -f 'read/read_flexpath.c'; then $(CYGPATH_W) 'read/read_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/read/read_flexpath.c'; fi`
 
+libadiosreadf_v1_a-read_icee.o: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-read_icee.o `test -f 'read/read_icee.c' || echo '$(srcdir)/'`read/read_icee.c
+
+libadiosreadf_v1_a-read_icee.obj: read/read_icee.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-read_icee.obj `if test -f 'read/read_icee.c'; then $(CYGPATH_W) 'read/read_icee.c'; else $(CYGPATH_W) '$(srcdir)/read/read_icee.c'; fi`
+
 libadiosreadf_v1_a-adios_nssi_config.o: nssi/adios_nssi_config.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_nssi_config.o `test -f 'nssi/adios_nssi_config.c' || echo '$(srcdir)/'`nssi/adios_nssi_config.c
 
@@ -6760,6 +7954,12 @@ adiosf_read_mod.o: core/adiosf_read_mod.f90
 adiosf_read_mod.obj: core/adiosf_read_mod.f90
 	$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o adiosf_read_mod.obj `if test -f 'core/adiosf_read_mod.f90'; then $(CYGPATH_W) 'core/adiosf_read_mod.f90'; else $(CYGPATH_W) '$(srcdir)/core/adiosf_read_mod.f90'; fi`
 
+adios_query_mod.o: query/adios_query_mod.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o adios_query_mod.o `test -f 'query/adios_query_mod.f90' || echo '$(srcdir)/'`query/adios_query_mod.f90
+
+adios_query_mod.obj: query/adios_query_mod.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o adios_query_mod.obj `if test -f 'query/adios_query_mod.f90'; then $(CYGPATH_W) 'query/adios_query_mod.f90'; else $(CYGPATH_W) '$(srcdir)/query/adios_query_mod.f90'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -7032,14 +8232,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	rpcgen -c $(srcdir)/nssi/adios_nssi_args.x \
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@		| grep -v "include \"\.\." > adios_nssi_args.c
 
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at adios_write_mod.mod: core/adiosf_write_mod.f90 adios_defs_mod.mod
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(FC) -c core/adiosf_write_mod.f90
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at adiosf_write_mod.$(OBJEXT): adiosf_defs_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at adios_write_mod.mod: adiosf_write_mod.$(OBJEXT)
+
+ at BUILD_FORTRAN_TRUE@adiosf_read_mod.$(OBJEXT): adiosf_defs_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@adios_read_mod.mod: adiosf_read_mod.$(OBJEXT)
 
- at BUILD_FORTRAN_TRUE@adios_read_mod.mod: core/adiosf_read_mod.f90 adios_defs_mod.mod 
- at BUILD_FORTRAN_TRUE@	$(FC) -c core/adiosf_read_mod.f90
+ at BUILD_FORTRAN_TRUE@adios_query_mod.$(OBJEXT): adiosf_read_mod.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@adios_query_mod.mod: adios_query_mod.$(OBJEXT)
 
- at BUILD_FORTRAN_TRUE@adios_defs_mod.mod: core/adiosf_defs_mod.f90
- at BUILD_FORTRAN_TRUE@	$(FC) -c core/adiosf_defs_mod.f90
+ at BUILD_FORTRAN_TRUE@adios_defs_mod.mod: adiosf_defs_mod.$(OBJEXT)
 
 # 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/src/core/adios.c b/src/core/adios.c
index 61b594d..dbd00be 100644
--- a/src/core/adios.c
+++ b/src/core/adios.c
@@ -353,7 +353,6 @@ int adios_declare_group (int64_t * id, const char * name
     return adios_errno;
 }
 
-
 int adios_free_group (int64_t id)
 {
     adios_errno = err_no_error;
@@ -382,6 +381,20 @@ int64_t adios_define_var (int64_t group_id, const char * name
                                    );
 }
 
+// delete all variable definitions from a group
+// Use if you want to define a new set of variables for the next output step.
+int adios_delete_vardefs (int64_t id)
+{
+    adios_errno = err_no_error;
+    if (id != 0) {
+        struct adios_group_struct * g = (struct adios_group_struct *) id;
+        adios_common_delete_vardefs (g);
+    } else {
+        adios_error (err_invalid_group, "adios_delete_vardefs() called with 0 argument\n");
+    }
+    return adios_errno;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // adios_common_set_transform is in adios_internals.c
 // set the transform method for the selected variable (default is "none")
@@ -406,6 +419,20 @@ int adios_define_attribute (int64_t group, const char * name
     return adios_errno;
 }
 
+// delete all attribute definitions from a group
+// Use if you want to define a new set of attributes for the next output step.
+int adios_delete_attrdefs (int64_t id)
+{
+    adios_errno = err_no_error;
+    if (id != 0) {
+        struct adios_group_struct * g = (struct adios_group_struct *) id;
+        adios_common_delete_attrdefs (g);
+    } else {
+        adios_error (err_invalid_group, "adios_delete_attrdefs() called with 0 argument\n");
+    }
+    return adios_errno;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 // adios_common_select_method is in adios_internals_mxml.c
diff --git a/src/core/adios_copyspec.c b/src/core/adios_copyspec.c
index df209c9..9e0482d 100644
--- a/src/core/adios_copyspec.c
+++ b/src/core/adios_copyspec.c
@@ -16,10 +16,11 @@
 #include "core/common_read.h"
 #include "public/adios_selection.h"
 
+#define MYFREE(x) {if (x) free((void*)x);}
+
 //
 // 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,
@@ -63,11 +64,25 @@ int adios_copyspec_init_from_intersection(adios_subvolume_copy_spec *copy_spec,
                                   dst_dims, NULL,
                                   src_dims, NULL);
 
-    // Compute the intersection to fill in the rest of the information
+    uint64_t *subv_dims = malloc(ndim * sizeof(uint64_t));
+    uint64_t *dst_subv_offsets = malloc(ndim * sizeof(uint64_t));
+    uint64_t *src_subv_offsets = malloc(ndim * sizeof(uint64_t));
+
+    // Compute the intersection to compute 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);
+                          subv_dims, NULL,
+                          dst_subv_offsets, src_subv_offsets);
+
+    if (intersects) {
+    	copy_spec->subv_dims = subv_dims;
+    	copy_spec->dst_subv_offsets = dst_subv_offsets;
+    	copy_spec->src_subv_offsets = src_subv_offsets;
+    } else {
+    	MYFREE(subv_dims);
+    	MYFREE(dst_subv_offsets);
+    	MYFREE(src_subv_offsets);
+    }
 
     return intersects;
 }
@@ -93,7 +108,6 @@ int adios_copyspec_init_from_2bb_intersection(adios_subvolume_copy_spec *copy_sp
 }
 
 
-#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) {
@@ -107,7 +121,6 @@ void adios_copyspec_free(adios_subvolume_copy_spec **copy_spec_ptr, int free_buf
 
     MYFREE(*copy_spec_ptr);
 }
-#undef MYFREE
 
 //
 // Derivative copyspec functions
diff --git a/src/core/adios_error.c b/src/core/adios_error.c
index d8cfe40..2028a85 100644
--- a/src/core/adios_error.c
+++ b/src/core/adios_error.c
@@ -30,6 +30,12 @@ const char *adios_get_last_errmsg (void)
     return aerr; 
 }
 
+void adios_clear_error(void)
+{
+    memset (aerr, 0, ERRMSG_MAXLEN);
+    adios_errno = err_no_error;
+}
+
 void adios_error (enum ADIOS_ERRCODES errcode, char *fmt, ...) 
 {
     va_list ap;
diff --git a/src/core/adios_icee.h b/src/core/adios_icee.h
new file mode 100644
index 0000000..1d75d01
--- /dev/null
+++ b/src/core/adios_icee.h
@@ -0,0 +1,270 @@
+/* Auto-generated on Sat Sep 13 16:09:17 EDT 2014 */
+
+#ifndef ADIOS_ICEE_H
+#define ADIOS_ICEE_H
+
+#include <stdint.h>
+#include <evpath.h>
+
+typedef struct icee_varinfo_rec {
+    char* varname;
+    int varid;
+    int type;
+    int typesize;
+    int ndims;
+    uint64_t* gdims;
+    uint64_t* ldims;
+    uint64_t* offsets;
+    uint64_t varlen;
+    char* data;
+    struct icee_varinfo_rec * next;
+} icee_varinfo_rec_t, *icee_varinfo_rec_ptr_t;
+
+static FMField icee_varinfo_field_list[] =
+{
+    {"varname", "string", sizeof(char*), FMOffset(icee_varinfo_rec_ptr_t, varname)},
+    {"varid", "integer", sizeof(int), FMOffset(icee_varinfo_rec_ptr_t, varid)},
+    {"type", "integer", sizeof(int), FMOffset(icee_varinfo_rec_ptr_t, type)},
+    {"typesize", "integer", sizeof(int), FMOffset(icee_varinfo_rec_ptr_t, typesize)},
+    {"ndims", "integer", sizeof(int), FMOffset(icee_varinfo_rec_ptr_t, ndims)},
+    {"gdims", "integer[ndims]", sizeof(uint64_t), FMOffset(icee_varinfo_rec_ptr_t, gdims)},
+    {"ldims", "integer[ndims]", sizeof(uint64_t), FMOffset(icee_varinfo_rec_ptr_t, ldims)},
+    {"offsets", "integer[ndims]", sizeof(uint64_t), FMOffset(icee_varinfo_rec_ptr_t, offsets)},
+    {"varlen", "integer", sizeof(uint64_t), FMOffset(icee_varinfo_rec_ptr_t, varlen)},
+    {"data", "char[varlen]", sizeof(char), FMOffset(icee_varinfo_rec_ptr_t, data)},
+    {"next", "*icee_varinfo", sizeof(struct icee_varinfo_rec ), FMOffset(icee_varinfo_rec_ptr_t, next)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec icee_varinfo_format_list[] =
+{
+    {"icee_varinfo", icee_varinfo_field_list, sizeof(icee_varinfo_rec_t), NULL},
+    {NULL, NULL}
+};
+
+/* Auto-generated on Sat Sep 13 16:09:17 EDT 2014 */
+
+typedef struct icee_fileinfo_rec {
+    char* fname;
+    int nvars;
+    int nchunks;
+    int comm_size;
+    int comm_rank;
+    int merge_count;
+    int timestep;
+    struct icee_varinfo_rec * varinfo;
+    struct icee_fileinfo_rec * next;
+} icee_fileinfo_rec_t, *icee_fileinfo_rec_ptr_t;
+
+static FMField icee_fileinfo_field_list[] =
+{
+    {"fname", "string", sizeof(char*), FMOffset(icee_fileinfo_rec_ptr_t, fname)},
+    {"nvars", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, nvars)},
+    {"nchunks", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, nchunks)},
+    {"comm_size", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, comm_size)},
+    {"comm_rank", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, comm_rank)},
+    {"merge_count", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, merge_count)},
+    {"timestep", "integer", sizeof(int), FMOffset(icee_fileinfo_rec_ptr_t, timestep)},
+    {"varinfo", "*icee_varinfo", sizeof(struct icee_varinfo_rec ), FMOffset(icee_fileinfo_rec_ptr_t, varinfo)},
+    {"next", "*icee_fileinfo", sizeof(struct icee_fileinfo_rec ), FMOffset(icee_fileinfo_rec_ptr_t, next)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec icee_fileinfo_format_list[] =
+{
+    {"icee_fileinfo", icee_fileinfo_field_list, sizeof(icee_fileinfo_rec_t), NULL},
+    {"icee_varinfo", icee_varinfo_field_list, sizeof(icee_varinfo_rec_t), NULL},
+    {NULL, NULL}
+};
+
+/* Auto-generated on Thu Nov  6 14:06:32 EST 2014 */
+
+/*
+typedef struct icee_clientinfo_rec {
+    char* client_host;
+    int num_parallel;
+    int client_port;
+    int* stone_id;
+} icee_clientinfo_rec_t, *icee_clientinfo_rec_ptr_t;
+
+static FMField icee_clientinfo_field_list[] =
+{
+    {"client_host", "string", sizeof(char*), FMOffset(icee_clientinfo_rec_ptr_t, client_host)},
+    {"num_parallel", "integer", sizeof(int), FMOffset(icee_clientinfo_rec_ptr_t, num_parallel)},
+    {"client_port", "integer", sizeof(int), FMOffset(icee_clientinfo_rec_ptr_t, client_port)},
+    {"stone_id", "integer[num_parallel]", sizeof(int), FMOffset(icee_clientinfo_rec_ptr_t, stone_id)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec icee_clientinfo_format_list[] =
+{
+    {"icee_clientinfo", icee_clientinfo_field_list, sizeof(icee_clientinfo_rec_t), NULL},
+    {NULL, NULL}
+};
+*/
+
+/* Auto-generated on Mon Nov 10 16:24:37 EST 2014 */
+
+typedef struct icee_contactinfo_rec {
+    int stone_id;
+    char* contact_string;
+    struct icee_contactinfo_rec * next;
+} icee_contactinfo_rec_t, *icee_contactinfo_rec_ptr_t;
+
+static FMField icee_contactinfo_field_list[] =
+{
+    {"stone_id", "integer", sizeof(int), FMOffset(icee_contactinfo_rec_ptr_t, stone_id)},
+    {"contact_string", "string", sizeof(char*), FMOffset(icee_contactinfo_rec_ptr_t, contact_string)},
+    {"next", "*icee_contactinfo", sizeof(struct icee_contactinfo_rec ), FMOffset(icee_contactinfo_rec_ptr_t, next)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec icee_contactinfo_format_list[] =
+{
+    {"icee_contactinfo", icee_contactinfo_field_list, sizeof(icee_contactinfo_rec_t), NULL},
+    {NULL, NULL}
+};
+
+/* Auto-generated on Sat Nov  8 14:27:48 EST 2014 */
+
+typedef struct icee_passivecheckin_rec {
+    int condition;
+} icee_passivecheckin_rec_t, *icee_passivecheckin_rec_ptr_t;
+
+static FMField icee_passivecheckin_field_list[] =
+{
+    {"condition", "integer", sizeof(int), FMOffset(icee_passivecheckin_rec_ptr_t, condition)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec icee_passivecheckin_format_list[] =
+{
+    {"icee_passivecheckin", icee_passivecheckin_field_list, sizeof(icee_passivecheckin_rec_t), NULL},
+    {NULL, NULL}
+};
+
+typedef void (*icee_passivecheckin_callback_t)(CManager cm, CMConnection conn, icee_passivecheckin_rec_t *m);
+
+typedef void (*icee_fileinfo_callback_t)(CManager cm, CMConnection conn, icee_fileinfo_rec_t *m);
+
+static void
+icee_passivecheckin_request_handler(CManager cm, CMConnection conn, void *msg, void *client_data, attr_list attrs)
+{
+    icee_passivecheckin_rec_t *m = (icee_passivecheckin_rec_t*) msg;
+    icee_passivecheckin_callback_t cb;
+
+    if (client_data)
+    {
+        cb = (icee_passivecheckin_callback_t) client_data;
+        (*cb)(cm, conn, m);
+    }
+
+    CMFormat format = CMlookup_format(cm, icee_passivecheckin_format_list);
+    CMwrite(conn, format, (icee_passivecheckin_rec_t*) m);
+}
+
+static void
+icee_passivecheckin_reply_handler(CManager cm, CMConnection conn, void *msg, void *client_data, attr_list attrs)
+{
+    icee_passivecheckin_rec_t *m = (icee_passivecheckin_rec_t*) msg;
+    icee_passivecheckin_callback_t cb;
+
+    if (client_data)
+    {
+        cb = (icee_passivecheckin_callback_t) client_data;
+        (*cb)(cm, conn, m);
+    }
+
+    int condition = m->condition;
+    if (condition)
+    {
+        CMCondition_signal(cm, condition);
+    }
+}
+
+static void
+icee_fileinfo_recv_handler(CManager cm, CMConnection conn, void *msg, void *client_data, attr_list attrs)
+{
+    icee_fileinfo_rec_t *m = (icee_fileinfo_rec_t*) msg;
+    icee_fileinfo_callback_t cb;
+
+    if (client_data)
+    {
+        cb = (icee_fileinfo_callback_t) client_data;
+        (*cb)(cm, conn, m);
+    }
+
+    /*
+      int condition = m->condition;
+      if (condition)
+      {
+      CMCondition_signal(cm, condition);
+      }
+    */
+}
+
+/*
+ * Thread pool implementation
+ * Credit: Multithreaded Programming Guide by Oracle
+ * http://docs.oracle.com/cd/E19253-01/816-5137/6mba5vqn3/index.html
+ */
+
+/*
+ * Declarations for the clients of a thread pool.
+ */
+
+#include <pthread.h>
+#include <sys/time.h>
+
+typedef unsigned int uint_t;
+
+/*
+ * The thr_pool_t type is opaque to the client.
+ * It is created by thr_pool_create() and must be passed
+ * unmodified to the remainder of the interfaces.
+ */
+typedef	struct thr_pool	thr_pool_t;
+
+/*
+ * Create a thread pool.
+ *	min_threads:	the minimum number of threads kept in the pool,
+ *			always available to perform work requests.
+ *	max_threads:	the maximum number of threads that can be
+ *			in the pool, performing work requests.
+ *	linger:		the number of seconds excess idle worker threads
+ *			(greater than min_threads) linger before exiting.
+ *	attr:		attributes of all worker threads (can be NULL);
+ *			can be destroyed after calling thr_pool_create().
+ * On error, thr_pool_create() returns NULL with errno set to the error code.
+ */
+extern	thr_pool_t	*thr_pool_create(uint_t min_threads, uint_t max_threads,
+                                     uint_t linger, pthread_attr_t *attr);
+
+/*
+ * Enqueue a work request to the thread pool job queue.
+ * If there are idle worker threads, awaken one to perform the job.
+ * Else if the maximum number of workers has not been reached,
+ * create a new worker thread to perform the job.
+ * Else just return after adding the job to the queue;
+ * an existing worker thread will perform the job when
+ * it finishes the job it is currently performing.
+ *
+ * The job is performed as if a new detached thread were created for it:
+ *	pthread_create(NULL, attr, void *(*func)(void *), void *arg);
+ *
+ * On error, thr_pool_queue() returns -1 with errno set to the error code.
+ */
+extern	int	thr_pool_queue(thr_pool_t *pool,
+                           void *(*func)(void *), void *arg);
+
+/*
+ * Wait for all queued jobs to complete.
+ */
+extern	void	thr_pool_wait(thr_pool_t *pool);
+
+/*
+ * Cancel all queued jobs and destroy the pool.
+ */
+extern	void	thr_pool_destroy(thr_pool_t *pool);
+
+#endif
diff --git a/src/core/adios_infocache.c b/src/core/adios_infocache.c
new file mode 100644
index 0000000..6d458d0
--- /dev/null
+++ b/src/core/adios_infocache.c
@@ -0,0 +1,131 @@
+/*
+ * adios_infocache.c
+ *
+ *  Created on: Nov 21, 2014
+ *      Author: David A. Boyuka II
+ */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "core/common_read.h"
+#include "core/adios_infocache.h"
+
+// Utilities
+static inline int min(int a, int b) { return a < b ? a : b; }
+static inline int max(int a, int b) { return a > b ? a : b; }
+#define MALLOC_ARRAY(arr,type,len) { (arr) = (type *)malloc((len) * sizeof(type)); }
+#define CALLOC_ARRAY(arr,type,len) { (arr) = (type *)calloc((len), sizeof(type)); }
+#define REALLOC_ARRAY(arr,type,len) { (arr) = (type *)realloc((arr), (len) * sizeof(type)); }
+
+#define MALLOC(type, var) type *var; MALLOC_ARRAY(var, type, 1);
+
+#define FREE(p) {if (p){free(p); (p)=NULL;}}
+
+#define INITIAL_INFOCACHE_SIZE 16
+
+static void expand_infocache(adios_infocache *cache, int var_capacity) {
+    int i;
+    const int oldcap = cache->capacity;
+    const int newcap = max(max(oldcap * 2, var_capacity), INITIAL_INFOCACHE_SIZE);
+
+    if (oldcap == 0) {
+        MALLOC_ARRAY(cache->physical_varinfos, ADIOS_VARINFO*, newcap);
+        MALLOC_ARRAY(cache->logical_varinfos, ADIOS_VARINFO*, newcap);
+        MALLOC_ARRAY(cache->transinfos, ADIOS_TRANSINFO*, newcap);
+    } else {
+        REALLOC_ARRAY(cache->physical_varinfos, ADIOS_VARINFO*, newcap);
+        REALLOC_ARRAY(cache->logical_varinfos, ADIOS_VARINFO*, newcap);
+        REALLOC_ARRAY(cache->transinfos, ADIOS_TRANSINFO*, newcap);
+    }
+
+    for (i = oldcap; i < newcap; i++) {
+        cache->physical_varinfos[i] = NULL;
+        cache->logical_varinfos[i] = NULL;
+        cache->transinfos[i] = NULL;
+    }
+
+    cache->capacity = newcap;
+}
+
+adios_infocache * adios_infocache_new() {
+    MALLOC(adios_infocache, cache);
+    cache->capacity = 0;
+    cache->physical_varinfos = NULL;
+    cache->logical_varinfos = NULL;
+    cache->transinfos = NULL;
+
+    expand_infocache(cache, INITIAL_INFOCACHE_SIZE);
+    return cache;
+}
+
+static void invalidate_varinfo(ADIOS_VARINFO **varinfo_ptr) {
+	ADIOS_VARINFO *varinfo = *varinfo_ptr;
+	if (varinfo) {
+		common_read_free_varinfo(varinfo);
+		*varinfo_ptr = NULL;
+	}
+}
+
+static void invalidate_transinfo(const ADIOS_VARINFO *phys_varinfo, ADIOS_TRANSINFO **transinfo_ptr) {
+	ADIOS_TRANSINFO *transinfo = *transinfo_ptr;
+	if (transinfo) {
+		common_read_free_transinfo(phys_varinfo, transinfo);
+		*transinfo_ptr = NULL;
+	}
+}
+
+void adios_infocache_invalidate(adios_infocache *cache) {
+    int i;
+    for (i = 0; i < cache->capacity; i++) {
+    	if (cache->physical_varinfos[i])
+        	invalidate_transinfo(cache->physical_varinfos[i], &cache->transinfos[i]);
+    	invalidate_varinfo(&cache->physical_varinfos[i]);
+    	invalidate_varinfo(&cache->logical_varinfos[i]);
+    }
+}
+
+void adios_infocache_free(adios_infocache **cache_ptr) {
+    adios_infocache *cache = *cache_ptr;
+
+    adios_infocache_invalidate(cache); // Frees all varinfos/transinfos
+    FREE(cache->physical_varinfos);
+    FREE(cache->logical_varinfos);
+    FREE(cache->transinfos);
+    cache->capacity = 0;
+    FREE(*cache_ptr);
+}
+
+ADIOS_VARINFO * adios_infocache_inq_varinfo(const ADIOS_FILE *fp, adios_infocache *cache, int varid) {
+    if (varid >= cache->capacity)
+        expand_infocache(cache, varid + 1);
+
+    // Choose the varinfo array corresponding to whether this inquiry is
+    // in the logical or physical view
+    const data_view_t view = common_read_get_data_view(fp);
+    ADIOS_VARINFO **varinfos = (view == PHYSICAL_DATA_VIEW) ? cache->physical_varinfos : cache->logical_varinfos;
+    ADIOS_VARINFO **varinfo = &varinfos[varid];
+
+    if (*varinfo)
+        return *varinfo;
+    else
+        return *varinfo = common_read_inq_var_byid(fp, varid);
+}
+
+ADIOS_TRANSINFO * adios_infocache_inq_transinfo(const ADIOS_FILE *fp, adios_infocache *cache, int varid) {
+    if (varid >= cache->capacity)
+        expand_infocache(cache, varid + 1);
+
+    if (cache->transinfos[varid]) {
+        return cache->transinfos[varid];
+    } else {
+    	// inq_var in physical view. It probably doesn't matter, but this is the "true"
+    	// varinfo as seen by the transport layer, which is the layer to which we
+    	// are about to pass the varinfo, so best to make it match.
+    	// Note: violate constness temporarily, since we set the view right back again
+    	const data_view_t old_view = common_read_set_data_view((ADIOS_FILE*)fp, PHYSICAL_DATA_VIEW);
+        ADIOS_VARINFO *vi = adios_infocache_inq_varinfo(fp, cache, varid);
+        common_read_set_data_view((ADIOS_FILE*)fp, old_view);
+
+        return cache->transinfos[varid] = common_read_inq_transinfo(fp, vi);
+    }
+}
diff --git a/src/core/adios_infocache.h b/src/core/adios_infocache.h
new file mode 100644
index 0000000..19e4b63
--- /dev/null
+++ b/src/core/adios_infocache.h
@@ -0,0 +1,35 @@
+/*
+ * adios_infocache.h
+ *
+ * Provides a VARINFO/TRANSINFO cache for internal ADIOS use. Code wishing to avoid redundant
+ * calls to common_read_inq_var[_transinfo] should instead use the infocache functions as follows:
+ *
+ *   ADIOS_VARINFO *raw_varinfo = adios_infocache_inq_varinfo(fp, internals->infocache, varid); //common_read_inq_var_raw_byid(fp, varid);        // Get the *raw* varinfo
+ *   ADIOS_TRANSINFO *transinfo = adios_infocache_inq_transinfo(fp, internals->infocache, varid); //common_read_inq_transinfo(fp, raw_varinfo);    // Get the transform info (i.e. original var info)
+ *
+ *  Created on: Nov 21, 2014
+ *      Author: David A. Boyuka II
+ */
+#ifndef ADIOS_INFOCACHE_H_
+#define ADIOS_INFOCACHE_H_
+
+#include "public/adios_types.h"
+#include "public/adios_read_v2.h"
+#include "transforms/adios_transforms_transinfo.h"
+
+typedef struct {
+    int capacity;
+    ADIOS_VARINFO **physical_varinfos;
+    ADIOS_VARINFO **logical_varinfos;
+    ADIOS_TRANSINFO **transinfos;
+} adios_infocache;
+
+
+adios_infocache * adios_infocache_new();
+void adios_infocache_invalidate(adios_infocache *cache);
+void adios_infocache_free(adios_infocache **cache_ptr);
+
+ADIOS_VARINFO * adios_infocache_inq_varinfo(const ADIOS_FILE *fp, adios_infocache *cache, int varid);
+ADIOS_TRANSINFO * adios_infocache_inq_transinfo(const ADIOS_FILE *fp, adios_infocache *cache, int varid);
+
+#endif /* ADIOS_INFOCACHE_H_ */
diff --git a/src/core/adios_internals.c b/src/core/adios_internals.c
index 853a76d..9c75359 100644
--- a/src/core/adios_internals.c
+++ b/src/core/adios_internals.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-#include "../config.h" /* VERSION_xxx */
+#include "config.h" /* VERSION_xxx */
 #include <math.h>
 #include <string.h>
 #include <ctype.h>  /* isdigit() */
@@ -30,11 +30,11 @@
 #endif
 
 // 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"
-#include "adios_transforms_specparse.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_hooks.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_specparse.h"
 
 struct adios_method_list_struct * adios_methods = 0;
 struct adios_group_list_struct * adios_groups = 0;
@@ -976,6 +976,7 @@ int adios_common_define_attribute (int64_t group, const char * name
     }
 
     attr->next = 0;
+    attr->write_offset = 0;
 
     adios_append_attribute (&g->attributes, attr, ++g->member_count);
 
@@ -1048,6 +1049,7 @@ int adios_common_define_attribute_byvalue (int64_t group, const char * name
     }
 
     attr->next = 0;
+    attr->write_offset = 0;
 
     adios_append_attribute (&g->attributes, attr, ++g->member_count);
 
@@ -1309,6 +1311,11 @@ int adios_common_declare_group (int64_t * id, const char * name
     g->meshs = NULL;
     g->mesh_count = 0;
 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+    g->timing_obj = 0;
+    g->prev_timing_obj = 0;
+#endif
+
     *id = (int64_t) g;
 
     adios_append_group (g);
@@ -1316,106 +1323,134 @@ int adios_common_declare_group (int64_t * id, const char * name
     return 1;
 }
 
-int adios_common_free_group (int64_t id)
+// Delete all attribute (definitions) from a group
+int adios_common_delete_attrdefs (struct adios_group_struct * g)
 {
-    struct adios_group_list_struct * root = adios_groups;
-    struct adios_group_list_struct * old_root = adios_groups;
-    struct adios_group_struct * g = (struct adios_group_struct *) id;
-
-    if (!root)
+    while (g->attributes)
     {
-        adios_error (err_unspecified, "Err in adios_common_free_group(): no groups left\n");
-        return -1;
-    }
-    while (root && root->group->id != g->id)
-    {
-        old_root = root;
-        root = root->next;
-    };
-
-    if (!root)
-    {
-        // Didn't find the group
-        adios_error (err_unspecified, "Err in adios_common_free_group(): did not find requested group\n");
-        return -1;
-    }
-
-    // old_root->root->root next
-    if (root == adios_groups)
-    {
-        adios_groups =  root->next;
-    }
-    else
-    {
-        old_root->next = root->next;
+        struct adios_attribute_struct * attr = g->attributes;
+        g->attributes = g->attributes->next;
+        free (attr->value);
+        free (attr->name);
+        free (attr->path);
+        free (attr);
     }
+}
 
-    if (g->name)
-        free (g->name);
+// Delete all variable (definitions) from a group
+int adios_common_delete_vardefs (struct adios_group_struct * g)
+{
+    // remove variables from the hashtable at once
+    g->hashtbl_vars->clear(g->hashtbl_vars);
 
-    // free the hashtables
-    g->hashtbl_vars->free(g->hashtbl_vars);
     while (g->vars)
     {
-        struct adios_var_struct * vars = g->vars->next;
+        struct adios_var_struct * var = g->vars;
+        g->vars = g->vars->next;
 
-        if (g->vars->name)
-            free (g->vars->name);
-        if (g->vars->path)
-            free (g->vars->path);
+        if (var->name)
+            free (var->name);
+        if (var->path)
+            free (var->path);
 
-        while (g->vars->dimensions)
+        while (var->dimensions)
         {
             struct adios_dimension_struct * dimensions
-                = g->vars->dimensions->next;
+                = var->dimensions->next;
 
-            free (g->vars->dimensions);
-            g->vars->dimensions = dimensions;
+            free (var->dimensions);
+            var->dimensions = dimensions;
         }
 
         // NCSU - Clear Stat
-        if (g->vars->stats)
+        if (var->stats)
         {
             uint8_t j = 0, idx = 0;
-            enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(g->vars);
+            enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(var);
             uint8_t c = 0, count = adios_get_stat_set_count(original_var_type);
 
             for (c = 0; c < count; c ++)
             {
-                while (g->vars->bitmap >> j)
+                while (var->bitmap >> j)
                 {
-                    if ((g->vars->bitmap >> j) & 1)
+                    if ((var->bitmap >> j) & 1)
                     {
                         if (j == adios_statistic_hist)
                         {
-                            struct adios_hist_struct * hist = (struct adios_hist_struct *) (g->vars->stats[c][idx].data);
+                            struct adios_hist_struct * hist = (struct adios_hist_struct *) (var->stats[c][idx].data);
                             free (hist->breaks);
                             free (hist->frequencies);
                             free (hist);
                         }
                         else
-                            free (g->vars->stats[c][idx].data);
+                            free (var->stats[c][idx].data);
 
                         idx ++;
                     }
                     j ++;
                 }
-                free (g->vars->stats[c]);
+                free (var->stats[c]);
             }
-            free (g->vars->stats);
+            free (var->stats);
         }
 
         // NCSU ALACRITY-ADIOS - Clean transform metadata
-        adios_transform_clear_transform_var(g->vars);
+        adios_transform_clear_transform_var(var);
+
+        if (var->data)
+            free (var->data);
+
+        free (var);
+    }
+
+    return 0;
+}
 
-        if (g->vars->data)
-            free (g->vars->data);
+int adios_common_free_group (int64_t id)
+{
+    struct adios_group_list_struct * root = adios_groups;
+    struct adios_group_list_struct * old_root = adios_groups;
+    struct adios_group_struct * g = (struct adios_group_struct *) id;
 
-        free (g->vars);
-        g->vars = vars;
+    if (!root)
+    {
+        adios_error (err_unspecified, "Err in adios_common_free_group(): no groups left\n");
+        return -1;
     }
+    while (root && root->group->id != g->id)
+    {
+        old_root = root;
+        root = root->next;
+    };
+
+    if (!root)
+    {
+        // Didn't find the group
+        adios_error (err_unspecified, "Err in adios_common_free_group(): did not find requested group\n");
+        return -1;
+    }
+
+    // old_root->root->root next
+    if (root == adios_groups)
+    {
+        adios_groups =  root->next;
+    }
+    else
+    {
+        old_root->next = root->next;
+    }
+
+    if (g->name)             free (g->name);
+    if (g->group_by)         free (g->group_by);
+    if (g->group_comm)       free (g->group_comm);
+    if (g->time_index_name)  free (g->time_index_name);
+
+    adios_common_delete_vardefs (g);
+    adios_common_delete_attrdefs (g);
+    g->hashtbl_vars->free(g->hashtbl_vars);
 
     free (root);
+    free (g);
 
     return 0;
 }
@@ -1813,17 +1848,17 @@ int adios_common_set_transform (int64_t var_id, const char *transform_type_str)
     assert (v);
     // 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, v->transform_spec);
-    if (transform_spec->transform_type == adios_transform_unknown) {
+    adios_transform_parse_spec(transform_type_str, v->transform_spec);
+    if (v->transform_spec->transform_type == adios_transform_unknown) {
         adios_error(err_invalid_transform_type, 
                   "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;
+                  v->transform_spec->transform_type_str ? v->transform_spec->transform_type_str : "<null>", v->name);
+        v->transform_spec->transform_type = adios_transform_none;
     }
 
     // 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(v, transform_spec);
+    v = adios_transform_define_var(v);
     return adios_errno;
 }
 
@@ -2862,7 +2897,6 @@ void adios_copy_var_written (struct adios_group_struct * g, struct adios_var_str
     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)
@@ -2972,6 +3006,7 @@ void adios_copy_var_written (struct adios_group_struct * g, struct adios_var_str
             }
             else
             {
+                adios_transform_init_transform_var(var_new);
                 var_new->stats = 0;
                 var_new->data = malloc (size);
                 memcpy (var_new->data, var->data, size);
@@ -2981,6 +3016,7 @@ void adios_copy_var_written (struct adios_group_struct * g, struct adios_var_str
 
         case adios_string:
             {
+                adios_transform_init_transform_var(var_new);
                 var_new->data = malloc (size + 1);
                 memcpy (var_new->data, var->data, size);
                 ((char *) (var_new->data)) [size] = 0;
@@ -6151,19 +6187,19 @@ int adios_common_define_mesh_unstructured (char * points,
     strcat (mpath, name);
     strcat (mpath, "/type");
     adios_common_define_attribute (group_id, mpath, "", adios_string, "unstructured", "");
-    if (nspace)
+    if (nspace && *nspace != 0)
     {
 //        if (!adios_define_mesh_unstructured_nspace (nspace, new_group, name))
             if (!adios_define_mesh_nspace (nspace, new_group, name))
             return 0;
     }
-    if (npoints)
+    if (npoints && *npoints != 0)
     {
         if (!adios_define_mesh_unstructured_npoints (npoints, new_group, name))
             return 0;
 
     }
-    if (points){
+    if (points && *points != 0){
         char *p;
         // If we do find "," in points (single-var case)
         if (!(p = strstr(points, ","))){
@@ -6183,7 +6219,7 @@ int adios_common_define_mesh_unstructured (char * points,
                   "uniform-cells required (%s)\n", name);
         return 0;
     }
-    if (!count)
+    if (!count) 
     {
         log_warn ("config.xml: count attribute on "
                   "uniform-cells required (%s)\n", name);
@@ -6262,6 +6298,22 @@ void adios_conca_mesh_att_nam(char ** returnstr, const char * meshname, char * a
     strcat(*returnstr,att_nam);
 }
 
+// concat link attribute name strings
+void adios_conca_link_att_nam(char ** returnstr, const char * name, char * att_nam) {
+    int slength = 0;
+    slength = strlen("adios_link/")+1;
+    slength = slength + strlen(name);
+    slength = slength + 1;
+    slength = slength + strlen(att_nam);
+
+    *returnstr = malloc (slength);
+
+    strcpy(*returnstr,"adios_link/");
+    strcat(*returnstr,name);
+    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;
diff --git a/src/core/adios_internals.h b/src/core/adios_internals.h
index 48630d1..b15bf30 100644
--- a/src/core/adios_internals.h
+++ b/src/core/adios_internals.h
@@ -21,7 +21,7 @@
 // NCSU ALACRITY-ADIOS: Include needed for the transform spec struct
 #include "core/transforms/adios_transforms_specparse.h"
 
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 #include "core/adios_timing.h"
 #endif
 
@@ -73,7 +73,7 @@ struct adios_var_struct
     uint32_t bitmap;
 
     // NCSU ALACRITY-ADIOS - Adding transform-related fields
-    uint8_t transform_type;
+    enum ADIOS_TRANSFORM_TYPE transform_type;
     struct adios_transform_spec *transform_spec;
 
     enum ADIOS_DATATYPES pre_transform_type;
@@ -157,6 +157,13 @@ struct adios_group_struct
     enum ADIOS_FLAG all_unique_mesh_names;
 
     int attrid_update_epoch; // ID of special attribute "/__adios__/update_time_epoch" to find it fast
+
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+    // Using a "double buffering" approach. Current write cycle stored in timing_obj, while timing info from
+    // previous cycle is kept in prev_timing_obj, and is written before close
+    struct adios_timing_struct * timing_obj;
+    struct adios_timing_struct * prev_timing_obj;
+#endif
 };
 
 struct adios_group_list_struct
@@ -189,9 +196,6 @@ struct adios_file_struct
     uint64_t vars_start;    // offset for where to put the var/attr count
     uint32_t vars_written;  // count of vars/attrs to write
 
-#ifdef SKEL_TIMING
-    struct adios_timing_struct * timing_obj;
-#endif
     MPI_Comm comm;          // duplicate of comm received in adios_open()
 };
 
@@ -480,6 +484,7 @@ int adios_common_define_var_characteristics  (struct adios_group_struct * g
                                              );
 
 void adios_common_get_group (int64_t * group_id, const char * name);
+int adios_common_delete_vardefs (struct adios_group_struct * g);
 int adios_common_free_group (int64_t id);
 
 // ADIOS file format functions
@@ -574,6 +579,7 @@ const char * adios_file_mode_to_string (int mode);
 
 // the following are defined in adios_transport_hooks.c
 void adios_init_transports (struct adios_transport_struct ** transports);
+void adios_free_transports (struct adios_transport_struct * transports);
 int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
                        ,int * requires_group_comm
                        );
diff --git a/src/core/adios_internals_mxml.c b/src/core/adios_internals_mxml.c
index be29a0c..5dd42cd 100644
--- a/src/core/adios_internals_mxml.c
+++ b/src/core/adios_internals_mxml.c
@@ -1694,6 +1694,65 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                     free (meshtime);
                     free (meshfile);
                     free (meshgroup);
+                } else if (!strcasecmp (n->value.element.name, "link"))
+                {
+                    const char * ref;
+                    const char * type;
+                    const char * objref;
+                    const char * extref;
+                    // Get the var name
+                    ref = mxmlElementGetAttr (n, "ref");
+                    // Get the ref type
+                    type = mxmlElementGetAttr (n, "type");
+                    // Get the ref var name in external file
+                    objref = mxmlElementGetAttr(n, "objref");
+                    // Get the ref link
+                    extref = mxmlElementGetAttr(n, "extref");
+                    if (!ref)
+                        ref = ""; 
+                    if (!type)
+                        type = "var";
+                    if (!objref)
+                        objref = "";
+                    if (!extref)
+                        extref = "";
+                        
+                    const char * linkvar = 0;
+                    const char * linktype = 0;
+                    const char * linkobjref = 0;
+                    const char * linkextref = 0;
+
+                    if ( ref[0]=='\0' && objref[0]=='\0' )
+                    {
+                        log_warn ("config.xml: invalid var link, "
+                                "requires either ref OR objref.\n"
+                                );
+                        return 0;
+                    }
+                    else if ( ref[0]=='\0')
+                        ref = objref; //strcpy (ref, objref);
+                     
+                    if (ref)
+                    {
+                        adios_conca_link_att_nam (&linkvar, ref, "ref");
+                        adios_common_define_attribute (ptr_new_group, linkvar, "/",adios_string, ref, "");
+                    }
+                    if (objref)
+                    {
+                        adios_conca_link_att_nam (&linkobjref, ref, "objref");
+                        adios_common_define_attribute (ptr_new_group, linkobjref, "/",adios_string, objref,  "");
+                    }
+                    if (type)
+                    {
+                        adios_conca_link_att_nam (&linktype, ref, "type");
+                        adios_common_define_attribute (ptr_new_group, linktype, "/",adios_string, type,  "");
+                    }
+                    if (extref)
+                    {
+                        adios_conca_link_att_nam (&linkextref, ref, "extref");
+                        adios_common_define_attribute (ptr_new_group, linkextref, "/",adios_string, extref,  "");
+                    }
+
                 } else if (!strcasecmp (n->value.element.name, "gwrite"))
                 {
                     const char * src = 0;
@@ -2526,8 +2585,10 @@ int adios_common_select_method_by_group_id (int priority, const char * method
 void adios_cleanup ()
 {
     adios_transports_initialized = 0;
-    if (adios_transports)
+    if (adios_transports) {
+        adios_free_transports (adios_transports);
         free (adios_transports);
+    }
     adios_transports = 0;
 
     while (adios_methods)
diff --git a/src/core/adios_read_ext.c b/src/core/adios_read_ext.c
new file mode 100644
index 0000000..f8525ff
--- /dev/null
+++ b/src/core/adios_read_ext.c
@@ -0,0 +1,269 @@
+/*
+ * adios_read_ext.c
+ *
+ *  Created on: Apr 28, 2014
+ *      Author: xczou
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+
+#include "public/adios_read_ext.h"
+#include "core/common_read.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_transinfo.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/adios_selection_util.h"
+#include "core/adios_infocache.h"
+
+// Ensure unique pointer-based values for each one
+const data_view_t LOGICAL_DATA_VIEW = &LOGICAL_DATA_VIEW;
+const data_view_t PHYSICAL_DATA_VIEW = &PHYSICAL_DATA_VIEW;
+
+const adios_transform_type_t NO_TRANSFORM = adios_transform_none;
+
+// Sets the "data view" for this ADIOS file, which determines how ADIOS presents variables through
+// adios_inq_var*, and how reads are evaluated in adios_schedule_reads/adios_check_reads calls.
+// Currently, the choice is between a logical and physical view of the data, which only differ for
+// transformed variables; a logical view of a transformed variable presents the data as it was
+// originally written (this is the default), whereas a physical view presents the transformed data
+// as it actually exists on disk.
+data_view_t adios_read_set_data_view(ADIOS_FILE *fp, data_view_t data_view) {
+	return common_read_set_data_view(fp, data_view);
+}
+
+// Populates data transform information about a given variable into an ADIOS_VARTRANSFORM struct
+// Return NULL if failed
+ADIOS_VARTRANSFORM *  adios_inq_var_transform(const ADIOS_FILE *fp, const ADIOS_VARINFO *varinfo){
+	// Get the global metadata
+	ADIOS_TRANSINFO* tinfo = common_read_inq_transinfo(fp, varinfo);
+	if (tinfo == NULL)
+		return NULL;
+
+	// Get the per-PG metadata
+	common_read_inq_trans_blockinfo(fp, varinfo, tinfo);
+	if (tinfo->orig_blockinfo == NULL || tinfo->transform_metadatas == NULL)
+		return NULL;
+
+	// Load all the metadata into the ADIOS_VARTRANSFORM datastructure
+	ADIOS_VARTRANSFORM *vartransform = (ADIOS_VARTRANSFORM*) malloc(sizeof(ADIOS_VARTRANSFORM));
+	*vartransform = (ADIOS_VARTRANSFORM){
+		.varid = varinfo->varid,
+		.sum_nblocks = varinfo->sum_nblocks,
+		.transform_type = tinfo->transform_type,
+		.should_free_transform_metadata = tinfo->should_free_transform_metadata,
+		.transform_metadatas = tinfo->transform_metadatas
+	};
+
+	// Transfer ownership of the transform_metadatas array to the new struct, then free the struct
+	tinfo->transform_metadatas = NULL;
+	common_read_free_transinfo(varinfo, tinfo);
+
+	return vartransform;
+}
+
+#define MYFREE(p) {if (p){ free((void*)(p)); (p) = NULL; }}
+void adios_free_var_transform(ADIOS_VARTRANSFORM *vartransform) {
+	if (vartransform->transform_metadatas) {
+		if (vartransform->should_free_transform_metadata) {
+			int i;
+			for (i = 0; i < vartransform->sum_nblocks; i++)
+				MYFREE(vartransform->transform_metadatas[i].content);
+		}
+		MYFREE(vartransform->transform_metadatas);
+	}
+	MYFREE(vartransform);
+}
+
+
+void adios_free_pg_intersections(ADIOS_PG_INTERSECTIONS **intersections){
+	ADIOS_PG_INTERSECTIONS * intsec = *intersections;
+	int i = 0;
+	for(i=0; i < intsec->npg; i++){
+		ADIOS_PG_INTERSECTION inter = intsec->intersections[i];
+		common_read_selection_delete(inter.pg_bounds_sel);
+		common_read_selection_delete(inter.intersection_sel);
+	}
+	intsec->npg = 0;
+	intsec->intersections = NULL;
+	MYFREE(*intersections);
+}
+
+#undef MYFREE
+
+adios_transform_type_t adios_get_transform_type_by_uid(const char *transform_uid) {
+	return (adios_transform_type_t)adios_transform_find_type_by_uid(transform_uid);
+}
+
+// Creates a writeblock selection that only retrieves elements [start_elem, start_elem + num_elems)
+// within a variable. An element is a single value of whatever the varaible's datatype is (i.e.,
+// 1 element = 1 double if the variable type is double, 1 byte if the variable type is byte, etc.)
+ADIOS_SELECTION * adios_selection_writeblock_bounded(int index, uint64_t start_elem, uint64_t num_elems, int is_timestep_relative) {
+	ADIOS_SELECTION *sel = common_read_selection_writeblock(index);
+	sel->u.block.is_absolute_index = !is_timestep_relative;
+	sel->u.block.is_sub_pg_selection = 1;
+	sel->u.block.element_offset = start_elem;
+	sel->u.block.nelements = num_elems;
+	return sel;
+}
+
+/*
+ * 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 ADIOS_SELECTION * create_pg_bounds(int ndim, ADIOS_VARBLOCK *orig_vb) {
+    return common_read_selection_boundingbox(ndim, orig_vb->start, orig_vb->count);
+}
+
+int adios_get_absolute_writeblock_index(const ADIOS_VARINFO *varinfo, int timestep_relative_idx, int timestep) {
+	int i;
+	int absolute_idx = timestep_relative_idx;
+
+	assert(varinfo->blockinfo);
+
+	if (timestep < 0 || timestep >= varinfo->nsteps) {
+		adios_error(err_invalid_timestep,
+					"Timestep %d out of range (min 0, max %d) (at %s:%s)",
+					timestep, varinfo->nsteps, __FILE__, __LINE__);
+		return -1;
+	}
+	if (timestep_relative_idx < 0 || timestep_relative_idx >= varinfo->nblocks[timestep]) {
+		adios_error(err_invalid_argument,
+					"Writeblock %d out of range for timestep %d (min 0, max %d) (at %s:%s)",
+					timestep_relative_idx, timestep, varinfo->nsteps, __FILE__, __LINE__);
+		return -1;
+	}
+
+	for (i = 0; i < timestep; i++)
+		absolute_idx += varinfo->nblocks[i];
+
+	return absolute_idx;
+}
+
+#define INITIAL_INTERSECTION_CAPACITY 16;
+ADIOS_PG_INTERSECTIONS * adios_find_intersecting_pgs(const ADIOS_FILE *fp, int varid, const ADIOS_SELECTION *sel, const int from_step, const int nsteps) {
+    // Declares
+    adios_transform_read_request *new_reqgroup;
+    int blockidx, timestep, timestep_blockidx;
+    int curblocks, start_blockidx, end_blockidx;
+    int intersects;
+    ADIOS_VARBLOCK *raw_vb, *vb;
+
+    enum ADIOS_FLAG swap_endianness = (fp->endianness == get_system_endianness()) ? adios_flag_no : adios_flag_yes;
+    int to_steps = from_step + nsteps;
+
+    // As long as we don't free/destroy it, using the infocache from the file will have no effect on future
+    // operations using the file (except possibly speeding them up, so "constness" is still respected
+    adios_infocache *infocache = common_read_get_file_infocache((ADIOS_FILE*)fp);
+
+    ADIOS_PG_INTERSECTIONS *resulting_intersections = (ADIOS_PG_INTERSECTIONS *)calloc(1, sizeof(ADIOS_PG_INTERSECTIONS));
+    resulting_intersections->npg = 0;
+
+    int intersection_capacity = INITIAL_INTERSECTION_CAPACITY;
+    resulting_intersections->intersections = (ADIOS_PG_INTERSECTION *)calloc(intersection_capacity, sizeof(ADIOS_PG_INTERSECTION));
+
+    // Precondition checking
+    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.");
+    }
+
+    // Still respecting constness, since we're going to undo this
+    const data_view_t old_view = adios_read_set_data_view((ADIOS_FILE*)fp, LOGICAL_DATA_VIEW); // Temporarily go to logical data view
+
+    const ADIOS_VARINFO *varinfo = adios_infocache_inq_varinfo(fp, infocache, varid);
+    assert(from_step >= 0 && to_steps <= varinfo->nsteps);
+
+    // Compute the blockidx range, given the timesteps
+    compute_blockidx_range(varinfo, from_step, to_steps, &start_blockidx, &end_blockidx);
+
+    // Retrieve blockinfos, if they haven't been done retrieved
+    if (!varinfo->blockinfo)
+    	common_read_inq_var_blockinfo(fp, (ADIOS_VARINFO *)varinfo);
+
+    // Undoing view set (returning to const state)
+    adios_read_set_data_view((ADIOS_FILE*)fp, old_view); // Reset the data view to whatever it was before
+
+    // Assemble read requests for each varblock
+    blockidx = start_blockidx;
+    timestep = from_step;
+    timestep_blockidx = 0;
+
+    while (blockidx != end_blockidx) { //for (blockidx = startblock_idx; blockidx != endblock_idx; blockidx++) {
+        ADIOS_SELECTION *pg_bounds_sel;
+        ADIOS_SELECTION *pg_intersection_sel;
+
+        vb = &varinfo->blockinfo[blockidx];
+        pg_bounds_sel = create_pg_bounds(varinfo->ndim, vb);
+
+        // Find the intersection, if any
+        pg_intersection_sel = adios_selection_intersect_global(pg_bounds_sel, sel);
+        if (pg_intersection_sel) {
+        	// Expand the PG intersection array, if needed
+        	if (resulting_intersections->npg == intersection_capacity) {
+        		intersection_capacity *= 2;
+        		resulting_intersections->intersections = (ADIOS_PG_INTERSECTION *)realloc(resulting_intersections->intersections, intersection_capacity * sizeof(ADIOS_PG_INTERSECTION));
+
+        		if (!resulting_intersections->intersections) {
+        			adios_error (err_no_memory, "Cannot allocate buffer for PG intersection results in adios_find_intersecting_pgs (required %llu bytes)\n", intersection_capacity * sizeof(ADIOS_PG_INTERSECTION));
+        			return NULL;
+        		}
+        	}
+
+        	ADIOS_PG_INTERSECTION *intersection = &resulting_intersections->intersections[resulting_intersections->npg];
+        	intersection->timestep = timestep;
+        	intersection->blockidx = blockidx;
+        	intersection->blockidx_in_timestep = timestep_blockidx;
+        	intersection->intersection_sel = pg_intersection_sel;
+        	intersection->pg_bounds_sel = pg_bounds_sel;
+
+        	resulting_intersections->npg++;
+        } else {
+            // Cleanup
+            common_read_selection_delete(pg_bounds_sel); // OK to delete, because this function only frees the outer struct, not the arrays within
+        }
+
+        // Increment block indexes
+        blockidx++;
+        timestep_blockidx++;
+        if (timestep_blockidx == varinfo->nblocks[timestep]) {
+            timestep_blockidx = 0;
+            timestep++;
+        }
+    }
+
+    return resulting_intersections;
+}
+
+
+// What is the dimension order of arrays in the file?
+// 0: C ordering (row-major), last dimension is the fastest dimension
+// 1: Fortran ordering (column-major), first dimension is the fastest dimension
+int adios_read_get_dimension_order (ADIOS_FILE * fp)
+{
+    return common_read_get_dimension_order (fp);
+}
+
+
+
+
diff --git a/src/core/adios_read_hooks.c b/src/core/adios_read_hooks.c
index 69916e4..8cbb1f1 100644
--- a/src/core/adios_read_hooks.c
+++ b/src/core/adios_read_hooks.c
@@ -31,6 +31,7 @@ if (!strcasecmp (buf,b)) \
 (*t) [b].adios_perform_reads_fn = adios_read_##a##_perform_reads; \
 (*t) [b].adios_check_reads_fn = adios_read_##a##_check_reads; \
 (*t) [b].adios_get_attr_byid_fn = adios_read_##a##_get_attr_byid; \
+(*t) [b].adios_get_dimension_order_fn = adios_read_##a##_get_dimension_order; \
 (*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; \
@@ -66,6 +67,10 @@ void adios_read_hooks_init (struct adios_read_hooks_struct ** t)
 #endif
 #endif
 
+#if HAVE_ICEE
+       ASSIGN_FNS(icee, ADIOS_READ_METHOD_ICEE);
+#endif
+
 #if HAVE_PHDF5
         //ASSIGN_FNS(hdf5,ADIOS_READ_METHOD_HDF5)
 #endif
diff --git a/src/core/adios_read_hooks.h b/src/core/adios_read_hooks.h
index 0882816..14a2900 100644
--- a/src/core/adios_read_hooks.h
+++ b/src/core/adios_read_hooks.h
@@ -11,7 +11,7 @@
 #include "config.h"
 #include <stdint.h>
 #include <string.h>
-#include "public/adios_read.h"
+#include "public/adios_read_v2.h"
 #include "core/transforms/adios_transforms_transinfo.h" // NCSU ALACRITY-ADIOS
 #include "core/util.h" // PairStruct*
 
@@ -30,6 +30,7 @@ int adios_read_##a##_schedule_read_byid (const ADIOS_FILE * fp, const ADIOS_SELE
 int adios_read_##a##_perform_reads (const ADIOS_FILE *fp, int blocking); \
 int adios_read_##a##_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk); \
 int adios_read_##a##_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_DATATYPES * type, int * size, void ** data); \
+int adios_read_##a##_get_dimension_order (const ADIOS_FILE *fp); \
 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, uint32_t **nvars_per_group, uint32_t **nattrs_per_group); \
 int adios_read_##a##_is_var_timed (const ADIOS_FILE *fp, int varid); \
@@ -58,6 +59,9 @@ FORWARD_DECLARE(dataspaces)
 #if HAVE_FLEXPATH
 FORWARD_DECLARE(flexpath)
 #endif
+#if HAVE_ICEE
+FORWARD_DECLARE(icee)
+#endif
 #if HAVE_DIMES
 FORWARD_DECLARE(dimes)
 #endif
@@ -88,6 +92,7 @@ typedef int  (* ADIOS_PERFORM_READS_FN) (const ADIOS_FILE *fp, int blocking);
 typedef int  (* ADIOS_CHECK_READS_FN) (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk);
 typedef int  (* ADIOS_GET_ATTR_BYID_FN) (const ADIOS_FILE * fp, int attrid, 
                                  enum ADIOS_DATATYPES * type, int * size, void ** data);
+typedef int  (* ADIOS_GET_DIMENSION_ORDER_FN) (const ADIOS_FILE *fp);
 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, uint32_t **nvars_per_group, uint32_t **nattrs_per_group); 
 typedef int  (* ADIOS_IS_VAR_TIMED_FN) (const ADIOS_FILE *fp, int varid); 
@@ -111,6 +116,7 @@ struct adios_read_hooks_struct
     ADIOS_PERFORM_READS_FN          adios_perform_reads_fn;
     ADIOS_CHECK_READS_FN            adios_check_reads_fn;
     ADIOS_GET_ATTR_BYID_FN          adios_get_attr_byid_fn;
+    ADIOS_GET_DIMENSION_ORDER_FN    adios_get_dimension_order_fn;
     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;
diff --git a/src/core/adios_read_v1.c b/src/core/adios_read_v1.c
index f8cdd30..d814f5c 100644
--- a/src/core/adios_read_v1.c
+++ b/src/core/adios_read_v1.c
@@ -15,6 +15,7 @@
 #undef ADIOS_GROUP
 #undef ADIOS_VARINFO
 #undef ADIOS_HIST
+#undef ADIOS_VARBLOCK
 
 #undef ADIOS_READ_METHOD
 #undef ADIOS_READ_METHOD_BP
diff --git a/src/core/adios_selection_util.c b/src/core/adios_selection_util.c
index 734f3a4..a551e09 100644
--- a/src/core/adios_selection_util.c
+++ b/src/core/adios_selection_util.c
@@ -5,6 +5,7 @@
  *      Author: David A. Boyuka II
  */
 
+#include <stddef.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <assert.h>
@@ -23,7 +24,7 @@
 //
 
 //
-// One-on-one intersection functions
+// One-on-one global intersection functions
 //
 ADIOS_SELECTION * adios_selection_intersect_bb_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
                                                   const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2) {
@@ -142,15 +143,8 @@ ADIOS_SELECTION * adios_selection_intersect_pts_pts(const ADIOS_SELECTION_POINTS
     }
 }
 
-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
+// One-on-any global intersection functions
 //
 
 // s2 can be selection type
@@ -167,12 +161,6 @@ inline static ADIOS_SELECTION * adios_selection_intersect_bb(const ADIOS_SELECTI
         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;
@@ -188,50 +176,30 @@ inline static ADIOS_SELECTION * adios_selection_intersect_pts(const ADIOS_SELECT
         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
+// Any-on-any global intersection function
 //
 
+static int is_global_selection(const ADIOS_SELECTION *sel) {
+	return sel->type == ADIOS_SELECTION_BOUNDINGBOX || sel->type == ADIOS_SELECTION_POINTS;
+}
+
 // 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) {
+// with arguments swapped if they are out of this order. This simplifies the above helper
+// functions.
+ADIOS_SELECTION * adios_selection_intersect_global(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2) {
+	if (!is_global_selection(s1) || !is_global_selection(s2)) {
+    	adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Internal error: adios_selection_intersect_global called on non-global selection(s)");
+    	return NULL;
+	}
+
+	switch (s1->type) {
     case ADIOS_SELECTION_BOUNDINGBOX:
     {
         const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1 = &s1->u.bb;
@@ -241,34 +209,132 @@ ADIOS_SELECTION * adios_selection_intersect(const ADIOS_SELECTION *s1, const ADI
     {
         const ADIOS_SELECTION_POINTS_STRUCT *pts1 = &s1->u.points;
         if (s1->type == ADIOS_SELECTION_BOUNDINGBOX) {
-            return adios_selection_intersect(s2, s1);
+            return adios_selection_intersect_global(s2, s1);
         } else {
             return adios_selection_intersect_pts(pts1, s2);
         }
     }
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s1->type);
+        return NULL;
+    }
+}
+
+
+//
+// One-on-one global intersection functions
+//
+ADIOS_SELECTION * adios_selection_intersect_wb_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                  const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2,
+                                                  int timestep,
+                                                  const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo)
+{
+	int is_abs_idx;
+	int wbindex;
+	if (wb1->is_absolute_index == wb2->is_absolute_index) {
+		const int index1 = wb1->index;
+		const int index2 = wb2->index;
+		if (index1 != index2)
+			return NULL;
+
+		wbindex = index1;
+		is_abs_idx = wb1->is_absolute_index;
+	} else {
+		const int index1 = wb1->is_absolute_index ? wb1->index : adios_get_absolute_writeblock_index(raw_varinfo, wb1->index, timestep);
+		const int index2 = wb2->is_absolute_index ? wb2->index : adios_get_absolute_writeblock_index(raw_varinfo, wb2->index, timestep);
+		if (index1 != index2)
+			return NULL;
+
+		wbindex = index1;
+		is_abs_idx = 1;
+	}
+
+	if (!wb1->is_sub_pg_selection && !wb2->is_sub_pg_selection) {
+		// If neither selection is a sub-PG selection, the result is easy, and we can return immediately
+		ADIOS_SELECTION *inter_sel = common_read_selection_writeblock(wbindex);
+		inter_sel->u.block.is_absolute_index = is_abs_idx;
+		return inter_sel;
+	} else if (wb1->is_sub_pg_selection && wb2->is_sub_pg_selection) {
+		// Else, if both selections are sub-PG selections, take the overlapping portion (if any)
+		uint64_t inter_elem_offset, inter_nelems;
+
+		int intersects = intersect_segments(
+				wb1->element_offset, wb1->nelements,
+				wb2->element_offset, wb2->nelements,
+				&inter_elem_offset, &inter_nelems
+		);
+
+		if (intersects) {
+			ADIOS_SELECTION *inter_sel = common_read_selection_writeblock(wbindex);
+			inter_sel->u.block.is_absolute_index = is_abs_idx;
+			inter_sel->u.block.is_sub_pg_selection = 1;
+			inter_sel->u.block.element_offset = inter_elem_offset;
+			inter_sel->u.block.nelements = inter_nelems;
+			return inter_sel;
+		} else {
+			return NULL;
+		}
+	} else if (wb1->is_sub_pg_selection) {
+		// Else, if only the first selection is sub-PG, so just use its range
+		ADIOS_SELECTION *newwb = common_read_selection_writeblock(wb1->index);
+		newwb->u.block = *wb1;
+		return newwb;
+	} else if (wb2->is_sub_pg_selection) {
+		// Else, only the second selection is sub-PG, so just use its range
+		ADIOS_SELECTION *newwb = common_read_selection_writeblock(wb2->index);
+		newwb->u.block = *wb2;
+		return newwb;
+	} else {
+		abort(); // Should not be possible'
+		return NULL;
+	}
+}
+
+//
+// One-on-any local intersection functions
+//
+
+// s2 can be selection type
+inline static ADIOS_SELECTION * adios_selection_intersect_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                             const ADIOS_SELECTION *s2,
+                                                             int timestep,
+                                                             const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo)
+{
+    switch (s2->type) {
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2 = &s2->u.block;
+        return adios_selection_intersect_wb_wb(wb1, wb2, timestep, raw_varinfo, transinfo);
+    }
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s2->type);
+        return NULL;
+    }
+}
+
+//
+// Any-on-any local intersection function
+//
+ADIOS_SELECTION * adios_selection_intersect_local(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2, int timestep, const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo)
+{
+	if (is_global_selection(s1) || is_global_selection(s2)) {
+    	adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Internal error: adios_selection_intersect_local called on non-local selection(s)");
+    	return NULL;
+	}
+
+	switch (s1->type) {
     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);
-        }
+        return adios_selection_intersect_wb(wb1, s2, timestep, raw_varinfo, transinfo);
     }
-    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);
-        }
+    case ADIOS_SELECTION_AUTO:
+    {
+    	adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unsupported selection type AUTO in adios_selection_intersect_local");
+    	return NULL;
     }
     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
index ea45b69..c8a2b69 100644
--- a/src/core/adios_selection_util.h
+++ b/src/core/adios_selection_util.h
@@ -9,6 +9,8 @@
 #define ADIOS_SELECTION_UTIL_H_
 
 #include <public/adios_selection.h>
+#include <public/adios_read_v2.h>
+#include <core/transforms/adios_transforms_transinfo.h>
 
 ADIOS_SELECTION * adios_selection_intersect_bb_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
                                                   const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2);
@@ -16,8 +18,7 @@ ADIOS_SELECTION * adios_selection_intersect_bb_pts(const ADIOS_SELECTION_BOUNDIN
                                                    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.
@@ -28,6 +29,15 @@ ADIOS_SELECTION * adios_selection_intersect_wb_wb(const ADIOS_SELECTION_WRITEBLO
  * @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);
+ADIOS_SELECTION * adios_selection_intersect_global(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2);
+
+// Local (PG-relative) selection intersections
+
+ADIOS_SELECTION * adios_selection_intersect_wb_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                  const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2,
+                                                  int timestep,
+                                                  const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo);
+
+ADIOS_SELECTION * adios_selection_intersect_local(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2, int timestep, const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo);
 
 #endif /* ADIOS_SELECTION_UTIL_H_ */
diff --git a/src/core/adios_subvolume.c b/src/core/adios_subvolume.c
index 4d277d5..1e13193 100644
--- a/src/core/adios_subvolume.c
+++ b/src/core/adios_subvolume.c
@@ -34,8 +34,8 @@ uint64_t compute_volume(int ndim, const uint64_t *dims) {
     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 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;
 
diff --git a/src/core/adios_subvolume.h b/src/core/adios_subvolume.h
index c16fbf7..9f2fc9f 100644
--- a/src/core/adios_subvolume.h
+++ b/src/core/adios_subvolume.h
@@ -42,7 +42,7 @@
 
 #include <stdint.h>
 #include "public/adios_types.h"
-#include "public/adios_read.h"
+#include "public/adios_read_v2.h"
 #include "public/adios_selection.h"
 #include "core/adios_copyspec.h"
 
@@ -55,6 +55,25 @@ void vector_sub(int ndim, uint64_t *dst, const uint64_t *vec1, const uint64_t *v
 uint64_t compute_volume(int ndim, const uint64_t *dims);
 
 /*
+ * Calculates the intersection, if any, between two line segments in a 1D space.
+
+ * If the line segments intersect, this function will return a non-zero value, and
+ * the output arguments (inter_start, inter_len) will be populated with the offset
+ * and length of the intersection region, respectively.
+ *
+ * If the volumes are disjoint, this function will return 0, and the content of
+ * the output arguments is undefined.
+ *
+ * @param start1 the offset of the first line segment
+ * @param len1 the length of the first line segment
+ * @param start2 the offset of the second line segment
+ * @param len2 the length of the second line segment
+ * @param inter_start a pointer to a uint64_t to hold the intersection region's offset
+ * @param inter_len a pointer to a uint64_t to hold the intersection region's length
+ */
+int intersect_segments(uint64_t start1, uint64_t len1, uint64_t start2, uint64_t len2,
+                       uint64_t *inter_start, uint64_t *inter_len);
+/*
  * 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
diff --git a/src/core/adios_timing.c b/src/core/adios_timing.c
index 762c0c9..a55d004 100644
--- a/src/core/adios_timing.c
+++ b/src/core/adios_timing.c
@@ -15,19 +15,20 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/time.h>
+#include <sys/param.h>
 
 #include "public/adios_mpi.h"
 //#include "mpi.h"
 
-
+ 
 /*
- * Dump the timing information to an XML file.
- * The first process writes first, the last writes last, and the others are in unspecified order.
+ * Dump the timing information to a file.
  * Called both from C and Fortran API's (adios.c and adiosf.c)
 */
 void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
 {
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMER_EVENTS && !defined _NOMPI //No timing information on single process
+
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
@@ -36,141 +37,366 @@ void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
         return;
     }
 
-    if (!fd->timing_obj)
+    if (!fd->group || !fd->group->prev_timing_obj)
     {
-        log_error ("No timing info available, file not written\n");
         // No timing info, don't write anything.
         return;
     }
 
-    int size, rank, i, p;
-    MPI_Comm_size (MPI_COMM_WORLD, &size);
-    MPI_Comm_rank (MPI_COMM_WORLD, &rank);
-
-    double * internal_times = NULL;
-    double * user_times = NULL;
+    int size=1, rank=0, i, global_event_count, count_to_send;
+ 
+    int * counts;
+    int * displs;
+    struct adios_timing_event_struct* events;
+    MPI_Datatype event_type;
+    if (fd->comm != MPI_COMM_NULL)
+    {
+        MPI_Comm_size (fd->comm, &size);
+        MPI_Comm_rank (fd->comm, &rank);
+    }
 
-    // Allocate space for aggregation
     if (rank == 0)
     {
-        internal_times = (double*) malloc (sizeof (double) *
-                             fd->timing_obj->internal_count * size);
-        user_times = (double*) malloc (sizeof (double) *
-                             fd->timing_obj->user_count * size);
+        counts = (int*) malloc (sizeof (int) * size);
     }
 
-    // Aggregate timing info on rank 0
-    // Handle internal counts and user counts separately
+    // Collect all of the events on proc 0
+    // First, per proc event counts
+
+    count_to_send = (fd->group->prev_timing_obj->event_count > ADIOS_TIMING_MAX_EVENTS) ?
+                      ADIOS_TIMING_MAX_EVENTS : fd->group->prev_timing_obj->event_count;
+
 
     MPI_Gather (
-        fd->timing_obj->times + ADIOS_TIMING_MAX_USER_TIMERS,
-        fd->timing_obj->internal_count,  // sendcount
-        MPI_DOUBLE, // sendtype
-        internal_times,
-        fd->timing_obj->internal_count, // recvcount
-        MPI_DOUBLE, // recvtype
-        0, // root
-        MPI_COMM_WORLD
+        &count_to_send, // sendbuf
+        1,              // sendcount
+        MPI_INT,        // sendtype
+        counts,         // recvbuf
+        1,           // recvcount
+        MPI_INT,        // recvtype
+        0,              // root
+        fd->comm  // comm
     );
 
-    MPI_Gather (
-        fd->timing_obj->times,  // sendbuf
-        fd->timing_obj->user_count,  // sendcount
-        MPI_DOUBLE, // sendtype
-        user_times,
-        fd->timing_obj->user_count, // recvcount
-        MPI_DOUBLE, // recvtype
+    if (rank == 0)
+    {
+
+        displs = (int*) malloc (sizeof (int) * size);
+        displs[0] = 0;
+        global_event_count = counts[0];
+
+        for (i = 1; i < size; i++)
+        {
+            displs[i] = displs[i-1] + counts[i-1];
+            global_event_count += counts[i];
+        }
+
+        events = (struct adios_timing_event_struct*) malloc (
+            sizeof (struct adios_timing_event_struct) * global_event_count);
+    }
+
+    // structure of the adios_timing_event_struct (int, int, double)
+    int blocklens[]  = {2,1};
+    MPI_Aint disps[]      = {0,2*sizeof(int)};
+    MPI_Datatype types[] = {MPI_INT,MPI_DOUBLE};
+
+    MPI_Type_create_struct (
+        2, // count
+        blocklens, // array_of_blocklengths
+        disps, // array_of_displacements
+        types, // array_of_types
+        &event_type
+    );
+    MPI_Type_commit (&event_type);
+
+
+    // Now the events
+    MPI_Gatherv (
+        &fd->group->prev_timing_obj->events, // sendbuf
+        count_to_send, // sendcount
+        event_type, // sendtype
+        events, //recvbuf
+        counts, // recvcounts
+        displs, // displacements
+        event_type, // recvtype
         0, // root
-        MPI_COMM_WORLD
+        fd->comm // comm
     );
 
+    // Gather the write sizes
+    int *write_sizes = NULL;
+    if (rank == 0)
+    {
+        write_sizes = (int*) malloc (sizeof(int) * size);
+    }
 
-    // Now write all timing info from rank 0
+    MPI_Gather (
+        &fd->write_size_bytes, //sendbuf
+        1, //sendcount
+        MPI_INT, //sendtype
+        write_sizes, //recvbuf
+        1, //recvcount
+        MPI_INT, //recvtype
+        0, //root
+        fd->comm //comm
+    );
 
+    // Write the events to a file
     if (rank == 0)
     {
-        FILE* f = fopen (filename, "w");
+        FILE* f = fopen (filename, "a");
+        int event_rank;
 
-        // Rank 0 starts the xml and includes the text labels
-        fprintf (f, "<skel_result><adios_timing cores='%i' keys='", size);
-        for (i = 0; i < fd->timing_obj->user_count; i++)
+        for (i = 0; i < size; i++)
         {
-            if (fd->timing_obj->names[i])
-            {
-                fprintf (f, "%s, ", fd->timing_obj->names[i]);
-            }
-            else
-            {
-                fprintf (f, "user%i, ", i);
-            }
+            fprintf (f, "'%i'%i\n", i, write_sizes[i]);
         }
-        for (i = 0; i < fd->timing_obj->internal_count; i++)
+
+        // Write the labels
+        for (i = 0; i < fd->group->prev_timing_obj->internal_count; i++)
         {
-            if (fd->timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i])
-            {
-                fprintf (f, fd->timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i]);
-            }
-            else
-            {
-                fprintf (f, "internal%i", i);
-            }
-            if (i != fd->timing_obj->internal_count - 1) // Skip trailing comma
+            fprintf (f, ":%i:%s\n", ADIOS_TIMING_MAX_USER_TIMERS + i,
+                     fd->group->prev_timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i]); 
+        }
+
+        // Now the event data
+        i = 0;
+        for (event_rank = 0; event_rank < size; event_rank++)
+        {
+            for ( ; i < displs[event_rank] + counts[event_rank]; i++) 
             {
-                fprintf (f, ", ");
+                fprintf (f, "%i,%i%s,%f\n", event_rank, events[i].type,
+                         events[i].is_start?"S":"E", events[i].time);
             }
         }
-        fprintf (f, "' "); // Close the keys attribute
 
-        // Assume there is only one method in play
-        fprintf (f, "method='%s' ", fd->group->methods->method->method);
+        fclose(f);
+    }
+
+
+    if (rank == 0)
+    {
+        if (counts)
+            free (counts);
+    }
+
+#else
+    log_warn ("Timing events are not currently available.\n"
+              "To use the timing events, you must enable them when building ADIOS.\n"
+              "Use --enable-timer-events during the configuration step.\n");
+#endif
 
-        struct timeval tv;
-        gettimeofday (&tv, NULL);
-        double time = tv.tv_sec+(tv.tv_usec/1000000.0);
-        fprintf (f, "start_time='%f' ", time);
+}
+
+//Build the internal functions only when timing is enabled.
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 
-        fprintf (f, ">\n"); // Close the adios_timing element
 
 
-// Use the aggregated values here
+void adios_write_timing_variables (struct adios_file_struct * fd)
+{
+    if (!fd)
+    {
+        adios_error (err_invalid_file_pointer,
+                     "Invalid handle passed to adios_write_timing_variables\n");
+        return;
+    }
 
-        for (p = 0; p < size; p++)
+    if (!fd->group || !fd->group->prev_timing_obj)
+    {
+        // No timing info, don't write anything.
+        return;
+    }
+
+    struct adios_group_struct * g = fd->group;
+    int timer_count = g->prev_timing_obj->user_count + g->prev_timing_obj->internal_count;
+    
+    int rank=0, i, ct=0;
+    if (fd->comm != MPI_COMM_NULL)
+    {
+        MPI_Comm_rank (fd->comm, &rank);
+    }
+
+    char name_timers[256];
+    char name_labels[256];
+    snprintf (name_timers, 256, "/__adios__/timers_%hu", 
+            (short unsigned int)g->id);
+    snprintf (name_labels, 256, "/__adios__/timer_labels_%hu", 
+            (short unsigned int)g->id);
+
+    struct adios_var_struct * v; 
+
+    if (rank == 0)
+    {
+        v = adios_find_var_by_name (g, name_labels);
+        if (v)
         {
-            // This part should be the same for all procs
-            fprintf (f, "<proc id='%i' vals='", p);
-            for (i = 0; i < fd->timing_obj->user_count; i++)
-            {
-                fprintf (f, "%f, ", user_times[p*fd->timing_obj->user_count+i]);
-                //fprintf (f, "%f, ", fd->timing_obj->times[i]);
-            }
-            for (i = 0; i < fd->timing_obj->internal_count; i++)
-            {
-                fprintf (f, "%f", internal_times[p*fd->timing_obj->internal_count+i]);
-                //fprintf (f, "%f", fd->timing_obj->times[ADIOS_TIMING_MAX_USER_TIMERS + i]);
-                if (i != fd->timing_obj->internal_count - 1)
-                {
-                    fprintf (f, ", ");
-                }
-            }
-            fprintf (f, "' />\n");
+            int max_label_len = 0;
+	    for (i = 0; i < g->prev_timing_obj->user_count; i++)
+	    {
+		max_label_len = MAX(max_label_len,
+                    strlen(g->prev_timing_obj->names[i]));
+	    }
+	    for (i = 0; i < g->prev_timing_obj->internal_count; i++)
+	    {
+		max_label_len = MAX(max_label_len,
+                    strlen(g->prev_timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i]));
+	    }
+
+            char * labels = (char*)
+                              malloc ( (max_label_len+1) * timer_count * sizeof (char) );
+
+	    for (i = 0; i < g->prev_timing_obj->user_count; i++)
+	    {
+                strcpy (&labels[(ct++)*(max_label_len+1)], g->prev_timing_obj->names[i]);
+	    }
+	    for (i = 0; i < g->prev_timing_obj->internal_count; i++)
+	    {
+                strcpy (&labels[(ct++)*(max_label_len+1)], 
+                        g->prev_timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i]);
+	    }
+
+            common_adios_write_byid (fd, v, labels);
+            free (labels);
+        }
+        else
+        {
+            log_warn ("Unable to write %s, continuing", name_labels);
         }
+    }
 
+    double * timers = (double*) malloc (sizeof (double) * timer_count);
+    ct = 0;
+    for (i = 0; i < g->prev_timing_obj->user_count; i++)
+    {
+        timers[ct++] = g->prev_timing_obj->times[i];
+    }
+    for (i = 0; i < g->prev_timing_obj->internal_count; i++)
+    {
+        timers[ct++] = g->prev_timing_obj->times [ADIOS_TIMING_MAX_USER_TIMERS + i];
+    }
+
+// DEBUG
+//for (i = 0; i < ct; i++)
+//    printf ("%f,", timers[i]);
 
-        fprintf (f, "</adios_timing></skel_result>\n");
-        fclose (f);
 
+    v = adios_find_var_by_name (g, name_timers);
+    if (v)
+    {
+        common_adios_write_byid (fd, v, timers);
     }
-#else
-    log_warn ("Timing information is not currently available.\n"
-              "To use the Skel timing functions, you must enable them when building ADIOS.\n"
-              "Use --enable-skel-timing during the configuration step.\n");
-#endif
+    else
+    {
+        log_warn ("Unable to write %s, continuing", name_timers);
+    }
+
+    free (timers);
+
 }
 
+int adios_add_timing_variables (struct adios_file_struct * fd)
+{
+
+    if (!fd)
+    {
+        adios_error (err_invalid_file_pointer,
+                     "Invalid handle passed to adios_add_timing_variables\n");
+        return 1;
+    }
+
+    if (!fd->group || !fd->group->prev_timing_obj)
+    {
+        // No timing info, don't write anything.
+        return 0;
+    }
 
 
-//Build the internal functions only when timing is enabled.
-#ifdef SKEL_TIMING
+    struct adios_group_struct * g = fd->group;
+
+    int i, tv_size = 0; // size of the extra timing variables to be written
+
+    int rank=0, size=1;
+    if (fd->comm != MPI_COMM_NULL) {
+        MPI_Comm_rank (fd->comm, &rank);
+        MPI_Comm_size (fd->comm, &size);
+    }
+
+    char dim_str[256];
+    char glob_dim_str[256];
+    char loc_off_str[256];
+    char name_timers[256];
+    char name_labels[256];
+    snprintf (name_timers, 256, "/__adios__/timers_%hu", 
+            (short unsigned int)g->id);
+    snprintf (name_labels, 256, "/__adios__/timer_labels_%hu", 
+            (short unsigned int)g->id);
+
+
+    int timer_count = g->prev_timing_obj->user_count + g->prev_timing_obj->internal_count;
+    tv_size += timer_count * size * 8; //timers
+
+
+    if (! adios_find_var_by_name (g, name_timers))
+    {
+        if (g->adios_host_language_fortran == adios_flag_yes) { 
+            sprintf (loc_off_str, "0,%i", rank);
+            sprintf (glob_dim_str, "%i,%i", timer_count, size);
+            sprintf (dim_str, "%i,1", timer_count);
+        } else {
+            sprintf (loc_off_str, "%i,0", rank);
+            sprintf (glob_dim_str, "%i,%i", size, timer_count);
+            sprintf (dim_str, "1,%i",timer_count);
+        }
+       
+        // This is the actual timing data
+        adios_common_define_var ((int64_t)g,        // int64_t group_id 
+		      name_timers,                  // const char * name
+		      "",                           // const char * path
+		      adios_double,                 // enum ADIOS_DATATYPES type
+		      dim_str,                      // const char * dimensions
+		      glob_dim_str,                 // const char * global_dimensions
+		      loc_off_str);                 // const char * local_offsets 
+    }
+
+
+    int max_label_len = 0;
+
+    for (i = 0; i < g->prev_timing_obj->user_count; i++)
+    {
+        max_label_len = MAX(max_label_len, strlen(g->prev_timing_obj->names[i]));
+    }
+    for (i = 0; i < g->prev_timing_obj->internal_count; i++)
+    {
+        max_label_len = MAX(max_label_len, strlen(g->prev_timing_obj->names[ADIOS_TIMING_MAX_USER_TIMERS + i]));
+    }
+
+    tv_size += (max_label_len+1) * timer_count;
+
+    if (! adios_find_var_by_name (g, name_labels))
+    {
+        if (g->adios_host_language_fortran == adios_flag_yes) { 
+            sprintf (dim_str,"%i,%i", max_label_len+1, timer_count);
+        } else {
+            sprintf (dim_str,"%i,%i", timer_count, max_label_len+1);
+        }
+
+        // labels for the timers
+        adios_common_define_var ((int64_t)g,        // int64_t group_id 
+		      name_labels,                  // const char * name
+		      "",                           // const char * path
+		      adios_byte,                   // enum ADIOS_DATATYPES type
+		      dim_str,                      // const char * dimensions
+		      "",                           // const char * global_dimensions
+                      "");                          // const char * local_offsets 
+    }
+
+    return tv_size;
+
+}
+
+
+#if 0 // I don't think this is used, can be removed..?
 int adios_get_timing_internal_count (int64_t fd_p, int64_t * tc)
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
@@ -182,18 +408,18 @@ int adios_get_timing_internal_count (int64_t fd_p, int64_t * tc)
         return 1;
     }
 
-    if (! fd->timing_obj)
+    if (! fd->group->prev_timing_obj)
     {
         *tc = 0;
     }
     else
     {
-        *tc = fd->timing_obj->internal_count;
+        *tc = fd->group->prev_timing_obj->internal_count;
     }
 
     return 0;
 }
-
+#endif
 
 int adios_get_timing_name (int64_t fd_p, int64_t index, char* name)
 {
@@ -206,8 +432,8 @@ int adios_get_timing_name (int64_t fd_p, int64_t index, char* name)
         return 1;
     }
 
-    strcpy (name, fd->timing_obj->names[index]);
-    //*name = fd->timing_obj->names[index];
+    strcpy (name, fd->group->prev_timing_obj->names[index]);
+    //*name = fd->group->prev_timing_obj->names[index];
 
     return 0;
 }
@@ -224,7 +450,7 @@ int adios_get_timing_value (int64_t fd_p, int64_t index, double* value)
         return 1;
     }
 
-    *value = fd->timing_obj->times[index];
+    *value = fd->group->prev_timing_obj->times[index];
 
     return 0;
 }
@@ -232,13 +458,39 @@ int adios_get_timing_value (int64_t fd_p, int64_t index, double* value)
 
 void adios_timing_go (struct adios_timing_struct * ts, int64_t index)
 {
-    ts->times[index] -= MPI_Wtime();
+    // Grab the time
+    double now = MPI_Wtime();
+
+    // Do accounting for time summary
+    ts->times[index] -= now;
+
+    // Log the event
+    struct adios_timing_event_struct * new_event =
+        &(ts->events[ts->event_count % ADIOS_TIMING_MAX_EVENTS]);
+    new_event->type = index;
+    new_event->is_start = 1;
+    new_event->time = now;
+    ts->event_count++;
+
 }
 
 
 void adios_timing_stop (struct adios_timing_struct * ts, int64_t index)
 {
-    ts->times[index] += MPI_Wtime();
+    // Grab the time
+    double now = MPI_Wtime();
+
+    // Do accounting for time summary
+    ts->times[index] += now;
+
+    // Log the event
+    struct adios_timing_event_struct * new_event =
+        &(ts->events[ts->event_count % ADIOS_TIMING_MAX_EVENTS]);
+
+    new_event->type = index;
+    new_event->is_start = 0;
+    new_event->time = now;
+    ts->event_count++;
 }
 
 
@@ -249,13 +501,10 @@ struct adios_timing_struct *  adios_timing_create (int timer_count, char** timer
                                        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*) );
     ts->times = (double*) malloc ( (ADIOS_TIMING_MAX_USER_TIMERS + timer_count) * sizeof (double) );
 
-    // Clear all timers
-    memset(ts->times, 0, (ADIOS_TIMING_MAX_USER_TIMERS + timer_count) * sizeof (double) );
-    memset(ts->names, 0, (ADIOS_TIMING_MAX_USER_TIMERS + timer_count) * sizeof (char*) );
+    adios_clear_timers (ts);
 
     for (i = 0; i < timer_count; i++)
     {
@@ -266,12 +515,21 @@ struct adios_timing_struct *  adios_timing_create (int timer_count, char** timer
     return ts;
 }
 
+void adios_clear_timers (struct adios_timing_struct * ts)
+{
+    ts->user_count = 0;
+    ts->event_count = 0;
 
+    // Clear all timers
+    memset(ts->times, 0, (ADIOS_TIMING_MAX_USER_TIMERS + ts->internal_count) * sizeof (double) );
+    memset(ts->names, 0, (ADIOS_TIMING_MAX_USER_TIMERS + ts->internal_count) * sizeof (char*) );
+}
 
 void adios_timing_destroy (struct adios_timing_struct * timing_obj)
 {
     if (timing_obj)
     {
+
         if (timing_obj->times)
         {
             free (timing_obj->times);
@@ -280,6 +538,6 @@ void adios_timing_destroy (struct adios_timing_struct * timing_obj)
     }
 }
 
-#endif // ifdef SKEL_TIMING
+#endif // ifdef ADIOS_TIMERS
 
 
diff --git a/src/core/adios_timing.h b/src/core/adios_timing.h
index 262d51b..836c164 100644
--- a/src/core/adios_timing.h
+++ b/src/core/adios_timing.h
@@ -13,25 +13,39 @@
 
 
 #define ADIOS_TIMING_MAX_USER_TIMERS 16
+#define ADIOS_TIMING_MAX_EVENTS 1024 
 
 
-struct adios_timing_struct
+struct adios_timing_event_struct
 {
+    int type; // index of event type, reference timing_struct->names[type] for name of event type
+    int is_start;
+    double time; // time that the event occurred
+
+};
+
 
+struct adios_timing_struct
+{
     int64_t internal_count;
     int64_t user_count;
     char ** names;
     double *times;
+    
+    // keep the last MAX_EVENTS events, older events
+    // are overwritten in a circular fashion
+    int64_t event_count;
+    struct adios_timing_event_struct events[ADIOS_TIMING_MAX_EVENTS];
 
 };
 
-
 //int adios_get_timing_count (int64_t fd_p, int64_t * tc);
 //int adios_get_timing_name (int64_t fd_p, int64_t index, char* name);
 //int adios_get_timing_value (int64_t fd_p, int64_t index, double* value);
 
 
 struct adios_timing_struct *  adios_timing_create (int timer_count, char** timer_names);
+void adios_clear_timers (struct adios_timing_struct * ts);
 void adios_timing_destroy (struct adios_timing_struct * timing_obj);
 
 void adios_timing_go (struct adios_timing_struct * ts, int64_t index);
diff --git a/src/core/adios_transport_hooks.c b/src/core/adios_transport_hooks.c
index 30a201f..1eb3588 100644
--- a/src/core/adios_transport_hooks.c
+++ b/src/core/adios_transport_hooks.c
@@ -38,6 +38,17 @@ if (!strcasecmp (buf,b)) \
 (*t) [b].adios_start_calculation_fn = adios_##a##_start_calculation; \
 (*t) [b].adios_stop_calculation_fn = adios_##a##_stop_calculation;
 
+void adios_free_transports (struct adios_transport_struct * t)
+{
+    int i;
+    for (i=0; i<ADIOS_METHOD_COUNT; i++) {
+        if (t[i].method_name) {
+            free (t[i].method_name);
+            t[i].method_name = 0;
+        }
+    }
+}
+
 void adios_init_transports (struct adios_transport_struct ** t)
 {
     *t = (struct adios_transport_struct *)
@@ -88,6 +99,9 @@ void adios_init_transports (struct adios_transport_struct ** t)
 # if HAVE_FLEXPATH
     ASSIGN_FNS(flexpath,ADIOS_METHOD_FLEXPATH,"FLEXPATH")
 # endif
+# if HAVE_ICEE
+    ASSIGN_FNS(icee,ADIOS_METHOD_ICEE,"ICEE")
+# endif
 
     ASSIGN_FNS(posix,ADIOS_METHOD_POSIX,"POSIX")
     ASSIGN_FNS(posix1,ADIOS_METHOD_POSIX1,"POSIX1")
@@ -163,6 +177,9 @@ int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
 #if HAVE_FLEXPATH
     MATCH_STRING_TO_METHOD("FLEXPATH",ADIOS_METHOD_FLEXPATH,0)
 #endif
+#if HAVE_ICEE
+    MATCH_STRING_TO_METHOD("ICEE",ADIOS_METHOD_ICEE,0)
+#endif
 
 #if HAVE_NSSI
     MATCH_STRING_TO_METHOD("NSSI",ADIOS_METHOD_NSSI_STAGING,1)
diff --git a/src/core/adios_transport_hooks.h b/src/core/adios_transport_hooks.h
index 0ac64e2..8161dc5 100644
--- a/src/core/adios_transport_hooks.h
+++ b/src/core/adios_transport_hooks.h
@@ -126,7 +126,8 @@ enum ADIOS_IO_METHOD {ADIOS_METHOD_UNKNOWN     = -2
               ,ADIOS_METHOD_DIMES        = 21
               ,ADIOS_METHOD_VAR_MERGE   = 22
               ,ADIOS_METHOD_MPI_BGQ     = 23
-              ,ADIOS_METHOD_COUNT       = 24
+              ,ADIOS_METHOD_ICEE        = 24
+              ,ADIOS_METHOD_COUNT       = 25
 };
 
 // forward declare the functions (or dummies for internals use)
@@ -172,6 +173,9 @@ FORWARD_DECLARE(dataspaces)
 FORWARD_DECLARE(dimes)
 #endif
 
+#if defined(HAVE_ICEE) && !defined(ADIOS_EMPTY_TRANSPORTS) 
+FORWARD_DECLARE(icee)
+#endif
 
 #undef FORWARD_DECLARE
 #endif
diff --git a/src/core/adiosf.c b/src/core/adiosf.c
index a5763ee..b73a66b 100644
--- a/src/core/adiosf.c
+++ b/src/core/adiosf.c
@@ -228,6 +228,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
         }
     }
 
+    /* // Do not check NULL pointer here, it works fine in writing
     if (!var)
     {
         adios_error (err_invalid_data, "Invalid data (NULL pointer) passed to write for variable %s\n", buf1);
@@ -235,6 +236,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
         free (buf1);
         return;
     }
+    */
 
     if (v->data)
     {
@@ -547,6 +549,20 @@ void FC_FUNC_(adios_define_var, ADIOS_DEFINE_VAR)
     }
 }
 
+// delete all variable definitions from a group
+// Use if you want to define a new set of variables for the next output step.
+void FC_FUNC_(adios_delete_vardefs, ADIOS_DELETE_VARDEFS) (int64_t *id, int *err)
+{
+    adios_errno = err_no_error;
+    if (id != 0) {
+        struct adios_group_struct * g = (struct adios_group_struct *) *id;
+        *err = adios_common_delete_vardefs (g);
+    } else {
+        adios_error (err_invalid_group, "adios_delete_vardefs() called with 0 argument\n");
+        *err = adios_errno;
+    }
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // adios_common_set_transform is in adios_internals.c
 // set the transform method for the selected variable (default is "none")
@@ -598,6 +614,20 @@ void FC_FUNC_(adios_define_attribute, ADIOS_DEFINE_ATTRIBUTE)
     *err = adios_errno;
 }
 
+// delete all attribute definitions from a group
+// Use if you want to define a new set of attribute for the next output step.
+void FC_FUNC_(adios_delete_attrdefs, ADIOS_DELETE_VARDEFS) (int64_t *id, int *err)
+{
+    adios_errno = err_no_error;
+    if (id != 0) {
+        struct adios_group_struct * g = (struct adios_group_struct *) *id;
+        *err = adios_common_delete_attrdefs (g);
+    } else {
+        adios_error (err_invalid_group, "adios_delete_attrdefs() called with 0 argument\n");
+        *err = adios_errno;
+    }
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // adios_common_select_method is in adios_internals_mxml.c
 void FC_FUNC_(adios_select_method, ADIOS_SELECT_METHOD) 
@@ -627,7 +657,308 @@ void FC_FUNC_(adios_select_method, ADIOS_SELECT_METHOD)
     *err = adios_errno;
 }
 
+// no-xml schema API
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_schema_version, ADIOS_DEFINE_SCHEMA_VERSION)
+    (int64_t * group_id, char * schema_version
+    ,int schema_version_size)
+{
+    char * buf1 = 0;
+    buf1 = futils_fstr_to_cstr (schema_version, schema_version_size);
+    if (buf1 != 0)
+    {
+//        printf ("call adios_define_schema_version in adiosf.c\n");
+//        printf ("schema_version is %s\n", buf1);
+        struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+        adios_common_define_schema_version (g, buf1);
+    }
+    free (buf1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_mesh, ADIOS_DEFINE_VAR_MESH)
+    (int64_t * group_id, const char * varname, const char * meshname
+    ,int varname_size, int meshname_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (varname, varname_size);
+    buf2 = futils_fstr_to_cstr (meshname, meshname_size);
+
+    if (buf1 != 0 && buf2 != 0)
+        adios_common_define_var_mesh (*group_id, buf1, buf2, "");        
+
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_centering, ADIOS_DEFINE_VAR_CENTERING)
+    (int64_t * group_id, const char * varname, const char * centering
+    , int varname_size, int centering_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (varname, varname_size);
+    buf2 = futils_fstr_to_cstr (centering, centering_size);
+    if (buf1 != 0 && buf2 != 0)
+        adios_common_define_var_centering (*group_id, buf1, buf2, "");
+
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_timevarying, ADIOS_DEFINE_MESH_TIMEVARYING)
+    (const char * timevarying, int64_t * group_id, const char * name
+    ,int timevarying_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timevarying, timevarying_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    if (buf1 != 0 && buf2 != 0)
+        adios_common_define_mesh_timeVarying (buf1, *group_id, buf2);
+
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_file, ADIOS_DEFINE_MESH_FILE)
+    (int64_t * group_id, char * name, char * file
+    ,int name_size, int file_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (name, name_size);
+    buf2 = futils_fstr_to_cstr (file, file_size);
+    if (buf1 != 0 && buf2 != 0)
+        adios_common_define_mesh_file (*group_id, buf1, buf2);
+
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_timesteps, ADIOS_DEFINE_VAR_TIMESTEPS)
+    (const char * timesteps, int64_t * group_id, const char * name
+    ,int timesteps_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timesteps, timesteps_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_var_timesteps (buf1, g, buf2, ""); 
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_timescale, ADIOS_DEFINE_VAR_TIMESCALE)
+    (const char * timescale, int64_t * group_id, const char * name
+    ,int timescale_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timescale, timescale_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_var_timescale (buf1, g, buf2, "");
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_timeseriesformat, ADIOS_DEFINE_VAR_TIMESERIESFORMAT)
+    (const char * timeseries, int64_t * group_id, const char * name
+    ,int timeseries_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timeseries, timeseries_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_var_timeseriesformat (buf1, g, buf2, "");
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_var_hyperslab, ADIOS_DEFINE_VAR_HYPERSLAB)
+    (const char * hyperslab, int64_t * group_id, const char * name
+    ,int hyperslab_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (hyperslab, hyperslab_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_var_hyperslab (buf1, g, buf2, "");
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_timesteps, ADIOS_DEFINE_MESH_TIMESTEPS)
+    (const char * timesteps, int64_t * group_id, const char * name
+    ,int timesteps_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timesteps, timesteps_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_mesh_timeSteps (buf1, g, buf2);
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_timescale, ADIOS_DEFINE_MESH_TIMESCALE)
+    (const char * timescale, int64_t * group_id, const char * name
+    ,int timescale_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timescale, timescale_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_mesh_timeScale (buf1, g, buf2);
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_timeseriesformat, ADIOS_DEFINE_MESH_TIMESERIESFORMAT)
+    (const char * timeseries, int64_t * group_id, const char * name
+    ,int timeseries_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (timeseries, timeseries_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    struct adios_group_struct * g = (struct adios_group_struct *) *group_id;
+    adios_common_define_mesh_timeSeriesFormat (buf1, g, buf2);
+    free (buf1);
+    free (buf2);
+}
 
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_group, ADIOS_DEFINE_MESH_GROUP)
+    (const char * group, int64_t * group_id, const char * name
+    ,int group_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    buf1 = futils_fstr_to_cstr (group, group_size);
+    buf2 = futils_fstr_to_cstr (name, name_size);
+    adios_common_define_mesh_group (*group_id, buf2, buf1);
+    free (buf1);
+    free (buf2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_uniform, ADIOS_DEFINE_MESH_UNIFROM)
+    (char * dimensions, char * origin, char * spacing, char * maximum, char * nspace
+    ,int64_t * group_id, const char * name, int dimensions_size, int origin_size
+    ,int spacing_size, int maximum_size, int nspace_size ,int name_size) 
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    char * buf3 = 0;
+    char * buf4 = 0;
+    char * buf5 = 0;
+    char * buf6 = 0;
+    buf1 = futils_fstr_to_cstr (dimensions, dimensions_size);
+    buf2 = futils_fstr_to_cstr (origin, origin_size);
+    buf3 = futils_fstr_to_cstr (spacing, spacing_size);
+    buf4 = futils_fstr_to_cstr (maximum, maximum_size);
+    buf5 = futils_fstr_to_cstr (nspace, nspace_size);
+    buf6 = futils_fstr_to_cstr (name, name_size);
+    adios_common_define_mesh_uniform (buf1, buf2, buf3, buf4, buf5, buf6, *group_id);
+    free (buf1);
+    free (buf2);
+    free (buf3);
+    free (buf4);
+    free (buf5);
+    free (buf6);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_rectilinear, ADIOS_DEFINE_MESH_RECTILINEAR)
+    (char * dimensions, char * coordinates, char * nspace, int64_t * group_id
+    ,const char * name,  int dimensions_size, int coordinates_size, int nspace_size
+    ,int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    char * buf3 = 0;
+    char * buf4 = 0;
+    buf1 = futils_fstr_to_cstr (dimensions, dimensions_size);
+    buf2 = futils_fstr_to_cstr (coordinates, coordinates_size);
+    buf3 = futils_fstr_to_cstr (nspace, nspace_size);
+    buf4 = futils_fstr_to_cstr (name, name_size);
+    adios_common_define_mesh_rectilinear (buf1, buf2, buf3, buf4, *group_id);
+    free (buf1);
+    free (buf2);
+    free (buf3);
+    free (buf4);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_structured, ADIOS_DEFINE_MESH_STRUCTURED)
+    (char * dimensions, char * points, char * nspace, int64_t * group_id, const char * name
+    ,int dimensions_size, int points_size, int nspace_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    char * buf3 = 0;
+    char * buf4 = 0;
+    buf1 = futils_fstr_to_cstr (dimensions, dimensions_size);
+    buf2 = futils_fstr_to_cstr (points, points_size);
+    buf3 = futils_fstr_to_cstr (nspace, nspace_size);
+    buf4 = futils_fstr_to_cstr (name, name_size);
+    adios_common_define_mesh_structured (buf1, buf3, buf2, buf4, *group_id);
+    free (buf1);
+    free (buf2);
+    free (buf3);
+    free (buf4);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void FC_FUNC_(adios_define_mesh_unstructured, ADIOS_DEFINE_MESH_UNSTRUCTURED)
+    (char * points, char * data, char * count, char * cell_type, char * npoints
+    ,char * nspace, int64_t * group_id, const char * name, int points_size, int data_size
+    ,int count_size, int cell_type_size, int npoints_size, int nspace_size, int name_size)
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    char * buf3 = 0;
+    char * buf4 = 0;
+    char * buf5 = 0;
+    char * buf6 = 0;
+    char * buf7 = 0;
+    buf1 = futils_fstr_to_cstr (points, points_size);
+    buf2 = futils_fstr_to_cstr (data, data_size);
+    buf3 = futils_fstr_to_cstr (count, count_size);
+    buf4 = futils_fstr_to_cstr (cell_type, cell_type_size);
+    buf5 = futils_fstr_to_cstr (npoints, npoints_size);
+    buf6 = futils_fstr_to_cstr (nspace, nspace_size);
+    buf7 = futils_fstr_to_cstr (name, name_size);
+
+//    adios_common_define_mesh_unstructured (buf1, buf2, buf3, buf4, buf5, buf6, buf7, *group_id);
+    adios_common_define_mesh_unstructured (buf1, buf2, buf3, buf4, buf6, buf5, buf7, *group_id);
+
+    free (buf1);
+    free (buf2);
+    free (buf3);
+    free (buf4);
+    free (buf5);
+    free (buf6);
+    free (buf7);
+}
 
 /**************************************************************************/
 /*                  Specific function for each data type                  */
diff --git a/src/core/adiosf_defs_mod.f90 b/src/core/adiosf_defs_mod.f90
index a29df03..67cd40e 100644
--- a/src/core/adiosf_defs_mod.f90
+++ b/src/core/adiosf_defs_mod.f90
@@ -42,6 +42,7 @@ module adios_defs_mod
     integer, parameter :: ADIOS_READ_METHOD_DATASPACES   = 3
     integer, parameter :: ADIOS_READ_METHOD_DIMES        = 4
     integer, parameter :: ADIOS_READ_METHOD_FLEXPATH     = 5
+    integer, parameter :: ADIOS_READ_METHOD_ICEE         = 6
     integer, parameter :: ADIOS_READ_METHOD_BP_STAGED  = ADIOS_READ_METHOD_BP_AGGREGATE
 
     ! 
diff --git a/src/core/adiosf_read.c b/src/core/adiosf_read.c
index 6148707..0251b0c 100644
--- a/src/core/adiosf_read.c
+++ b/src/core/adiosf_read.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-#include "../config.h"
+#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/core/adiosf_read_v1.c b/src/core/adiosf_read_v1.c
index 57261f6..06187ef 100644
--- a/src/core/adiosf_read_v1.c
+++ b/src/core/adiosf_read_v1.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-#include "../config.h"
+#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/core/adiosf_write_mod.f90 b/src/core/adiosf_write_mod.f90
index 8422749..47d3aae 100644
--- a/src/core/adiosf_write_mod.f90
+++ b/src/core/adiosf_write_mod.f90
@@ -122,6 +122,12 @@ module adios_write_mod
             integer*8,      intent(out) :: id
         end subroutine
 
+        subroutine adios_delete_vardefs (group_id, err)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            integer,        intent(out) :: err
+        end subroutine
+
         subroutine adios_set_transform (var_id, transform_method, err)
             implicit none
             integer*8,      intent(in)  :: var_id
@@ -140,6 +146,12 @@ module adios_write_mod
             integer,        intent(out) :: err
         end subroutine
 
+        subroutine adios_delete_attrdefs (group_id, err)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            integer,        intent(out) :: err
+        end subroutine
+
         subroutine adios_select_method (group_id, method, parameters, base_path, err)
             implicit none
             integer*8,      intent(in)  :: group_id
@@ -156,8 +168,138 @@ module adios_write_mod
             integer,        intent(out) :: err
         end subroutine
 
-    end interface
+        subroutine adios_define_schema_version (group_id, schema_version)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: schema_version
+        end subroutine
+        
+        subroutine adios_define_var_mesh (group_id, varname, meshname)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: varname
+            character(*),   intent(in)  :: meshname
+        end subroutine
+
+        subroutine adios_define_var_centering (group_id, varname, centering)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: varname
+            character(*),   intent(in)  :: centering
+        end subroutine
+
+        subroutine adios_define_mesh_timevarying (timevarying, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: name
+            character(*),   intent(in)  :: timevarying
+        end subroutine
+
+        subroutine adios_define_mesh_file (group_id, name, file)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: name
+            character(*),   intent(in)  :: file
+        end subroutine
+
+        subroutine adios_define_var_timesteps (timesteps, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timesteps
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_var_timescale (timescale, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timescale
+            character(*),   intent(in)  :: name
+        end subroutine
+        
+        subroutine adios_define_var_timeseriesformat (timeseries, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timeseries
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_var_hyperslab (hyperslab, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: hyperslab
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_timesteps (timesteps, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timesteps
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_timescale (timescale, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timescale
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_timeseriesformat (timeseries, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: timeseries
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_group (group, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: group
+            character(*),   intent(in)  :: name
+        end subroutine
 
+        subroutine adios_define_mesh_uniform (dimensions, origin, spacing, maximum, nspace, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: dimensions
+            character(*),   intent(in)  :: origin
+            character(*),   intent(in)  :: spacing
+            character(*),   intent(in)  :: maximum
+            character(*),   intent(in)  :: nspace
+            character(*),   intent(in)  :: name
+        end subroutine
+        
+        subroutine adios_define_mesh_rectilinear (dimensions, coordinates, nspace, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: dimensions
+            character(*),   intent(in)  :: coordinates
+            character(*),   intent(in)  :: nspace
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_structured (dimensions, points, nspace, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: dimensions
+            character(*),   intent(in)  :: points
+            character(*),   intent(in)  :: nspace
+            character(*),   intent(in)  :: name
+        end subroutine
+
+        subroutine adios_define_mesh_unstructured (points, data, count, cell_type, npoints, nspace, group_id, name)
+            implicit none
+            integer*8,      intent(in)  :: group_id
+            character(*),   intent(in)  :: points
+            character(*),   intent(in)  :: data
+            character(*),   intent(in)  :: count
+            character(*),   intent(in)  :: cell_type
+            character(*),   intent(in)  :: npoints
+            character(*),   intent(in)  :: nspace
+            character(*),   intent(in)  :: name
+        end subroutine
+
+    end interface
 
     !
     !
diff --git a/src/core/bp_types.h b/src/core/bp_types.h
index d8183ef..b9d3b83 100644
--- a/src/core/bp_types.h
+++ b/src/core/bp_types.h
@@ -72,7 +72,7 @@ typedef struct BP_FILE {
 
 // save per proc info
 typedef struct BP_PROC {
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     int streaming;
     int * varid_mapping;
     read_request * local_read_request_list;
diff --git a/src/core/bp_utils.c b/src/core/bp_utils.c
index 7669d82..529869f 100644
--- a/src/core/bp_utils.c
+++ b/src/core/bp_utils.c
@@ -24,7 +24,7 @@
 #define BYTE_ALIGN 8
 #define MINIFOOTER_SIZE 28
 
-#include "adios_transforms_common.h" // NCSU ALACRITY-ADIOS
+#include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -48,6 +48,16 @@
                              swap_64(var); \
                          b->offset += 8;
 
+inline BP_PROC * GET_BP_PROC (const ADIOS_FILE * fp)
+{
+    return (BP_PROC *) fp->fh;
+}
+
+inline BP_FILE * GET_BP_FILE (const ADIOS_FILE * fp)
+{
+    return (BP_FILE *) ((BP_PROC *) fp->fh)->fh;
+}
+
 /* prototypes */
 void * bp_read_data_from_buffer(struct adios_bp_buffer_struct_v1 *b, enum ADIOS_DATATYPES type);
 int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b, struct adios_index_var_struct_v1 ** root, uint64_t j);
@@ -141,9 +151,55 @@ int get_time (struct adios_index_var_struct_v1 * v, int step)
 
 }
 
+/* This routine converts "step" to "time", which is an ADIOS internal thing.
+ * The calculated "time" is needed by other BP routines to figure 
+ * correct piece of var index to process.
+ * NOTE that
+ * 1. For file mode, an application could write a variable at every other dump,
+ * say, the 1th dump, 3rd dump, 5th dump. The corresponding step
+ * should be 0, 1, 2 for it.
+ */
+int _adios_step_to_time (const ADIOS_FILE * fp, struct adios_index_var_struct_v1 * v, int from_steps)
+{
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+    int t, time;
+
+    t = fp->current_step + from_steps;
+    if (!p->streaming)
+    {
+        time = get_time (v, t);
+    }
+    else
+    {
+        time = t + 1;
+    }
+
+    return time;
+}
+
+/* Same functionality as _adios_step_to_time()
+ * The only different is the second argument is varid, 
+ * instead of index_var_struct.
+ */
+int adios_step_to_time (const ADIOS_FILE * fp, int varid, int from_steps)
+{
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+    struct adios_index_var_struct_v1 * v;
+    int mapped_varid;
+
+    adios_errno = 0;
+
+    mapped_varid = p->varid_mapping[varid];
+    v = bp_find_var_byid (fh, mapped_varid);
+
+    return _adios_step_to_time (fp, v, from_steps);
+}
+
 int bp_read_open (const char * filename,
           MPI_Comm comm,
-          struct BP_FILE * fh)
+          BP_FILE * fh)
 {
     int  err;
     int  rank;
@@ -177,7 +233,7 @@ int bp_read_open (const char * filename,
  */
 int bp_open (const char * fname,
              MPI_Comm comm,
-             struct BP_FILE * fh)
+             BP_FILE * fh)
 {
     int rank;
     uint64_t header_size;
@@ -230,16 +286,14 @@ int bp_open (const char * fname,
 
 ADIOS_VARINFO * bp_inq_var_byid (const ADIOS_FILE * fp, int varid)
 {
-    struct BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     ADIOS_VARINFO * varinfo;
-    int file_is_fortran, size;
+    int file_is_fortran, size, i;
     struct adios_index_var_struct_v1 * v;
 
     adios_errno = 0;
 
-    p = (struct BP_PROC *) fp->fh;
-    fh = (BP_FILE *)p->fh;
     v = bp_find_var_byid (fh, varid);
 
     varinfo = (ADIOS_VARINFO *) malloc (sizeof (ADIOS_VARINFO));
@@ -255,12 +309,15 @@ thod returns.
 
     assert (v->characteristics_count);
 
-    bp_get_and_swap_dimensions (fh, v, file_is_fortran,
+    // Bugfix for block test (block.c). Actually changes
+    // are actually inside bp_get_and_swap_dimensions.
+    // For streaming mode, varinfo is built per steps.
+    // Q. Liu 08/27/2014
+    bp_get_and_swap_dimensions (fp, v, file_is_fortran,
                                 &varinfo->ndim, &varinfo->dims,
                                 &varinfo->nsteps,
                                 file_is_fortran != futils_is_called_from_fortran()
                                );
-
     if (p->streaming)
     {
         varinfo->nsteps = 1;
@@ -269,11 +326,32 @@ thod returns.
     // set value for scalar
     if (v->characteristics [0].value)
     {
-        size = bp_get_type_size (v->type, v->characteristics [0].value);
+        i = 0;
+
+        if (p->streaming)
+        {
+            int time = fp->current_step + 1;
+            i = 0;
+            while (i < v->characteristics_count && v->characteristics[i].time_index != time)
+            {
+                i++;
+            }
+
+            if (i >= v->characteristics_count)
+            {
+                // shouldn't be here
+            }
+        }
+        else
+        {
+            // keep i as 0
+        }
+
+        size = bp_get_type_size (v->type, v->characteristics [i].value);
         varinfo->value = (void *) malloc (size);
         assert (varinfo->value);
 
-        memcpy (varinfo->value, v->characteristics [0].value, size);
+        memcpy (varinfo->value, v->characteristics [i].value, size);
     }
     else
     {
@@ -286,7 +364,7 @@ thod returns.
 
     assert (varinfo->nblocks);
 
-    varinfo->sum_nblocks = v->characteristics_count;
+    varinfo->sum_nblocks = (!p->streaming ? v->characteristics_count : varinfo->nblocks[0]) ;
     varinfo->statistics = 0;
     varinfo->blockinfo = 0;
     varinfo->meshinfo = 0;
@@ -532,7 +610,7 @@ int bp_close (BP_FILE * fh)
     return 0;
 }
 
-int bp_read_minifooter (struct BP_FILE * bp_struct)
+int bp_read_minifooter (BP_FILE * bp_struct)
 {
     struct adios_bp_buffer_struct_v1 * b = bp_struct->b;
     struct bp_minifooter * mh = &bp_struct->mfooter;
@@ -643,7 +721,7 @@ int bp_read_minifooter (struct BP_FILE * bp_struct)
 /****************/
 /* Parse GROUPS */
 /****************/
-int bp_parse_pgs (struct BP_FILE * fh)
+int bp_parse_pgs (BP_FILE * fh)
 {
     struct bp_index_pg_struct_v1 ** root = &(fh->pgs_root); // need the pointer to it to malloc below
     struct adios_bp_buffer_struct_v1 * b = fh->b;
@@ -885,7 +963,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
 /********************/
 /* Parse ATTRIBUTES */
 /********************/
-int bp_parse_attrs (struct BP_FILE * fh)
+int bp_parse_attrs (BP_FILE * fh)
 {
     struct adios_bp_buffer_struct_v1 * b = fh->b;
     struct adios_index_attribute_struct_v1 ** attrs_root = &(fh->attrs_root);
@@ -1128,7 +1206,7 @@ int bp_parse_attrs (struct BP_FILE * fh)
 /*******************/
 /* Parse VARIABLES */
 /*******************/
-int bp_parse_vars (struct BP_FILE * fh)
+int bp_parse_vars (BP_FILE * fh)
 {
     struct adios_bp_buffer_struct_v1 * b = fh->b;
     struct adios_index_var_struct_v1 ** vars_root = &(fh->vars_root);
@@ -1346,10 +1424,15 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
 
         case adios_characteristic_value:
         {
+            uint8_t i, c, idx;
+            // 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;
+
             (*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 *));
+                (*root)->characteristics [j].stats = malloc (count*sizeof(struct adios_index_characteristics_stat_struct *));
                 (*root)->characteristics [j].bitmap = 0;
             }
 
@@ -1359,11 +1442,6 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
             (*root)->characteristics [j].bitmap |= (1 << adios_statistic_sum);
             (*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 (original_var_type);
-            uint16_t characteristic_size;
-
             for (c = 0; c < count; c ++)
             {
                 i = idx = 0;
@@ -1744,9 +1822,9 @@ int64_t get_var_stop_index (struct adios_index_var_struct_v1 * v, int t)
  */
 int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
 {
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     int j, k, t, allstep;
-    struct BP_PROC * p = (struct BP_PROC *) fp->fh;
-    struct BP_FILE * fh = p->fh;
     struct adios_index_var_struct_v1 * var_root = fh->vars_root;
     struct adios_index_attribute_struct_v1 * attr_root;
     uint64_t i;
@@ -1987,7 +2065,7 @@ int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dim
         uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
         int file_is_fortran)
 {
-    int is_global = 0, dummy = 0, has_time;
+    int is_global = 0, dummy = 0, has_time = 0;
     int k;
 
     is_global = bp_get_dimension_generic(dims, ldims, gdims, offsets);
@@ -2001,13 +2079,10 @@ int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dim
         is_global = is_global || gdims[k];
     }*/
 
-    if (!file_is_fortran)
+    if(ndim > 0)
     {
-        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[file_is_fortran ? ndim - 1 : 0] == 1;
     }
 
     // change all the stuff to C ordering
@@ -2126,28 +2201,54 @@ int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_s
 
 
 // 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,
+void bp_get_dimensions (const ADIOS_FILE * fp, 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);
+    bp_get_dimensions_generic (fp, 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_generic (BP_FILE * fh, struct adios_index_var_struct_v1 * var_root, int file_is_fortran,
+void bp_get_dimensions_generic (const ADIOS_FILE * fp, struct adios_index_var_struct_v1 * var_root, int file_is_fortran,
                         int * ndim, uint64_t ** dims, int * nsteps, int use_pretransform_dimensions)
 {
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     int i, j, has_time_index_characteristic;
     int is_global; // global array or just an array written by one process?
     uint64_t ldims[32];
     uint64_t gdims[32];
     uint64_t offsets[32];
+    struct adios_index_characteristic_dims_struct_v1 *var_dims;
+
+    if (!p->streaming)
+    {
+        // NCSU ALACRITY-ADIOS - Use the correct dimension struct
+        var_dims = use_pretransform_dimensions ? 
+                       &var_root->characteristics[0].transform.pre_transform_dimensions
+                     : &var_root->characteristics[0].dims;
+    }
+    else
+    {
+        int time = fp->current_step + 1;
+        i = 0;
+        while (i < var_root->characteristics_count && var_root->characteristics[i].time_index != time)
+        {
+            i++;
+        }
 
-    // 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;
+        if (i < var_root->characteristics_count)
+        {
+            var_dims = use_pretransform_dimensions ?
+                       &var_root->characteristics[i].transform.pre_transform_dimensions
+                     : &var_root->characteristics[i].dims;
+        }
+        else
+        {
+            // shouldn't be here
+        }
+    }
 
     has_time_index_characteristic = fh->mfooter.version & ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC;
     /* Get dimension information */
@@ -2252,9 +2353,9 @@ void bp_get_dimensions_generic (BP_FILE * fh, struct adios_index_var_struct_v1 *
 }
 
 
-void bp_get_and_swap_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+void bp_get_and_swap_dimensions (const ADIOS_FILE * fp, 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);
+    bp_get_and_swap_dimensions_generic (fp, var_root, file_is_fortran, ndim, dims, nsteps, swap_flag, 0);
 }
 
 // NCSU ALACRITY-ADIOS - Factored out a generic version of this function
@@ -2262,12 +2363,12 @@ void bp_get_and_swap_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1
    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_generic (BP_FILE * fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+void bp_get_and_swap_dimensions_generic (const ADIOS_FILE * fp, 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_generic(fh, var_root, file_is_fortran, ndim, dims, nsteps, use_pretransform_dimensions);
+    bp_get_dimensions_generic (fp, var_root, file_is_fortran, ndim, dims, nsteps, use_pretransform_dimensions);
 
     if (swap_flag)
     {
@@ -2412,10 +2513,10 @@ void * bp_read_data_from_buffer(struct adios_bp_buffer_struct_v1 *b, enum ADIOS_
 }
 
 /*
-void bp_grouping ( struct BP_FILE * fh_p,
+void bp_grouping ( BP_FILE * fh_p,
            uint64_t * gh_p)
 {
-    struct BP_FILE * fh = (struct BP_FILE *) fh_p;
+    BP_FILE * fh = (BP_FILE *) fh_p;
     struct bp_index_pg_struct_v1 * pg_root = fh->pgs_root;
     struct bp_minifooter * mh = &fh->mfooter;
     int i, j;
@@ -2476,7 +2577,7 @@ void bp_grouping ( struct BP_FILE * fh_p,
 }
 */
 /*
-int bp_read_pgs (struct BP_FILE * bp_struct)
+int bp_read_pgs (BP_FILE * bp_struct)
 {
         struct adios_bp_buffer_struct_v1 * b = bp_struct->b;
     int r = 0;
@@ -2511,7 +2612,7 @@ int bp_read_pgs (struct BP_FILE * bp_struct)
 }
 */
 /*
-int bp_read_vars (struct BP_FILE * bp_struct)
+int bp_read_vars (BP_FILE * bp_struct)
 {
         struct adios_bp_buffer_struct_v1 * b = bp_struct->b;
     int r = 0;
@@ -2835,12 +2936,12 @@ void print_var_header (struct adios_var_header_struct_v1 * var_header)
 }
 */
 
-int is_fortran_file (struct BP_FILE * fh)
+int is_fortran_file (BP_FILE * fh)
 {
     return (fh->pgs_root->adios_host_language_fortran == adios_flag_yes);
 }
 
-int has_subfiles (struct BP_FILE * fh)
+int has_subfiles (BP_FILE * fh)
 {
     return (fh->mfooter.version & ADIOS_VERSION_HAVE_SUBFILE);
 }
@@ -3034,7 +3135,7 @@ int check_bp_validity (const char * fname)
     return flag;
 }
 
-int get_num_subfiles (struct BP_FILE * fh)
+int get_num_subfiles (BP_FILE * fh)
 {
     struct adios_index_var_struct_v1 ** vars_root = &(fh->vars_root);
     struct bp_minifooter * mh = &(fh->mfooter);
diff --git a/src/core/bp_utils.h b/src/core/bp_utils.h
index 99c9b71..c7261e1 100644
--- a/src/core/bp_utils.h
+++ b/src/core/bp_utils.h
@@ -14,6 +14,8 @@
 #include "core/bp_types.h"
 #define VARS_MINIHEADER_SIZE 10
 
+BP_PROC * GET_BP_PROC (const ADIOS_FILE * fp);
+BP_FILE * GET_BP_FILE (const ADIOS_FILE * fp);
 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 );
@@ -27,20 +29,20 @@ int bp_get_characteristics_data (void ** ptr_data,
 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);
+        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);
 int get_time (struct adios_index_var_struct_v1 * v, int step);
 int bp_open (const char * fname,
              MPI_Comm comm,
-             struct BP_FILE * fh);
+             BP_FILE * fh);
 ADIOS_VARINFO * bp_inq_var_byid (const ADIOS_FILE * fp, int varid);
 int bp_close (BP_FILE * fh);
-int bp_read_minifooter (struct BP_FILE * bp_struct);
-int bp_parse_pgs (struct BP_FILE * fh);
-int bp_parse_attrs (struct BP_FILE * fh);
-int bp_parse_vars (struct BP_FILE * fh);
+int bp_read_minifooter (BP_FILE * bp_struct);
+int bp_parse_pgs (BP_FILE * fh);
+int bp_parse_attrs (BP_FILE * fh);
+int bp_parse_vars (BP_FILE * fh);
 int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs);
 int64_t get_var_start_index (struct adios_index_var_struct_v1 * v, int t);
 int64_t get_var_stop_index (struct adios_index_var_struct_v1 * v, int t);
@@ -57,13 +59,13 @@ int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dim
 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,
+void bp_get_dimensions_generic(const ADIOS_FILE *fp, 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,
+void bp_get_dimensions (const ADIOS_FILE *fp, 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,
+void bp_get_and_swap_dimensions_generic (const ADIOS_FILE *fp, 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,
+void bp_get_and_swap_dimensions (const ADIOS_FILE *fp, 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);
 int * get_var_nblocks (struct adios_index_var_struct_v1 * var_root, int nsteps);
@@ -73,11 +75,11 @@ void print_process_group_index (
 /* Return 1 if a < b wrt. the given type, otherwise 0 */
 int adios_lt(int type, void *a, void *b);
 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);
+int is_fortran_file (BP_FILE * fh);
+int has_subfiles (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);
+int get_num_subfiles (BP_FILE * fh);
 #endif
diff --git a/src/core/buffer.c b/src/core/buffer.c
index a46e3e5..cb7487c 100644
--- a/src/core/buffer.c
+++ b/src/core/buffer.c
@@ -78,7 +78,8 @@ static inline size_t adios_get_avphys_pages ()
 
 int adios_set_buffer_size ()
 {
-    if (!adios_buffer_size_max) // not called before
+    //if (!adios_buffer_size_max) // not called before
+    if (adios_buffer_size_max < adios_buffer_size_requested) // not called before
     {
         long pagesize;
         long pages;
@@ -116,8 +117,8 @@ int adios_set_buffer_size ()
     }
     else
     {
-        log_error ("adios_allocate_buffer already called. No changes made.\n");
-        return 0;
+        log_debug ("adios_allocate_buffer already called. No changes made.\n");
+        return 1;
     }
 }
 
diff --git a/src/core/common_adios.c b/src/core/common_adios.c
index 4d56d9b..3d622c1 100644
--- a/src/core/common_adios.c
+++ b/src/core/common_adios.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-#include "../config.h"
+#include "config.h"
 
 #include <stdlib.h>
 #include <math.h>
@@ -25,13 +25,14 @@
 #include "core/buffer.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_logger.h"
+#include "core/adios_timing.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"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/transforms/adios_transforms_write.h"
 
 #ifdef WITH_NCSU_TIMER
 #include "timer.h"
@@ -100,6 +101,13 @@ int common_adios_allocate_buffer (enum ADIOS_BUFFER_ALLOC_WHEN adios_buffer_allo
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// Drew: used for experiments
+uint32_t pinned_timestep = 0;
+void adios_pin_timestep(uint32_t ts) {
+  pinned_timestep = ts;
+}
+
+///////////////////////////////////////////////////////////////////////////////
 int common_adios_open (int64_t * fd, const char * group_name
                 ,const char * name, const char * file_mode, MPI_Comm comm
                )
@@ -162,9 +170,6 @@ int common_adios_open (int64_t * fd, const char * group_name
     else
         fd_p->comm = MPI_COMM_NULL;
 
-#ifdef SKEL_TIMING
-    fd_p->timing_obj = 0;
-#endif
 
 #if 1
     /* Time index magic done here */
@@ -197,6 +202,10 @@ int common_adios_open (int64_t * fd, const char * group_name
         g->time_index++;
 #endif
 
+    // Drew: for experiments
+    if (pinned_timestep > 0)
+        g->time_index = pinned_timestep;
+
     while (methods)
     {
         if (   methods->method->m != ADIOS_METHOD_UNKNOWN
@@ -222,11 +231,6 @@ int common_adios_open (int64_t * fd, const char * group_name
 ///////////////////////////////////////////////////////////////////////////////
 static const char ADIOS_ATTR_PATH[] = "/__adios__";
 
-static 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
@@ -309,6 +313,11 @@ int common_adios_group_size (int64_t fd_p
         }
     }
 
+#ifdef ADIOS_TIMERS
+    int tv_size = adios_add_timing_variables (fd);
+    data_size += tv_size;
+#endif
+
     fd->write_size_bytes = data_size;
 
     uint64_t overhead = adios_calc_overhead_v1 (fd);
@@ -350,6 +359,10 @@ int common_adios_group_size (int64_t fd_p
         fd->shared_buffer = adios_flag_yes;
     }
 
+    // Drew: for experiments
+    if (pinned_timestep != 0)
+        fd->group->time_index = pinned_timestep;
+
     // call each transport method to coordinate the write and handle
     // if an overflow is detected.
     // now tell each transport attached that it is being written
@@ -373,6 +386,7 @@ int common_adios_group_size (int64_t fd_p
         m = m->next;
     }
 
+    // Drew: for experiments
     if (pinned_timestep != 0)
         fd->group->time_index = pinned_timestep;
 
@@ -406,6 +420,11 @@ int common_adios_group_size (int64_t fd_p
         }
     }
 
+#ifdef ADIOS_TIMERS
+    adios_write_timing_variables (fd);
+#endif
+
+
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
     timer_stop ("adios_group_size");
 #endif
@@ -1093,6 +1112,19 @@ int common_adios_close (int64_t fd_p)
         fd->group->vars_written = v;
     }
 
+
+#ifdef ADIOS_TIMER_EVENTS
+    char* extension = ".perf";
+    int name_len = strlen (fd->name);
+    int fn_len = name_len + strlen (extension) + 1;
+    char* fn = (char*) malloc (sizeof (char) * fn_len);
+    
+    sprintf (fn, "%s%s", fd->name, extension);
+
+    adios_timing_write_xml_common (fd_p, fn);
+#endif
+
+
     if (fd->name)
     {
         free (fd->name);
@@ -1129,6 +1161,7 @@ int common_adios_close (int64_t fd_p)
     //timer_reset_timers ();
 #endif
 
+
     return adios_errno;
 }
 
diff --git a/src/core/common_read.c b/src/core/common_read.c
index c058ff3..835812a 100644
--- a/src/core/common_read.c
+++ b/src/core/common_read.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.
  *
@@ -14,10 +14,13 @@
 #include "public/adios_error.h"
 #include "core/adios_logger.h"
 #include "core/common_read.h"
+#include "core/adios_infocache.h"
 #include "core/futils.h"
 #include "core/bp_utils.h" // struct namelists_struct
 #include "core/qhashtbl.h"
+#include "query/common_query.h"  // finalize query methods
 #include "public/adios_schema.h"
+#include "public/adios_read_ext.h"
 
 // NCSU ALACRITY-ADIOS
 #include "adios_read_hooks.h"
@@ -39,7 +42,7 @@ static struct adios_read_hooks_struct * adios_read_hooks = 0;
 struct common_read_internals_struct {
     enum ADIOS_READ_METHOD method;
     struct adios_read_hooks_struct * read_hooks; /* Save adios_read_hooks for each fopen for Matlab */
-    
+
     /* Group view information *//* Actual method provides the group names */
     int         ngroups;
     char     ** group_namelist;
@@ -58,6 +61,12 @@ struct common_read_internals_struct {
 
     // NCSU ALACRITY-ADIOS - Table of sub-requests issued by transform method
     adios_transform_read_request *transform_reqgroups;
+
+    // NCSU ALACRITY-ADIOS - The view mode of this file
+    data_view_t data_view;
+
+    // Cache of VARINFOs and TRANSINFOs, only used internally by ADIOS at the moment
+    adios_infocache *infocache;
 };
 
 // NCSU ALACRITY-ADIOS - Forward declaration/function prototypes
@@ -71,17 +80,17 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
 {
     PairStruct *params, *p, *prev_p;
     int verbose_level, removeit, save;
-    int retval; 
+    int retval;
     char *end;
 
     adios_errno = err_no_error;
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
-        adios_error (err_invalid_read_method, 
+        adios_error (err_invalid_read_method,
             "Invalid read method (=%d) passed to adios_read_init_method().\n", (int)method);
         return err_invalid_read_method;
-    } 
-    // init the adios_read_hooks_struct if not yet initialized  
-    adios_read_hooks_init (&adios_read_hooks); 
+    }
+    // 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();
 
@@ -98,7 +107,7 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     prev_p = NULL;
     while (p) {
         removeit = 0;
-        if (!strcasecmp (p->name, "verbose")) 
+        if (!strcasecmp (p->name, "verbose"))
         {
             if (p->value) {
                 errno = 0;
@@ -113,19 +122,19 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
             adios_verbose_level = verbose_level;
             removeit = 1;
         }
-        else if (!strcasecmp (p->name, "quiet")) 
+        else if (!strcasecmp (p->name, "quiet"))
         {
             adios_verbose_level = 0; //don't print errors
             removeit = 1;
         }
-        else if (!strcasecmp (p->name, "logfile")) 
+        else if (!strcasecmp (p->name, "logfile"))
         {
             if (p->value) {
                 adios_logger_open (p->value, -1);
             }
             removeit = 1;
         }
-        else if (!strcasecmp (p->name, "abort_on_error")) 
+        else if (!strcasecmp (p->name, "abort_on_error"))
         {
             adios_abort_on_error = 1;
             save = adios_verbose_level;
@@ -157,6 +166,10 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     // call method specific init 
     retval = adios_read_hooks[method].adios_read_init_method_fn (comm, params);
     free_name_value_pairs (params);
+
+    // init the query API; may call it multiple times here in multiple read methods' init;
+    common_query_init(); 
+
     return retval;
 }
 
@@ -174,25 +187,128 @@ static int calc_hash_size(unsigned int nvars)
 int common_read_finalize_method(enum ADIOS_READ_METHOD method)
 {
     adios_errno = err_no_error;
+    int retval;
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
-        adios_error (err_invalid_read_method, 
+        adios_error (err_invalid_read_method,
             "Invalid read method (=%d) passed to adios_read_finalize_method().\n", (int)method);
-        return err_invalid_read_method;
+        retval = err_invalid_read_method;
     } else if (!adios_read_hooks[method].adios_read_finalize_method_fn) {
         adios_error (err_invalid_read_method, 
             "Read method (=%d) passed to adios_read_finalize_method() is not provided "
             "by this build of ADIOS.\n", (int)method);
-        return err_invalid_read_method;
+        retval = err_invalid_read_method;
+    } else {
+        retval = adios_read_hooks[method].adios_read_finalize_method_fn ();
     }
 
-    return adios_read_hooks[method].adios_read_finalize_method_fn ();
+    // finalize the query API; may call it multiple times here in multiple read methods' finalize;
+    common_query_finalize(); 
+    return retval;
 }
 
+static ADIOS_FILE * common_read_mesh (ADIOS_FILE * fp)
+{
+    int i;
+    //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;
 
-ADIOS_FILE * common_read_open (const char * fname, 
-                               enum ADIOS_READ_METHOD method, 
-                               MPI_Comm comm, 
-                               enum ADIOS_LOCKMODE lock_mode, 
+    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
+                    int samemesh = 0;
+                    int imesh;
+                    if (fp->nmeshes > 0)
+                    {
+                        char * meshname = NULL;
+                        memcpy ( meshname, s, (size_t)(p-s) );
+                        for (imesh=0; imesh<fp->nmeshes; imesh++)
+                        {
+                            if (!strcmp (meshname, tmp[imesh]))
+                                samemesh = 1;
+                        }
+                    }
+                    if (!fp->nmeshes || !samemesh)
+                    {
+                        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++;
+                    }
+                }
+            }
+            // find ".../adios_schema" mesh references that may be external file references
+            char *last = rindex (fp->attr_namelist[i], '/'); // last piece in the full path
+            if (last && !strcmp(last, "/adios_schema") )     // ends with /adios_schema
+            {
+                enum ADIOS_DATATYPES attr_type;
+                int attr_size;
+                char * meshname = NULL;
+                int  read_fail = 0;
+                //check if this name refers to an external mesh
+                common_read_get_attr_mesh (fp, fp->attr_namelist[i], &attr_type, &attr_size, &meshname);
+                if (attr_type == adios_string)
+                {
+                    char * meshfile = malloc ( strlen("/adios_schema/")+strlen(meshname)+strlen("/mesh-file")+1 );
+                    strcpy (meshfile, "/adios_schema/");
+                    strcat (meshfile, meshname);
+                    strcat (meshfile, "/mesh-file");
+                    char * data = NULL;
+                    read_fail = common_read_get_attr_mesh (fp, meshfile, &attr_type, &attr_size, &data);
+                    if (!read_fail)
+                    {
+                        int samemesh = 0;
+                        int imesh;
+                        if (fp->nmeshes > 0)
+                        {
+                            for (imesh=0; imesh<fp->nmeshes; imesh++)
+                            {
+                                if (!strcmp (meshname, tmp[imesh]))
+                                    samemesh = 1;
+                            }
+                        }
+                        if (!fp->nmeshes || !samemesh)
+                        {
+                            tmp [ fp->nmeshes ] = strdup (meshname);
+                            fp->nmeshes++;
+                        }
+                        free(data);
+                        // user has to open the file and call common_read_complete_meshinfo() again with both file pointers
+                    }
+                    free (meshfile);
+                    free (meshname);
+                }
+            }
+        }
+
+        if (fp->nmeshes)
+        {
+            fp->mesh_namelist = (char **) realloc (tmp, sizeof (char *) * fp->nmeshes);
+            assert (fp->mesh_namelist);
+        } else {
+            free (tmp);
+        }
+    }
+    
+    return fp;
+}
+
+ADIOS_FILE * common_read_open (const char * fname,
+                               enum ADIOS_READ_METHOD method,
+                               MPI_Comm comm,
+                               enum ADIOS_LOCKMODE lock_mode,
                                float timeout_sec)
 {
     ADIOS_FILE * fp;
@@ -200,16 +316,16 @@ ADIOS_FILE * common_read_open (const char * fname,
     long i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
-        adios_error (err_invalid_read_method, 
+        adios_error (err_invalid_read_method,
             "Invalid read method (=%d) passed to adios_read_open().\n", (int)method);
         return NULL;
-    } 
+    }
 
     adios_errno = err_no_error;
-    internals = (struct common_read_internals_struct *) 
+    internals = (struct common_read_internals_struct *)
                     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); 
+    // 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();
 
@@ -223,10 +339,18 @@ ADIOS_FILE * common_read_open (const char * fname,
     internals->method = method;
     internals->read_hooks = adios_read_hooks;
 
+    // NCSU ALACRITY-ADIOS - Added a data view field, which by default starts in logical view mode
+    internals->data_view = LOGICAL_DATA_VIEW;
+
+	// NCSU ALACRITY-ADIOS - Added allocation of infocache for more efficient read processing with transforms
+	internals->infocache = adios_infocache_new();
+
     fp = adios_read_hooks[internals->method].adios_read_open_fn (fname, comm, lock_mode, timeout_sec);
     if (!fp)
         return fp;
 
+    fp->is_streaming = 1; // Mark file handle as streaming
+
     // create hashtable from the variable names as key and their index as value
     int hashsize = calc_hash_size(fp->nvars);
     internals->hashtbl_vars = qhashtbl(hashsize);
@@ -235,64 +359,9 @@ ADIOS_FILE * common_read_open (const char * fname,
                                        (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, 
+        adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups,
                 &internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
         internals->group_in_view = -1;
         internals->group_varid_offset = 0;
@@ -301,11 +370,14 @@ ADIOS_FILE * common_read_open (const char * fname,
     } else {
         free (internals);
     }
+
+    common_read_mesh (fp);
+
     return fp;
 }
 
 
-ADIOS_FILE * common_read_open_file (const char * fname, 
+ADIOS_FILE * common_read_open_file (const char * fname,
                                     enum ADIOS_READ_METHOD method,
                                     MPI_Comm comm)
 {
@@ -314,33 +386,41 @@ ADIOS_FILE * common_read_open_file (const char * fname,
     long i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
-        adios_error (err_invalid_read_method, 
+        adios_error (err_invalid_read_method,
             "Invalid read method (=%d) passed to adios_read_open_file().\n", (int)method);
         return NULL;
     }
 
-
     adios_errno = err_no_error;
-    internals = (struct common_read_internals_struct *) 
+    internals = (struct common_read_internals_struct *)
                     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); 
+    // 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;
 
+    // NCSU ALACRITY-ADIOS - Added a data view field, which by default starts in logical view mode
+    internals->data_view = LOGICAL_DATA_VIEW;
+
+    // NCSU ALACRITY-ADIOS - Added allocation of infocache for more efficient read processing with transforms
+    internals->infocache = adios_infocache_new();
+
     if (!adios_read_hooks[internals->method].adios_read_open_file_fn) {
         adios_error (err_invalid_read_method, 
             "Read method (=%d) passed to adios_read_open_file() is not provided "
             "by this build of ADIOS.\n", (int)method);
         return NULL;
     }
+	
     fp = adios_read_hooks[internals->method].adios_read_open_file_fn (fname, comm);
     if (!fp)
         return fp;
     
+    fp->is_streaming = 0; // Mark file handle as not streaming
+
     // create hashtable from the variable names as key and their index as value
     int hashsize = calc_hash_size(fp->nvars);
     internals->hashtbl_vars = qhashtbl(hashsize);
@@ -349,46 +429,9 @@ ADIOS_FILE * common_read_open_file (const char * fname,
                                        (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);
-        } else {
-            free (tmp);
-        }
-
-    }
-
     // save the method and group information in fp->internal_data
     if (fp){
-        adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups, 
+        adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups,
                 &internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
         internals->group_in_view = -1;
         internals->group_varid_offset = 0;
@@ -397,11 +440,14 @@ ADIOS_FILE * common_read_open_file (const char * fname,
     } else {
         free (internals);
     }
+    
+    common_read_mesh (fp);
+
     return fp;
 }
 
 // NCSU ALACRITY-ADIOS - Cleanup for read request groups
-#define MYFREE(p) {if (p) free((void*)p); (p)=NULL;}
+#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) {
@@ -410,7 +456,7 @@ static void clean_up_read_reqgroups(adios_transform_read_request **reqgroups_hea
 }
 #undef MYFREE
 
-int common_read_close (ADIOS_FILE *fp) 
+int common_read_close (ADIOS_FILE *fp)
 {
     struct common_read_internals_struct * internals;
     int retval;
@@ -433,10 +479,15 @@ int common_read_close (ADIOS_FILE *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
+
+        // NCSU ALACRITY-ADIOS - Cleanup read request groups and infocache
         clean_up_read_reqgroups(&internals->transform_reqgroups);
+
+        adios_infocache_free(&internals->infocache);
+
         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");
@@ -445,6 +496,42 @@ int common_read_close (ADIOS_FILE *fp)
     return retval;
 }
 
+adios_infocache * common_read_get_file_infocache(ADIOS_FILE *fp) {
+	struct common_read_internals_struct *internals = (struct common_read_internals_struct *)fp->internal_data;
+	return internals->infocache;
+}
+
+// NCSU ALACRITY-ADIOS
+data_view_t common_read_get_data_view(const ADIOS_FILE *fp) {
+	const struct common_read_internals_struct *internals = (const struct common_read_internals_struct *) fp->internal_data;
+	return internals->data_view;
+}
+data_view_t common_read_set_data_view(ADIOS_FILE *fp, data_view_t data_view) {
+	struct common_read_internals_struct *internals = (struct common_read_internals_struct *) fp->internal_data;
+	const data_view_t old_data_view = internals->data_view;
+	internals->data_view = data_view;
+	return old_data_view;
+}
+
+// What is the dimension order of arrays in the file?
+// 0: C ordering (row-major), last dimension is the fastest dimension
+// 1: Fortran ordering (column-major), first dimension is the fastest dimension
+int common_read_get_dimension_order (ADIOS_FILE * fp)
+{
+    struct common_read_internals_struct * internals;
+    int retval;
+    adios_errno = err_no_error;
+    if (fp) {
+        internals = (struct common_read_internals_struct *) fp->internal_data;
+        retval = internals->read_hooks[internals->method].adios_get_dimension_order_fn (fp);
+    } else {
+        adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_get_dimension_ordering()\n");
+        retval = err_invalid_file_pointer;
+    }
+    return retval;
+}
+
+
 void common_read_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
     struct common_read_internals_struct * internals;
@@ -481,14 +568,20 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
                         (void *)(i+1)); // avoid 0 for error checking later
             }
 
+            // Invalidate infocache, since all varinfos may have changed now
+            adios_infocache_invalidate(internals->infocache);
+
             /* Update group information too */
+            free_namelist (internals->group_namelist, internals->ngroups);
+            free (internals->nvars_per_group);
+            free (internals->nattrs_per_group);
             adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups, 
                     &internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
             if (internals->group_in_view > -1) {
                 /* if we have a group view, we need to update the presented list again */
                 /* advance_step updated fp->nvars, nattrs, var_namelist, attr_namelist */
                 int groupid = internals->group_in_view;
-                internals->group_in_view = -1; // we have the full view at this moment 
+                internals->group_in_view = -1; // we have the full view at this moment
                 common_read_group_view (fp, groupid);
             }
         }
@@ -500,7 +593,7 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
 }
 
 
-void common_read_release_step (ADIOS_FILE *fp) 
+void common_read_release_step (ADIOS_FILE *fp)
 {
     struct common_read_internals_struct * internals;
 
@@ -537,7 +630,8 @@ static int common_read_find_var (const ADIOS_FILE *fp, const char *name, int qui
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
 
-        varid = (int) internals->hashtbl_vars->get (internals->hashtbl_vars, name);
+        // Double cast makes the compiler happy...
+        varid = (int)(int64_t)internals->hashtbl_vars->get (internals->hashtbl_vars, name);
         // varid=0 is "not found", otherwise +1 bigger than actual varid
         varid--;
     }
@@ -553,7 +647,7 @@ static int common_read_find_var (const ADIOS_FILE *fp, const char *name, int qui
 
 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. 
+    /** 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.
@@ -593,10 +687,10 @@ static int common_read_find_attr (int n, char ** namelist, const char *name, int
 }
 
 
-ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE *fp, const char * varname) 
+ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE *fp, const char * varname)
 {
     ADIOS_VARINFO * retval;
- 
+
     adios_errno = err_no_error;
     if (fp) {
         int varid = common_read_find_var (fp, varname, 0);
@@ -639,19 +733,24 @@ static void patch_varinfo_with_transinfo(ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti)
 //   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;
+    struct common_read_internals_struct * internals;
+	ADIOS_VARINFO *vi;
     ADIOS_TRANSINFO *ti;
 
+    internals = (struct common_read_internals_struct *)fp->internal_data;
+
     vi = common_read_inq_var_raw_byid(fp, varid);
     if (vi == NULL)
         return 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);
+
+    if (internals->data_view == LOGICAL_DATA_VIEW) { // Only translate the varinfo in logical view mode
+    	// 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);
     }
-    common_read_free_transinfo(vi, ti);
 
     return vi;
 }
@@ -662,13 +761,13 @@ ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE *fp, int varid)
 {
     struct common_read_internals_struct * internals;
     ADIOS_VARINFO * retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         if (varid >= 0 && varid < fp->nvars) {
             internals = (struct common_read_internals_struct *) fp->internal_data;
-            /* Translate varid to varid in global varlist if a selected group is in view */ 
-            retval = internals->read_hooks[internals->method].adios_inq_var_byid_fn 
+            /* Translate varid to varid in global varlist if a selected group is in view */
+            retval = internals->read_hooks[internals->method].adios_inq_var_byid_fn
                                             (fp, varid+internals->group_varid_offset);
             if (retval) {
                 /* Translate real varid to the group varid presented to the user */
@@ -676,7 +775,7 @@ ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE *fp, int varid)
                 retval->meshinfo = NULL; // initialize here because it's a common layer addition
             }
         } else {
-            adios_error (err_invalid_varid, 
+            adios_error (err_invalid_varid,
                          "Variable ID %d is not valid adios_inq_var_byid(). "
                          "Available 0..%d\n", varid, fp->nvars-1);
             retval = NULL;
@@ -744,7 +843,7 @@ int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
     struct common_read_internals_struct * internals;
     int retval;
     int group_varid;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -767,22 +866,38 @@ int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
 //   patch the original metadata in from the transform info
 int common_read_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
 {
+    int retval;
+	struct common_read_internals_struct *internals;
     ADIOS_TRANSINFO *ti;
 
-    int retval = common_read_inq_var_blockinfo_raw(fp, varinfo);
-    if (retval != err_no_error)
-        return retval;
+    internals = (struct common_read_internals_struct *)fp->internal_data;
+
+    // If the blockinfo is already loaded, don't load it again
+    if (varinfo->blockinfo)
+    	return err_no_error;
 
     // 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;
+    // If we're in logical view mode, and if this variable is transformed, use the transformed blockinfo
+    if (internals->data_view == LOGICAL_DATA_VIEW) {
+        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);
+            patch_varinfo_with_transform_blockinfo(varinfo, ti);
+        }
+        common_read_free_transinfo(varinfo, ti);
     }
-    common_read_free_transinfo(varinfo, ti);
+
+    // If we haven't set the blockinfo yet, either we're in physical view
+    // mode, or the variable isn't transformed. Either way, use the normal
+    // blockinfo
+    if (!varinfo->blockinfo) {
+        retval = common_read_inq_var_blockinfo_raw(fp, varinfo);
+        if (retval != err_no_error)
+            return retval;
+   }
 
     return err_no_error;
 }
@@ -794,7 +909,7 @@ int common_read_inq_var_blockinfo_raw (const ADIOS_FILE *fp, ADIOS_VARINFO * var
     struct common_read_internals_struct * internals;
     int retval;
     int group_varid;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -813,7 +928,7 @@ int common_read_inq_var_blockinfo_raw (const ADIOS_FILE *fp, ADIOS_VARINFO * var
     return retval;
 }
 
-#define MYFREE(p) {free(p); (p)=NULL;}
+#define MYFREE(p) {if (p) free((void*)(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) {
@@ -841,18 +956,44 @@ void common_read_free_varinfo (ADIOS_VARINFO *vp)
             if (sp->std_dev)                       MYFREE(sp->std_dev);
 
             if (sp->steps) {
-                if (sp->steps->mins)        MYFREE(sp->steps->mins);
-                if (sp->steps->maxs)        MYFREE(sp->steps->maxs);
-                if (sp->steps->avgs)        MYFREE(sp->steps->avgs);
-                if (sp->steps->std_devs)    MYFREE(sp->steps->std_devs);
+                int s;
+                if (sp->steps->mins) {
+                    for(s=0; s < vp->nsteps; s++) if (sp->steps->mins[s]) MYFREE(sp->steps->mins[s]);
+                    MYFREE(sp->steps->mins);
+                }
+                if (sp->steps->maxs) {
+                    for(s=0; s < vp->nsteps; s++) if (sp->steps->maxs[s]) MYFREE(sp->steps->maxs[s]);
+                    MYFREE(sp->steps->maxs);
+                }
+                if (sp->steps->avgs) {
+                    for(s=0; s < vp->nsteps; s++) if (sp->steps->avgs[s]) MYFREE(sp->steps->avgs[s]);
+                    MYFREE(sp->steps->avgs);
+                }
+                if (sp->steps->std_devs) {
+                    for(s=0; s < vp->nsteps; s++) if (sp->steps->std_devs[s]) MYFREE(sp->steps->std_devs[s]);
+                    MYFREE(sp->steps->std_devs);
+                }
                 MYFREE(sp->steps);
             }
 
             if (sp->blocks) {
-                if (sp->blocks->mins)        MYFREE(sp->blocks->mins);
-                if (sp->blocks->maxs)        MYFREE(sp->blocks->maxs);
-                if (sp->blocks->avgs)        MYFREE(sp->blocks->avgs);
-                if (sp->blocks->std_devs)    MYFREE(sp->blocks->std_devs);
+                int b, nb = vp->sum_nblocks;
+                if (sp->blocks->mins) {
+                    for(b = 0; b < nb; b++) if (sp->blocks->mins[b]) MYFREE(sp->blocks->mins[b]);
+                    MYFREE(sp->blocks->mins);
+                }
+                if (sp->blocks->maxs) {
+                    for(b = 0; b < nb; b++) if (sp->blocks->maxs[b]) MYFREE(sp->blocks->maxs[b]);
+                    MYFREE(sp->blocks->maxs);
+                }
+                if (sp->blocks->avgs) {
+                    for(b = 0; b < nb; b++) if (sp->blocks->avgs[b]) MYFREE(sp->blocks->avgs[b]);
+                    MYFREE(sp->blocks->avgs);
+                }
+                if (sp->blocks->std_devs) {
+                    for(b = 0; b < nb; b++) if (sp->blocks->std_devs[b]) MYFREE(sp->blocks->std_devs[b]);
+                    MYFREE(sp->blocks->std_devs);
+                }
                 MYFREE(sp->blocks);
             }
 
@@ -881,6 +1022,15 @@ void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
         if (ti->transform_metadata && ti->should_free_transform_metadata)
             MYFREE(ti->transform_metadata);
 
+        if (ti->transform_metadatas) {
+        	if (ti->should_free_transform_metadata) {
+                int i;
+        		for (i = 0; i < vi->sum_nblocks; i++)
+                	MYFREE(ti->transform_metadatas[i].content);
+        	}
+            MYFREE(ti->transform_metadatas);
+        }
+
         common_read_free_blockinfo(&ti->orig_blockinfo, vi->sum_nblocks);
 
         free(ti);
@@ -888,7 +1038,6 @@ void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *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
@@ -1419,12 +1568,28 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     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]);
+
+    //check if mesh structure is stored in the same file
+    char * meshfile = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/mesh-file")+1 );
+    strcpy (meshfile, "/adios_schema/");
+    strcat (meshfile, meshinfo->name);
+    strcat (meshfile, "/mesh-file");
+    read_fail = common_read_get_attr_mesh (fp, meshfile, &attr_type, &attr_size, &data);
+    free (meshfile);
+    if (!read_fail)
+    {
+        meshinfo->file_name = strdup((char *)data);
+        // user has to open this file and call common_read_complete_meshinfo() again with both file pointers
+        return meshinfo;
+    }
+
+    //mesh is in the same file
+    meshinfo->file_name = NULL; 
     //construct /adios_schema/***/time-varying
     //mesh time-varying
     char * time_varying = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/time-varying")+1 );
@@ -1458,7 +1623,8 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
         meshinfo->type = ADIOS_MESH_STRUCTURED;
     else if ( !strcmp((char *)data, "unstructured") )
         meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
-
+    common_read_complete_meshinfo (fp, fp, meshinfo);
+#if 0
     //check if mesh structure is stored in the same file
     char * meshfile = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/mesh-file")+1 );
     strcpy (meshfile, "/adios_schema/");
@@ -1466,7 +1632,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     strcat (meshfile, "/mesh-file");
     read_fail = common_read_get_attr_mesh (fp, meshfile, &attr_type, &attr_size, &data);
     free (meshfile);
-
+    printf ("read_fail is %d\n", read_fail);
     if (read_fail)
     {
         meshinfo->file_name = NULL; 
@@ -1476,8 +1642,10 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     else
     {
         meshinfo->file_name = strdup((char *)data);
+        printf("file_name is %s\n", meshinfo->file_name);
         // user has to open this file and call common_read_complete_meshinfo() again with both file pointers
     }
+#endif
     return meshinfo;
 }
 
@@ -1492,12 +1660,59 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
    
     if (fp==NULL || mp==NULL)
     { 
+         printf("file is NULL\n");
         adios_error (err_mesh_file_missing,
                      "Mesh file %s or mesh file does not exist. ",
                      fp->path, mp->path);
         return adios_errno;
     }
 
+    if (fp != mp) //if mesh is in a different file, time-varying, mesh type is unknow yet
+    {
+        //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 (mp, 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;
+        }
+
+        //check if mesh structure type
+        char * meshtype = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/type")+1 );
+        strcpy (meshtype, "/adios_schema/");
+        strcat (meshtype, meshinfo->name);
+        strcat (meshtype, "/type");
+        read_fail = common_read_get_attr_mesh (mp, meshtype, &attr_type, &attr_size, &data);
+        free (meshtype);
+        if (!read_fail)
+        {
+            if (!strcmp((char *)data, "uniform") || !strcmp((char *)data, "UNIFORM") || !strcmp((char *)data, "Uniform"))
+                meshinfo->type = ADIOS_MESH_UNIFORM;
+            if (!strcmp((char *)data, "rectilinear") || !strcmp((char *)data, "RECTILINEAR") || !strcmp((char *)data, "Rectilinear"))
+                meshinfo->type = ADIOS_MESH_RECTILINEAR;
+            if (!strcmp((char *)data, "structured") || !strcmp((char *)data, "STRUCTURED") || !strcmp((char *)data, "Structured"))
+                meshinfo->type = ADIOS_MESH_STRUCTURED;
+            if (!strcmp((char *)data, "unstructured") || !strcmp((char *)data, "UNSTRUCTURED") || !strcmp((char *)data, "Unstructured"))
+                meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
+            else
+                printf("mesh structure %s is not supported\n", (char *)data);
+            free (data);
+        }
+        else
+        {
+            log_error ("Cannot get mesh %s type\n", meshinfo->name);
+            return read_fail;
+        }
+    }
 //    if ( !strcmp((char *)data, "uniform") )
     if (meshinfo->type == ADIOS_MESH_UNIFORM)
     {
@@ -1514,7 +1729,8 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+//        read_fail = common_read_get_attr_mesh (fp, dimension_attribute, &attr_type, &attr_size, &data);
+        read_fail = common_read_get_attr_mesh (mp, 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);
@@ -1545,7 +1761,8 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                 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);
+//                read_fail = common_read_get_attr_mesh (fp, dimensions_value, &attr_type, &attr_size, &data);
+                read_fail = common_read_get_attr_mesh (mp, dimensions_value, &attr_type, &attr_size, &data);
                 free (dimensions_value);
                 if (read_fail)
                 {
@@ -1565,9 +1782,10 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                     else
                     {
                         char * dimensions_value_tmp = strdup((char *)data);
-                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+//                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        varid = common_read_find_var (mp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
-                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                             adios_errno = err_no_error;
                             meshinfo->uniform->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
                             if (adios_errno < 0)
@@ -1601,7 +1819,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
 
         //start processing origins, origin is optional
         int have_origins;
-        have_origins = adios_get_uniform_mesh_attr (fp, meshinfo, "origins");
+        have_origins = adios_get_uniform_mesh_attr (mp, meshinfo, "origins");
         if (have_origins == -1)
             return adios_errno;
 //        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
@@ -1609,7 +1827,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
 
         //start processing spacings, spacing is optional 
         int have_spacings;
-        have_spacings = adios_get_uniform_mesh_attr (fp, meshinfo, "spacings");
+        have_spacings = adios_get_uniform_mesh_attr (mp, meshinfo, "spacings");
         if (have_spacings == -1)
             return adios_errno;
 //        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
@@ -1617,7 +1835,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
 
         //start processing maximums, maximum is optional
         int have_maximums;
-        have_maximums = adios_get_uniform_mesh_attr (fp, meshinfo, "maximums");
+        have_maximums = adios_get_uniform_mesh_attr (mp, meshinfo, "maximums");
         if (have_maximums == -1)
             return adios_errno;
 //        for (int i = 0; i < meshinfo->uniform->num_dimensions; i++ )
@@ -1655,7 +1873,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, dimension_attribute, &attr_type, &attr_size, &data);
         free (dimension_attribute);
         if (!read_fail)
         {
@@ -1685,7 +1903,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                 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);
+                read_fail = common_read_get_attr_mesh (mp, dimensions_value, &attr_type, &attr_size, &data);
 //                printf("dimensions_value is %s\n", dimensions_value);
                 free (dimensions_value);
                 if (read_fail)
@@ -1706,9 +1924,9 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                     else
                     {
                         char * dimensions_value_tmp = strdup((char *)data);
-                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        varid = common_read_find_var (mp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
-                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                             adios_errno = err_no_error;
                             meshinfo->rectilinear->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
                             if (adios_errno < 0)
@@ -1746,7 +1964,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, 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
@@ -1754,10 +1972,10 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            varid = common_read_find_var (mp, coords_tmp, 1);
             if (varid >= 0)
             {
-                ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                 // check if mesh dimension matches coordinates dimension
                 if (v->ndim == 0)                      //scalar
                 {    
@@ -1781,7 +1999,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                             return adios_errno; 
                         }
                         else
-                            meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]);
+                            meshinfo->rectilinear->coordinates[0] = strdup (mp->var_namelist[varid]);
                     }
                     else        //multi dim vector
                     {
@@ -1796,7 +2014,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                                 return adios_errno; 
                             }
                         }
-                        meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]); 
+                        meshinfo->rectilinear->coordinates[0] = strdup (mp->var_namelist[varid]); 
                     }
                 }
                 common_read_free_varinfo (v);
@@ -1817,7 +2035,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, coords_attribute, &attr_type, &attr_size, &data);
             free (coords_attribute);
             if (!read_fail)  //found attributes coords-multi-var
             {
@@ -1860,7 +2078,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
 //                    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);
+                    read_fail = common_read_get_attr_mesh (mp, coords_var, &attr_type, &attr_size, &data);
                     free (coords_var);
                     if (read_fail)
                     {
@@ -1871,9 +2089,9 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                     }
 
                     char * coords_var_tmp = strdup((char *)data);
-                    varid = common_read_find_var (fp, coords_var_tmp, 1);
+                    varid = common_read_find_var (mp, coords_var_tmp, 1);
                     if (varid >= 0) {
-                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                         if (meshinfo->rectilinear->dimensions[i] != v->dims[0])
                         {
                             adios_error (err_mesh_recti_invalid_coords,
@@ -1885,7 +2103,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                         }
                         else
                         {
-                            meshinfo->rectilinear->coordinates[i] = strdup (fp->var_namelist[varid]);
+                            meshinfo->rectilinear->coordinates[i] = strdup (mp->var_namelist[varid]);
                             // printf ("coordinates[%d] is %s\n", i, meshinfo->rectilinear->coordinates[i]);
                         }
                         common_read_free_varinfo (v);
@@ -1917,7 +2135,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, dimension_attribute, &attr_type, &attr_size, &data);
         free (dimension_attribute);
         if (!read_fail)
         {
@@ -1945,7 +2163,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                 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);
+                read_fail = common_read_get_attr_mesh (mp, dimensions_value, &attr_type, &attr_size, &data);
                 if (read_fail)
                 {
                     adios_error (err_mesh_structured_missing_one_dim,
@@ -1964,9 +2182,9 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                     else
                     {
                         char * dimensions_value_tmp = strdup((char *)data);
-                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        varid = common_read_find_var (mp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
-                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                             adios_errno = err_no_error;
                             meshinfo->structured->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
                             if( adios_errno < 0)
@@ -2003,7 +2221,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, points_attribute, &attr_type, &attr_size, &data);
         free (points_attribute);
         if (!read_fail)   //use points-single-var
         {
@@ -2011,10 +2229,10 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            varid = common_read_find_var (mp, coords_tmp, 1);
             if (varid >= 0)
             {
-                ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]); 
+                ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]); 
                 if (v->ndim == 0)                      //scalar
                 {
                     adios_error (err_mesh_structured_invaid_dim_points,
@@ -2037,7 +2255,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                             return adios_errno; 
                         }
                         else
-                            meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
+                            meshinfo->structured->points[0] = strdup (mp->var_namelist[varid]);
                     }
                     else
                     {
@@ -2052,7 +2270,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                                 return adios_errno; 
                             }
                         }
-                        meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
+                        meshinfo->structured->points[0] = strdup (mp->var_namelist[varid]);
                     }
                 }
                 common_read_free_varinfo (v);
@@ -2072,7 +2290,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, points_attribute, &attr_type, &attr_size, &data);
             free (points_attribute);
             if (!read_fail)  //found attributes points-multi-var
             {
@@ -2113,7 +2331,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                     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);
+                    read_fail = common_read_get_attr_mesh (mp, points_var, &attr_type, &attr_size, &data);
                     free (points_var);
                     if (read_fail)
                     {
@@ -2123,10 +2341,10 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                         return adios_errno; 
                     }
                     char * points_var_tmp = strdup((char *)data);
-                    varid = common_read_find_var (fp, points_var_tmp, 1);
+                    varid = common_read_find_var (mp, points_var_tmp, 1);
                     if (varid >= 0) 
                     {
-                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                         //check if dim of mesh matches point dim
                         if (v->ndim == 1)     //if var is 1D array
                         {
@@ -2142,7 +2360,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                                 return adios_errno; 
                             }
                             else
-                                meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
+                                meshinfo->structured->points[i] = strdup (mp->var_namelist[varid]);
                         }
                         else
                         {
@@ -2158,7 +2376,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                                     return adios_errno; 
                                 }
                             }
-                            meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
+                            meshinfo->structured->points[i] = strdup (mp->var_namelist[varid]);
                         }
                         common_read_free_varinfo (v);
                     } 
@@ -2187,7 +2405,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, mesh_nspace, &attr_type, &attr_size, &data);
         free (mesh_nspace);
         if (read_fail)
         {
@@ -2207,10 +2425,10 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             {
                 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);
+                varid = common_read_find_var (mp, spaces_var_tmp, 1);
                 if (varid >= 0)
                 {
-                    ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                    ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                     meshinfo->structured->nspaces = *(int *)v->value;
                     common_read_free_varinfo (v);
                 }
@@ -2236,14 +2454,16 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
 //        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 );
+        char * points_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/points-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);
+//        printf("points_attribute is %s\n", points_attribute);
+        read_fail = common_read_get_attr_mesh (mp, points_attribute, &attr_type, &attr_size, &data);
         free (points_attribute);
         if (!read_fail)   //use points-single-var
         {
+//            printf ("use points-single-var\n");
             meshinfo->unstructured->points = (char **) malloc (sizeof(char *));  
 //            meshinfo->unstructured->use_single_var = 1;         // modify default value to 1
             char * coords_tmp = strdup((char *)data);
@@ -2289,7 +2509,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, points_attribute, &attr_type, &attr_size, &data);
             free (points_attribute);
             if (!read_fail)  //found attributes points-multi-var
             {
@@ -2434,7 +2654,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, num_points, &attr_type, &attr_size, &data);
         free (num_points);
         if (read_fail)
         {
@@ -2510,7 +2730,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, mesh_nspace, &attr_type, &attr_size, &data);
         free (mesh_nspace);
         if (read_fail) {
             log_info ("Unstructured mesh %s nspace is not provided. "
@@ -2583,7 +2803,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
         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);
+        read_fail = common_read_get_attr_mesh (mp, 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)
@@ -2626,7 +2846,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, num_cells, &attr_type, &attr_size, &data);
             free (num_cells);
             if (read_fail)
             {
@@ -2749,7 +2969,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, data_cells, &attr_type, &attr_size, &data);
             free (data_cells);
             if (read_fail)
             {
@@ -2800,7 +3020,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                 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);
+                read_fail = common_read_get_attr_mesh (mp, cdata_var, &attr_type, &attr_size, &data);
                 free (cdata_var);
                 if (read_fail)
                 {
@@ -2838,7 +3058,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
             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);
+            read_fail = common_read_get_attr_mesh (mp, type_cells, &attr_type, &attr_size, &data);
             free (type_cells);
             if (read_fail)
             {
@@ -2900,7 +3120,7 @@ int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH *
                 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);
+                read_fail = common_read_get_attr_mesh (mp, ctype_mix_var, &attr_type, &attr_size, &data);
                 free (ctype_mix_var);
                 if (read_fail)
                 {
@@ -3043,7 +3263,7 @@ int common_read_schedule_read (const ADIOS_FILE      * fp,
 
 {
     int retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         int varid = common_read_find_var (fp, varname,0);
@@ -3070,72 +3290,69 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
         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;
+    struct common_read_internals_struct * internals = (struct common_read_internals_struct *) fp->internal_data;
     int retval;
-    
+
+    internals = (struct common_read_internals_struct *) fp->internal_data;
+
     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
+            //   the read scheduling and schedule our own reads.
+        	// Note: Use the infocache to save varinfos across calls, since otherwise
+        	//   a large number of schedule_reads will have bad performance due to
+        	//   expensive inq_var calls.
+        	const data_view_t old_view = common_read_set_data_view((ADIOS_FILE *)fp, PHYSICAL_DATA_VIEW); // const-ness cheat, since we're going to set it right back
+            ADIOS_VARINFO *raw_varinfo = adios_infocache_inq_varinfo(fp, internals->infocache, varid); //common_read_inq_var_raw_byid(fp, varid);        // Get the *raw* varinfo
+            common_read_set_data_view((ADIOS_FILE *)fp, old_view); // const-ness cheat, since we're now setting it back
+
+            ADIOS_TRANSINFO *transinfo = adios_infocache_inq_transinfo(fp, internals->infocache, varid); //common_read_inq_transinfo(fp, raw_varinfo);    // Get the transform info (i.e. original var info)
+            assert(raw_varinfo && transinfo);
+
+            if (from_steps >= 0 && from_steps + nsteps <= raw_varinfo->nsteps) {
+            	// If this variable is transformed and we are in logical view mode,
+            	// delegate to the transform method to generate subrequests
+            	// Else, do the normal thing
+            	if (internals->data_view == LOGICAL_DATA_VIEW && 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;
+
+            		// 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);
+
+            		// 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 (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);
+            				}
+            			}
+            		}
+            	} else {
+            		// Old functionality
+            		// DON'T FREE varinfo/transinfo, since they are stored in the infocached
+            		// common_read_free_transinfo (raw_varinfo, transinfo);
+            		// common_read_free_varinfo (raw_varinfo);
+
+            		retval = internals->read_hooks[internals->method].adios_schedule_read_byid_fn (fp, sel, varid+internals->group_varid_offset, from_steps, nsteps, data);
+            	}
             } else {
-                // Old functionality
-                common_read_free_transinfo (raw_varinfo, transinfo);
-                common_read_free_varinfo (raw_varinfo);
-
-                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);
+                adios_error (err_invalid_timestep,
+                             "Variable %s does not have timesteps %d to %d (last timestep is %d)\n",
+                             fp->var_namelist[varid], from_steps, from_steps + nsteps - 1, raw_varinfo->nsteps - 1);
+                retval = err_invalid_timestep;
             }
         } else {
-            adios_error (err_invalid_varid, 
+            adios_error (err_invalid_varid,
                          "Variable ID %d is not valid in adios_schedule_read_byid(). "
                          "Available 0..%d\n", varid, fp->nvars-1);
             retval = err_invalid_varid;
@@ -3145,9 +3362,6 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
         retval = err_invalid_file_pointer;
     }
 
-#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
-    timer_stop ("adios_schedule_read");
-#endif
     return retval;
 }
 
@@ -3155,12 +3369,9 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
 //  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;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3170,13 +3381,7 @@ int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
         //   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
         }
@@ -3184,9 +3389,6 @@ int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
         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;
 }
 
@@ -3194,7 +3396,7 @@ int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
 {
     struct common_read_internals_struct * internals;
     int retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3202,11 +3404,21 @@ int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
         // 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
+        	// First, allow the transform layer to clean up any resources
+        	// remaining from the previous check_reads (e.g., internal
+        	// buffers that were passed to the user via varchunks)
+        	adios_transform_cleanup_from_previous_check_reads(&internals->transform_reqgroups);
+
+        	// Read a chunk of (potentially transformed) data from the transport layer
+        	retval = internals->read_hooks[internals->method].adios_check_reads_fn (fp, chunk);
 
-            // Process the chunk through a transform method, if necessary
+        	// If no more chunks are available, stop now
+            if (!*chunk) break;
+
+            // Give the transform layer a chance to attempt to process the chunk
+            // If the chunk does not contain transformed data, it will remain untouched
+            // If it does contain transformed data, it will be replaced with a
+            // new, de-transformed chunk
             adios_transform_process_read_chunk(&internals->transform_reqgroups, chunk);
         } while (!*chunk); // Keep reading until we have a chunk to return
     } else {
@@ -3216,7 +3428,6 @@ int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
     return retval;
 }
 
-
 void common_read_free_chunk (ADIOS_VARCHUNK *chunk)
 {
     /** Free the memory of a chunk allocated inside adios_check_reads().
@@ -3226,7 +3437,8 @@ void common_read_free_chunk (ADIOS_VARCHUNK *chunk)
      */
      if (chunk) {
         if (chunk->sel) {
-            free(chunk->sel);
+            free_selection(chunk->sel);
+            //free(chunk->sel);
             chunk->sel = NULL;
         }
         free(chunk);
@@ -3234,14 +3446,14 @@ void common_read_free_chunk (ADIOS_VARCHUNK *chunk)
 }
 
 
-int common_read_get_attr (const ADIOS_FILE * fp, 
-                          const char * attrname, 
+int common_read_get_attr (const ADIOS_FILE * fp,
+                          const char * attrname,
                           enum ADIOS_DATATYPES * type,
-                          int * size, 
+                          int * size,
                           void ** data)
 {
     int retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         int attrid = common_read_find_attr (fp->nattrs, fp->attr_namelist, attrname, 0);
@@ -3258,22 +3470,22 @@ int common_read_get_attr (const ADIOS_FILE * fp,
 }
 
 
-int common_read_get_attr_byid (const ADIOS_FILE * fp, 
-                               int attrid, 
-                               enum ADIOS_DATATYPES * type, 
-                               int * size, 
+int common_read_get_attr_byid (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 {
-            adios_error (err_invalid_attrid, 
+            adios_error (err_invalid_attrid,
                          "Attribute ID %d is not valid in adios_get_attr_byid(). "
                          "Available 0..%d\n", attrid, fp->nattrs-1);
             retval = err_invalid_attrid;
@@ -3328,7 +3540,7 @@ int common_read_get_grouplist (const ADIOS_FILE  *fp, char ***group_namelist)
 {
     struct common_read_internals_struct * internals;
     int retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3350,7 +3562,7 @@ int common_read_group_view (ADIOS_FILE  *fp, int groupid)
 {
     struct common_read_internals_struct * internals;
     int retval, i;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3399,13 +3611,13 @@ int common_read_group_view (ADIOS_FILE  *fp, int groupid)
 }
 
 /* internal function to support version 1 time-dimension reads
-   called from adios_read_v1.c and adiosf_read_v1.c 
+   called from adios_read_v1.c and adiosf_read_v1.c
 */
 int common_read_is_var_timed (const ADIOS_FILE *fp, int varid)
 {
     struct common_read_internals_struct * internals;
     int retval;
-    
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3417,7 +3629,7 @@ int common_read_is_var_timed (const ADIOS_FILE *fp, int varid)
     return retval;
 }
 
-void common_read_print_fileinfo (const ADIOS_FILE *fp) 
+void common_read_print_fileinfo (const ADIOS_FILE *fp)
 {
     int i;
     int ngroups;
@@ -3466,9 +3678,9 @@ void common_read_print_fileinfo (const ADIOS_FILE *fp)
 }
 
 
-/**    SELECTIONS   **/ 
+/**    SELECTIONS   **/
 ADIOS_SELECTION * common_read_selection_boundingbox (int ndim, const uint64_t *start, const uint64_t *count)
-{   
+{
     adios_errno = err_no_error;
     ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
     if (sel) {
@@ -3484,7 +3696,7 @@ ADIOS_SELECTION * common_read_selection_boundingbox (int ndim, const uint64_t *s
 
 
 ADIOS_SELECTION * common_read_selection_points (int ndim, uint64_t npoints, const uint64_t *points)
-{   
+{
     adios_errno = err_no_error;
     ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
     if (sel) {
@@ -3499,7 +3711,7 @@ ADIOS_SELECTION * common_read_selection_points (int ndim, uint64_t npoints, cons
 }
 
 ADIOS_SELECTION * common_read_selection_writeblock (int index)
-{   
+{
     adios_errno = err_no_error;
     ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
     if (sel) {
@@ -3515,7 +3727,7 @@ ADIOS_SELECTION * common_read_selection_writeblock (int index)
 }
 
 ADIOS_SELECTION * common_read_selection_auto (char *hints)
-{   
+{
     adios_errno = err_no_error;
     ADIOS_SELECTION * sel = (ADIOS_SELECTION *) malloc (sizeof(ADIOS_SELECTION));
     if (sel) {
diff --git a/src/core/common_read.h b/src/core/common_read.h
index c5c3f16..189d259 100644
--- a/src/core/common_read.h
+++ b/src/core/common_read.h
@@ -13,6 +13,8 @@
 
 #include "public/adios_types.h"
 #include "public/adios_read_v2.h"  /* C API's struct's are used here */
+#include "core/adios_infocache.h"
+#include "core/transforms/adios_transforms_read.h" // NCSU ALACRITY-ADIOS
 #include "core/transforms/adios_transforms_transinfo.h" // NCSU ALACRITY-ADIOS
 
 #include <stdint.h>
@@ -33,7 +35,16 @@ ADIOS_FILE * common_read_open_file   (const char * fname,
                                      enum ADIOS_READ_METHOD method,
                                      MPI_Comm comm);
 
-int common_read_close (ADIOS_FILE *fp);
+int common_read_close(ADIOS_FILE *fp);
+
+// Return the infocache associated with the given file
+// WARNING: varinfos/transinfos will be invalidated upon advance_step or close,
+// so users of this infocache should be careful not to use its returned infos
+// beyond the current timestep or after close.
+adios_infocache * common_read_get_file_infocache(ADIOS_FILE *fp);
+
+data_view_t common_read_set_data_view(ADIOS_FILE *fp, data_view_t data_view); // NCSU ALACRITY-ADIOS
+data_view_t common_read_get_data_view(const ADIOS_FILE *fp);
 
 int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec);
 void common_read_release_step (ADIOS_FILE *fp);
@@ -41,13 +52,14 @@ 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);
+ADIOS_TRANSINFO * common_read_inq_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi); // NCSU ALACRITY-ADIOS
 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_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO * ti);
 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);
+int common_read_inq_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO * ti); // NCSU ALACRITY-ADIOS
 void common_read_free_varinfo (ADIOS_VARINFO *vp);
 void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti); // NCSU ALACRITY-ADIOS
 
@@ -89,6 +101,7 @@ int common_read_get_attr_byid (const ADIOS_FILE  * fp, int attrid, enum ADIOS_DA
 const char * common_read_type_to_string (enum ADIOS_DATATYPES type);
 int common_read_type_size(enum ADIOS_DATATYPES type, void *data);
 
+
 int common_read_get_grouplist (const ADIOS_FILE  *fp, char ***group_namelist);
 int common_read_group_view (ADIOS_FILE  *fp, int groupid);
 
@@ -97,6 +110,7 @@ int common_read_group_view (ADIOS_FILE  *fp, int groupid);
 */
 int common_read_is_var_timed (const ADIOS_FILE *fp, int varid);
 
+int common_read_get_dimension_order (ADIOS_FILE * fp);
 void common_read_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran);
 void common_read_print_fileinfo (const ADIOS_FILE *fp);
 
diff --git a/src/core/flexpath.h b/src/core/flexpath.h
index 22ba5c0..51fb551 100644
--- a/src/core/flexpath.h
+++ b/src/core/flexpath.h
@@ -21,6 +21,9 @@
 #define INIT_MSG 3
 #define EOS_MSG 4
 
+#define FP_FORTRAN_MODE 1
+#define FP_C_MODE 0
+
 #define perr(...) if(getenv("FP_DEBUG")) fprintf(stderr, __VA_ARGS__);
 
 #define fp_log(LOG, ...)                             \
@@ -117,6 +120,32 @@ typedef struct var_msg_ {
     int condition;
 } Var_msg, *Var_msg_ptr;
 
+typedef struct _complex_dummy
+{
+    float r;
+    float i;
+} complex_dummy;
+
+typedef struct _double_complex_dummy
+{
+    double r;
+    double i;
+} double_complex_dummy;
+
+static FMField complex_dummy_field_list[] =
+{
+    {"r", "float", sizeof(float), FMOffset(complex_dummy*, r)},
+    {"i", "float", sizeof(float), FMOffset(complex_dummy*, i)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMField double_complex_dummy_field_list[] =
+{
+    {"r", "double", sizeof(double), FMOffset(double_complex_dummy*, r)},
+    {"i", "double", sizeof(double), FMOffset(double_complex_dummy*, i)},
+    {NULL, NULL, 0, 0}
+};
+
 static FMField update_step_msg_field_list[]=
 {
     {"step", "integer", sizeof(int), FMOffset(update_step_msg*, step)},
diff --git a/src/core/globals.c b/src/core/globals.c
index 3a54055..a3ff6f0 100644
--- a/src/core/globals.c
+++ b/src/core/globals.c
@@ -185,7 +185,7 @@ char *get_full_path_name(char *name, char *path)
     }
     if (!path || !path[0]) { // null or empty string
         sprintf (full_pathname, "%s\0", name);
-    else if (!strcmp (path, "/")) {
+    } else if (!strcmp (path, "/")) {
         sprintf (full_pathname, "/%s\0", name);
     }
     else {
@@ -197,3 +197,145 @@ fprintf(stderr, "im here %s %s %s %s:%d\n", name, path, full_pathname,__FILE__,_
 
 #endif
 
+#ifdef HAVE_ICEE
+
+#include <stdio.h>
+
+double dsum(const int len, const double* data)
+{
+    double s = 0.0;
+    int i;
+    for (i=0; i<len; i++)
+        s += data[i];
+
+    return s;
+}
+
+void icee_data_print(const int type, const uint64_t varlen, const char* data)
+{
+    fprintf(stderr, "%10s : %p\n", "*data", data);
+    switch (type)
+    {
+    case 2: // int
+        if (data)
+        {
+            fprintf(stderr, "%10s : %d,%d,%d,...\n", "data", 
+                    ((int*)data)[0], ((int*)data)[1], ((int*)data)[2]);
+            fprintf(stderr, "%10s : %g\n", "sum", dsum(varlen/8, (double*)data));
+        }
+        break;
+    case 6: // double
+        if (data)
+        {
+            fprintf(stderr, "%10s : %g,%g,%g,...\n", "data", 
+                    ((double*)data)[0], ((double*)data)[1], ((double*)data)[2]);
+            fprintf(stderr, "%10s : %g\n", "sum", dsum(varlen/8, (double*)data));
+        }
+        break;
+    }
+}
+
+void icee_dims_print(const char* name, const int ndims, const uint64_t *dims)
+{
+    
+    switch (ndims)
+    {
+    case 0:
+        fprintf(stderr, "%10s : none\n", name);
+        break;
+    case 1:
+        fprintf(stderr, "%10s : %llu\n", name, dims[0]);
+        break;
+    case 2:
+        fprintf(stderr, "%10s : %llu,%llu\n", 
+                name, dims[0], dims[1]);
+        break;
+    case 3:
+        fprintf(stderr, "%10s : %llu,%llu,%llu\n", 
+                name, dims[0], dims[1], dims[2]);
+        break;
+    default:
+        fprintf(stderr, "%10s : %llu,%llu,%llu,...\n", 
+                name, dims[0], dims[1], dims[2]);
+        break;
+    }
+}
+
+void icee_varinfo_print(const icee_varinfo_rec_ptr_t vp)
+{
+    fprintf(stderr, "===== varinfo (%p) =====\n", vp);
+
+    if (vp)
+    {
+        fprintf(stderr, "%10s : %s\n", "varname", vp->varname);
+        fprintf(stderr, "%10s : %d\n", "varid", vp->varid);
+        fprintf(stderr, "%10s : %d\n", "type", vp->type);
+        fprintf(stderr, "%10s : %d\n", "typesize", vp->typesize);
+        fprintf(stderr, "%10s : %d\n", "ndims", vp->ndims);
+        icee_dims_print("gdims", vp->ndims, vp->gdims);
+        icee_dims_print("ldims", vp->ndims, vp->ldims);
+        icee_dims_print("offsets", vp->ndims, vp->offsets);
+        fprintf(stderr, "%10s : %llu\n", "varlen", vp->varlen);
+        icee_data_print(vp->type, vp->varlen, vp->data);
+    }
+    else
+    {
+        fprintf(stderr, "varinfo is invalid\n");
+    }
+}
+
+void icee_fileinfo_print(const void* item)
+{
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t) item;
+
+    fprintf(stderr, "===== fileinfo (%p) =====\n", fp);
+
+    if (fp)
+    {
+        fprintf(stderr, "%10s : %s\n", "fname", fp->fname);
+        fprintf(stderr, "%10s : %d\n", "nvars", fp->nvars);
+        fprintf(stderr, "%10s : %d\n", "nchunks", fp->nchunks);
+        fprintf(stderr, "%10s : %d\n", "comm_size", fp->comm_size);
+        fprintf(stderr, "%10s : %d\n", "comm_rank", fp->comm_rank);
+        fprintf(stderr, "%10s : %d\n", "merge_count", fp->merge_count);
+        fprintf(stderr, "%10s : %d\n", "timestep", fp->timestep);
+        fprintf(stderr, "%10s : %p\n", "varinfo", fp->varinfo);
+        fprintf(stderr, "%10s : %p\n", "next", fp->next);
+
+        icee_varinfo_rec_ptr_t vp = fp->varinfo;
+
+        while (vp != NULL)
+        {
+            icee_varinfo_print(vp);
+            vp = vp->next; 
+        }
+
+        if (fp->next != NULL)
+            icee_fileinfo_print(fp->next);
+    }
+    else
+    {
+        fprintf(stderr, "fileinfo is invalid\n");
+    }
+}
+
+void icee_contactinfo_print(const icee_contactinfo_rec_ptr_t cp)
+{
+    fprintf(stderr, "===== contactinfo (%p) =====\n", cp);
+
+    if (cp)
+    {
+        fprintf(stderr, "%10s : %d\n", "stone_id", cp->stone_id);
+        fprintf(stderr, "%10s : %s\n", "contact_string", cp->contact_string);
+        fdump_attr_list(stderr, attr_list_from_string(cp->contact_string));
+        fprintf(stderr, "%10s : %p\n", "next", cp->next);
+        if (cp->next != NULL)
+            icee_contactinfo_print(cp->next);
+    }
+    else
+    {
+        fprintf(stderr, "contactinfo is invalid\n");
+    }
+}
+
+#endif
diff --git a/src/core/globals.h b/src/core/globals.h
index 6c46d79..ad59519 100644
--- a/src/core/globals.h
+++ b/src/core/globals.h
@@ -11,7 +11,7 @@
 #ifndef __GLOBALS_H__
 #define __GLOBALS_H__
 
-#include "../config.h"
+#include "config.h"
 
 /** Set an application ID for this program. 
  *  This function is necessary for methods who needs a unique ID from each participating applications.
@@ -59,4 +59,27 @@ char *get_full_path_name(char *name, char *path);
 
 #endif
 
+#ifdef HAVE_ICEE
+
+#ifndef ICEE_MAX_PARALLEL
+#define ICEE_MAX_PARALLEL 32
+#endif
+
+#ifndef ICEE_MAX_REMOTE
+#define ICEE_MAX_REMOTE 32
+#endif
+
+#include "core/adios_icee.h"
+
+typedef enum {TCP, UDP, ENET, NNTI, IB} icee_transport_t;
+static const char *icee_transport_name[] = {
+    "TCP", "UDP", "ENET", "NNTI", "IB",
+};
+
+void icee_dims_print(const char* name, const int ndims, const uint64_t *dims);
+void icee_varinfo_print(const icee_varinfo_rec_ptr_t vp);
+void icee_fileinfo_print(const void* item);
+void icee_contactinfo_print(const icee_contactinfo_rec_ptr_t cp);
+#endif
+
 #endif  /*__GLOBALS_H__*/
diff --git a/src/core/transforms/adios_patchdata.c b/src/core/transforms/adios_patchdata.c
index 75c5486..a3ad2ef 100644
--- a/src/core/transforms/adios_patchdata.c
+++ b/src/core/transforms/adios_patchdata.c
@@ -29,18 +29,18 @@
 
 #include "public/adios_error.h"
 #include "public/adios_selection.h"
-#include "common_read.h"
-#include "adios_subvolume.h"
-#include "adios_internals.h" // adios_get_type_size()
-#include "adios_selection_util.h"
-#include "adios_patchdata.h"
+#include "core/common_read.h"
+#include "core/adios_subvolume.h"
+#include "core/adios_internals.h" // adios_get_type_size()
+#include "core/adios_selection_util.h"
+#include "core/transforms/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
+// One-to-one global 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,
@@ -188,24 +188,7 @@ inline static uint64_t adios_patch_data_pts_to_pts(void *dst, uint64_t dst_ragge
     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
+// One-to-any global 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,
@@ -263,80 +246,193 @@ inline static uint64_t adios_patch_data_to_pts(void *dst, uint64_t dst_ragged_of
 
 }
 
-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:
+//
+// Any-on-any global patch function
+//
+
+static int is_global_selection(const ADIOS_SELECTION *sel) {
+	return sel->type == ADIOS_SELECTION_BOUNDINGBOX || sel->type == ADIOS_SELECTION_POINTS;
+}
+
+uint64_t adios_patch_data_to_global(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)
+{
+	if (!is_global_selection(dst_sel) || !is_global_selection(src_sel)) {
+    	adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Internal error: adios_patch_data_to_global called on non-global selection type(s)");
+    	return 0;
+	}
+
+	switch (dst_sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
     {
-        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);
+        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_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;
+    {
+        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);
+    }
     default:
-        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", src_sel->type);
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", dst_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) {
+
+
+
+// To-local data patching
+
+// One-to-one global patch functions
+
+inline static uint64_t adios_patch_data_bb_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_BOUNDINGBOX_STRUCT *src_bb,
+                                                 const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                                 enum ADIOS_DATATYPES datum_type,
+                                                 enum ADIOS_FLAG swap_endianness)
+{
+	// If this is a sub-PG selection, it refers only to a range of
+	// elements positions in C array order. Thus, element 0 of the
+	// output buffer corresponds to element dst_wb->element_offset
+	// of the writeblock selection. This is in addition to any existing
+	// ragged offset.
+	// (for instance, if dst_wb->element_offset is 5, and the existing
+	// ragged offset were 3, then the user's buffer would start at element
+	// 3 *within* the sub-PG window that starts at element 5, for a total
+	// starting offset of 5+3=8 within the whole PG's bounds)
+	if (dst_wb->is_sub_pg_selection)
+		dst_ragged_offset += dst_wb->element_offset;
+
+	// Use the existing BB to BB patching function
+	return adios_patch_data_bb_to_bb(
+		dst, dst_ragged_offset, vb_bounds, // Patch into the output buffer, which is bounded by this varblock's bounds
+		src, src_ragged_offset, src_bb,    // Patch from the input selection as usual
+		datum_type, swap_endianness);      // Pass other info along
+}
+
+inline static uint64_t adios_patch_data_pts_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_POINTS_STRUCT *src_pts,
+                                                  const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                                  enum ADIOS_DATATYPES datum_type,
+                                                  enum ADIOS_FLAG swap_endianness)
+{
+	// If this is a sub-PG selection, it refers only to a range of
+	// elements positions in C array order. Thus, element 0 of the
+	// output buffer corresponds to element dst_wb->element_offset
+	// of the writeblock selection. This is in addition to any existing
+	// ragged offset.
+	// (for instance, if dst_wb->element_offset is 5, and the existing
+	// ragged offset were 3, then the user's buffer would start at element
+	// 3 *within* the sub-PG window that starts at element 5, for a total
+	// starting offset of 5+3=8 within the whole PG's bounds)
+	if (dst_wb->is_sub_pg_selection)
+		dst_ragged_offset += dst_wb->element_offset;
+
+	// Use the existing PTS to BB patching function
+	return adios_patch_data_pts_to_bb(
+		dst, dst_ragged_offset, vb_bounds, // Patch into the output buffer, which is bounded by this varblock's bounds
+		src, src_ragged_offset, src_pts,   // Patch from the input selection as usual
+		datum_type, swap_endianness);      // Pass other info along
+}
+
+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,
+                                                 const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                                 enum ADIOS_DATATYPES datum_type,
+                                                 enum ADIOS_FLAG swap_endianness)
+{
+	uint64_t copy_elem_offset, copy_nelems;
+	const uint64_t vb_size_in_elements = compute_volume(vb_bounds->ndim, vb_bounds->count);
+
+	const uint64_t dst_elem_offset = dst_wb->is_sub_pg_selection ? dst_wb->element_offset : 0;
+	const uint64_t dst_nelems = dst_wb->is_sub_pg_selection ? dst_wb->nelements : vb_size_in_elements;
+	const uint64_t src_elem_offset = src_wb->is_sub_pg_selection ? src_wb->element_offset : 0;
+	const uint64_t src_nelems = src_wb->is_sub_pg_selection ? src_wb->nelements : vb_size_in_elements;
+
+	// Find out how many elements overlap between the two
+	// writeblock selections (due to the potential existence
+	// of sub-PG writeblock selections; if both are whole-PG,
+	// this overlap will be complete)
+	int intersects = intersect_segments(
+			dst_elem_offset, dst_nelems,
+			src_elem_offset, src_nelems,
+			&copy_elem_offset, &copy_nelems
+	);
+
+	// Copy any elements that are common to both selections
+	// (for whole-PG writeblock selections, this will be all of them)
+	if (intersects) {
+		int typesize = adios_get_type_size(datum_type, NULL);
+		void *copy_dst = (char*)dst + (copy_elem_offset - dst_elem_offset) * typesize;
+		void *copy_src = (char*)src + (copy_elem_offset - src_elem_offset) * typesize;
+
+		memcpy(copy_dst, copy_src, copy_nelems * typesize);
+		if (swap_endianness == adios_flag_yes)
+			change_endianness(copy_dst, copy_nelems * typesize, datum_type);
+
+		return copy_nelems;
+	} else {
+		return 0;
+	}
+}
+
+// One-to-any local patch functions
+
+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,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                              enum ADIOS_DATATYPES datum_type,
+                                              enum ADIOS_FLAG swap_endianness) {
     switch (src_sel->type) {
-    case ADIOS_SELECTION_AUTO:
+    case ADIOS_SELECTION_BOUNDINGBOX:
     {
-        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);
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb = &src_sel->u.bb;
+        return adios_patch_data_bb_to_wb(dst, dst_ragged_offset, dst_wb, src, src_ragged_offset, src_bb, vb_bounds, datum_type, swap_endianness);
     }
-    case ADIOS_SELECTION_BOUNDINGBOX:
     case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *src_pts = &src_sel->u.points;
+        return adios_patch_data_pts_to_wb(dst, dst_ragged_offset, dst_wb, src, src_ragged_offset, src_pts, vb_bounds, datum_type, swap_endianness);
+    }
     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, vb_bounds, datum_type, swap_endianness);
+    }
+    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_AUTO);
+                                                                      "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;
     }
+
 }
 
 //
-// Any-on-any patch function
+// Any-on-any local 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) {
+// NOTE: vb_bounds_sel is the bounding box of the varblock to which dst_sel (a writeblock selection) corresponds
+uint64_t adios_patch_data_to_local(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION *dst_sel,
+                                   void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                   const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                   enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness)
+{
+	if (is_global_selection(dst_sel)) {
+    	adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Internal error: adios_patch_data_to_local called on non-global destination selection type %d", dst_sel->type);
+    	return 0;
+	}
+
     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);
+        return adios_patch_data_to_wb(dst, dst_ragged_offset, dst_wb, src, src_ragged_offset, src_sel, vb_bounds, datum_type, swap_endianness);
     }
     default:
         adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", dst_sel->type);
diff --git a/src/core/transforms/adios_patchdata.h b/src/core/transforms/adios_patchdata.h
index 2e4276d..17ad92a 100644
--- a/src/core/transforms/adios_patchdata.h
+++ b/src/core/transforms/adios_patchdata.h
@@ -14,11 +14,21 @@
 /*
  * 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.
+ * and destination buffers, as defined by their selections. This function can only operate on
+ * global selections (e.g., bounding box, points), not varblock-relative selections (e.g., writeblock).
  */
-uint64_t adios_patch_data(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION *dst_sel,
+uint64_t adios_patch_data_to_global(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);
 
+/*
+ * Same as adios_patch_data_to_global, but supports varblock-relative selections, and thus takes the
+ * additional argument "vb_bounds_sel" to define the bounds of the varblock in this context.
+ */
+uint64_t adios_patch_data_to_local(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION *dst_sel,
+                                   void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                   const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *vb_bounds,
+                                   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
index 62624b6..1815645 100644
--- a/src/core/transforms/adios_transforms_common.c
+++ b/src/core/transforms/adios_transforms_common.c
@@ -138,14 +138,14 @@
 
 #include "public/adios.h"
 #include "core/adios_bp_v1.h"
-#include "adios_internals.h"
-#include "adios_endianness.h"
-#include "adios_logger.h"
-#include "bp_utils.h"
+#include "core/adios_internals.h"
+#include "core/adios_endianness.h"
+#include "core/adios_logger.h"
+#include "core/bp_utils.h"
 #include "core/common_adios.h"
 
-#include "adios_transforms_common.h"
-#include "adios_transforms_hooks.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_hooks.h"
 
 #include <assert.h>
 #include <stdint.h>
@@ -279,6 +279,8 @@ static enum ADIOS_TRANSFORM_TYPE deserialize_transform_type(struct adios_bp_buff
     BUFREAD(b, transform_uid, transform_uid_len);
 
     enum ADIOS_TRANSFORM_TYPE transform_type = adios_transform_find_type_by_uid(transform_uid);
+
+    free(transform_uid);
     return transform_type;
 }
 
diff --git a/src/core/transforms/adios_transforms_common.h b/src/core/transforms/adios_transforms_common.h
index fcd79cb..da98fbc 100644
--- a/src/core/transforms/adios_transforms_common.h
+++ b/src/core/transforms/adios_transforms_common.h
@@ -10,7 +10,7 @@
 #define ADIOS_TRANSFORM_H
 
 #include <stdint.h>
-#include "adios_bp_v1.h"
+#include "core/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"
 
diff --git a/src/core/transforms/adios_transforms_datablock.c b/src/core/transforms/adios_transforms_datablock.c
index 7474ec4..7ed28cc 100644
--- a/src/core/transforms/adios_transforms_datablock.c
+++ b/src/core/transforms/adios_transforms_datablock.c
@@ -10,21 +10,36 @@
 
 #include "public/adios_error.h"
 #include "public/adios_types.h"
-#include "common_read.h"
+#include "core/common_read.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"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/transforms/adios_transforms_util.h"
+#include "core/transforms/adios_transforms_datablock.h"
 
 // Datablock management
 
+adios_datablock * adios_datablock_new_whole_pg(
+		const adios_transform_read_request *read_req,
+        const adios_transform_pg_read_request *pg_read_req,
+        void *data)
+{
+	// Return a datablock using the PG's writeblock (this is
+	// the most compatible option for processing in the
+	// transforms framework)
+	return adios_datablock_new(
+			read_req->transinfo->orig_type,
+			pg_read_req->timestep,
+			pg_read_req->pg_writeblock_sel,
+			data);
+}
+
 adios_datablock * adios_datablock_new(
         enum ADIOS_DATATYPES elem_type,
         int timestep,
         const ADIOS_SELECTION *bounds,
-        void *data) {
-
+        void *data)
+{
     assert(bounds);
     assert(data);
     return adios_datablock_new_ragged_offset(elem_type, timestep, bounds, 0, data);
diff --git a/src/core/transforms/adios_transforms_datablock.h b/src/core/transforms/adios_transforms_datablock.h
index 7419603..f9c2420 100644
--- a/src/core/transforms/adios_transforms_datablock.h
+++ b/src/core/transforms/adios_transforms_datablock.h
@@ -15,6 +15,7 @@
 #define ADIOS_TRANSFORMS_DATABLOCK_H_
 
 #include "public/adios_types.h"
+#include <core/transforms/adios_transforms_reqgroup.h>
 
 typedef struct {
     int timestep;                  // timestep of this datablock
@@ -27,6 +28,11 @@ typedef struct {
 } adios_datablock;
 
 // Datablock management
+adios_datablock * adios_datablock_new_whole_pg(
+		const adios_transform_read_request *read_req,
+        const adios_transform_pg_read_request *pg_read_req,
+        void *data);
+
 adios_datablock * adios_datablock_new(
         enum ADIOS_DATATYPES elem_type,
         int timestep,
diff --git a/src/core/transforms/adios_transforms_hooks_read.h b/src/core/transforms/adios_transforms_hooks_read.h
index 83a1e0f..a4b3eec 100644
--- a/src/core/transforms/adios_transforms_hooks_read.h
+++ b/src/core/transforms/adios_transforms_hooks_read.h
@@ -9,17 +9,17 @@
 #define ADIOS_TRANSFORMS_HOOKS_READ_H_
 
 #include <stdint.h>
-#include "adios_bp_v1.h"
-#include "adios_subvolume.h"
-#include "public/adios_read.h"
+#include "core/adios_bp_v1.h"
+#include "core/adios_subvolume.h"
+#include "public/adios_read_v2.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"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_datablock.h"
+#include "core/transforms/adios_transforms_transinfo.h"
 
 // Initialize the transform system for adios read-only libraries
 void adios_transform_read_init();
diff --git a/src/core/transforms/adios_transforms_hooks_write.c b/src/core/transforms/adios_transforms_hooks_write.c
index 6b7e03c..be16fe6 100644
--- a/src/core/transforms/adios_transforms_hooks_write.c
+++ b/src/core/transforms/adios_transforms_hooks_write.c
@@ -2,11 +2,11 @@
 #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 "core/adios_logger.h"
+#include "core/adios_internals.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
 #include "public/adios_selection.h"
 
 /*
@@ -58,9 +58,12 @@ uint16_t adios_transform_get_metadata_size(struct adios_transform_spec *transfor
     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);
+void adios_transform_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap) {
+
+    assert(var->transform_type >= adios_transform_none && var->transform_type < num_adios_transform_types);
+    TRANSFORM_WRITE_METHODS[var->transform_type].transform_transformed_size_growth(var, transform_spec, constant_factor, linear_factor, capped_linear_factor, capped_linear_cap);
 }
 
 int adios_transform_apply(
diff --git a/src/core/transforms/adios_transforms_hooks_write.h b/src/core/transforms/adios_transforms_hooks_write.h
index 392bb92..9606138 100644
--- a/src/core/transforms/adios_transforms_hooks_write.h
+++ b/src/core/transforms/adios_transforms_hooks_write.h
@@ -9,9 +9,9 @@
 #define ADIOS_TRANSFORMS_HOOKS_WRITE_H_
 
 #include <stdint.h>
-#include "adios_bp_v1.h"
-#include "adios_internals.h"
-#include "adios_transforms_common.h"
+#include "core/adios_bp_v1.h"
+#include "core/adios_internals.h"
+#include "core/transforms/adios_transforms_common.h"
 #include "public/adios_error.h"
 
 // Initialize the transform system for adios read/write libraries
@@ -19,7 +19,9 @@ 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);
+void adios_transform_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap);
 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);
@@ -30,12 +32,41 @@ int adios_transform_apply(
 
 // Transform write method registry entry
 typedef struct {
-    uint16_t (*transform_get_metadata_size)(struct adios_transform_spec *transform_spec);
+	// Expected behavior: returns the number of bytes of metadata storage a given transformed variable will need
+	// Note: "metadata storage" is located in the BP footer, and is loaded at file-open time by all processes;
+	//       as such, it should be strictly limited to what is necessary to interpret the remaining transformed
+	//       data in one pass. This is why the size is (currently) limited to a uint16_t.
+	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);
+	// Expected behavior: returns the upper bound "growth factors" that this data transformation could effect
+	// on a given variable. These factors are combined to compute the upper bound on a PG's size *before the data
+	// to be written is known*
+	// There are 3 factors returned:
+	//   > constant_factor: regardless of what data is stored in this variable, this transform will always require
+	//     up to "constant_factor" bytes extra storage above and beyond the data (for, e.g., offsets, metadata, etc.)
+	//   > linear_factor: if X bytes of data are stored in this variable, this transform may require up to
+	//     "linear_factor * X" bytes of storage.
+	//   > capped_linear_factor: if X bytes of data are stored in this variable:
+	//       if X < capped_linear_cap: this transform may require up to "capped_linear_factor * X" extra bytes of
+	//         storage (this is on top of linear_factor and constant_factor)
+	//       else: this transform may require up to "capped_linear_factor * capped_linear_cap" extra bytes of
+	//         storage (this is on top of linear_factor and constant_factor)
+	//
+	// The final upper bound estimation function is as follows:
+	// X' = total_constant_factor + X * max_linear_factor + min(X, max_capped_linear_cap) * max_capped_linear_factor
+	//
+	// Note: any or all of these factors may remain unset. In this case, constant_factor, capped_linear_factor, and
+	// capped_linear_cap all default to 0, and linear_factor defaults to 1.
+    void (*transform_transformed_size_growth)(
+    		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+    		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap);
 
+    // Expected behavior: applies this data transform to the given variable. The data to be transformed is stored in
+    // var->data. If use_shared_buffer is non-zero, the transform may write the transformed data directly to the ADIOS
+    // shared buffer (or it may elect to use a newly-allocated buffer, as described next). If use_shared_buffer is zero,
+    // the transformed data must be written to a newly-allocated buffer, and var->data shall be updated to point to this
+    // buffer. See adios_transform_zlib_write.c for an example of both methods. In any case, the flag wrote_to_shared_buffer
+    // must be updated to indicate whether the transformed data was written to the shared buffer or is located in var->data.
     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);
@@ -52,16 +83,20 @@ typedef struct {
 // 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,    \
+    void adios_transform_##tmethod##_transformed_size_growth(const struct adios_var_struct *var, \
+    														 const struct adios_transform_spec *transform_spec, \
+    														 uint64_t *constant_factor, \
+    														 double *linear_factor, \
+    														 double *capped_linear_factor, \
+    														 uint64_t *capped_linear_cap); \
+    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##_transformed_size_growth, \
     adios_transform_##tmethod##_apply
 
 #define REGISTER_TRANSFORM_WRITE_METHOD_HOOKS(ttable, tmethod, method_type) \
@@ -81,10 +116,10 @@ typedef struct {
             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) { \
+        void adios_transform_##tmethod##_transformed_size_growth( \
+        		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec, \
+        		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap) { \
             UNIMPL_TRANSFORM_WRITE_FN(tmethod, __FUNCTION__);                                \
-            return 0;                                                                        \
         }                                                                                    \
         int adios_transform_##tmethod##_apply(struct adios_file_struct *fd,                  \
                                               struct adios_var_struct *var,                  \
diff --git a/src/core/transforms/adios_transforms_read.c b/src/core/transforms/adios_transforms_read.c
index 0fad60b..4af2762 100644
--- a/src/core/transforms/adios_transforms_read.c
+++ b/src/core/transforms/adios_transforms_read.c
@@ -1,25 +1,29 @@
+#include <stddef.h>
 #include <assert.h>
 
-#include "adios_bp_v1.h"
-#include "adios_internals.h"
-#include "common_read.h"
+#include "core/adios_bp_v1.h"
+#include "core/adios_internals.h"
+#include "core/common_read.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 "public/adios_read_ext.h"
+#include "core/adios_logger.h"
+#include "core/util.h"
 
-#include "adios_selection_util.h"
+#include "core/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"
-#include "transforms/adios_patchdata.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_datablock.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_read.h"
+#include "core/transforms/adios_transforms_util.h"
+#include "core/transforms/adios_patchdata.h"
 
-#define MYFREE(p) {free(p); (p)=NULL;}
+// Utilities
+#define FREE(p) {if (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) {
@@ -102,25 +106,68 @@ static uint64_t compute_selection_size_in_bytes(const ADIOS_SELECTION *sel,
  * 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;
+    int timestep;
 
     // Find the block index for the start and end timestep
     int curblocks = 0;
-    for (blockidx = 0; blockidx < raw_varinfo->nsteps; blockidx++) {
+    for (timestep = 0; timestep < raw_varinfo->nsteps; timestep++) {
         // Find the start block
-        if (blockidx == from_steps) {
+        if (timestep == from_steps) {
             *start_blockidx = curblocks;
         }
-        curblocks += raw_varinfo->nblocks[blockidx];
+        curblocks += raw_varinfo->nblocks[timestep];
         // Find the end block, then stop
-        if (blockidx == to_steps - 1) {
+        if (timestep == to_steps - 1) {
             *end_blockidx = curblocks;
             break;
         }
     }
 }
 
-inline static const ADIOS_SELECTION * create_pg_bounds(int ndim, ADIOS_VARBLOCK *orig_vb) {
+// Converts absolute varblock indexes to timestep-relative varblock indexes
+static int compute_absolute_blockidx_from_relative_blockidx(const ADIOS_VARINFO *raw_varinfo, int timestep, int timestep_blockidx, int *blockidx_out) {
+	if (timestep < 0 || timestep >= raw_varinfo->nsteps) {
+		return 0;
+	}
+    if (timestep_blockidx >= raw_varinfo->nblocks[timestep]) {
+    	return 0;
+    }
+
+	// Find the block index for the start and end timestep
+    int ts;
+    int curblocks = 0;
+    for (ts = 0; ts < timestep; ts++)
+        curblocks += raw_varinfo->nblocks[ts];
+
+    *blockidx_out = curblocks + timestep_blockidx;
+    return 1;
+}
+
+// Converts rimestep-relative varblock indexes to absolute varblock indexes
+static int compute_relative_blockidx_from_absolute_blockidx(const ADIOS_VARINFO *raw_varinfo, int blockidx, int *timestep_out, int *timestep_blockidx_out) {
+    // Find the block index for the start and end timestep
+    int timestep;
+	int curblocks = 0, next_curblocks;
+    for (timestep = 0; timestep < raw_varinfo->nsteps; timestep++) {
+        next_curblocks = curblocks + raw_varinfo->nblocks[timestep];
+
+        if (blockidx < next_curblocks) {
+        	*timestep_out = timestep;
+        	*timestep_blockidx_out = blockidx - curblocks;
+        	return 1;
+        }
+
+        curblocks = next_curblocks;
+    }
+    return 0;
+}
+
+inline static int is_global_selection(const ADIOS_SELECTION *sel) {
+	return sel->type != ADIOS_SELECTION_WRITEBLOCK;
+}
+
+// Creates a bounding box from a given ADIOS_VARBLOCK
+inline static const ADIOS_SELECTION * create_pg_bounds_from_varblock(int ndim, const 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);
@@ -129,113 +176,89 @@ inline static const ADIOS_SELECTION * create_pg_bounds(int ndim, ADIOS_VARBLOCK
     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 start_blockidx, end_blockidx;
-    ADIOS_VARBLOCK *raw_vb, *orig_vb;
+// Creates a bounding box for a the varblock specified by a given writeblock
+// selection (which may be absolute or timestep-relative)
+inline static const ADIOS_SELECTION * create_writeblock_bounds(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb, int timestep, const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo) {
+    int blockidx;
+    if (wb->is_absolute_index) {
+    	blockidx = wb->index;
+    } else {
+    	compute_absolute_blockidx_from_relative_blockidx(raw_varinfo, timestep, wb->index, &blockidx);
+    }
 
-    enum ADIOS_FLAG swap_endianness = (fp->endianness == get_system_endianness()) ? adios_flag_no : adios_flag_yes;
-    int to_steps = from_steps + nsteps;
+	// Get the bounds of the varblock corresponding to the given writeblock
+    const ADIOS_VARBLOCK *vb_bounds = &transinfo->orig_blockinfo[blockidx];
+    return create_pg_bounds_from_varblock(transinfo->orig_ndim, vb_bounds);
+}
 
-    // Precondition checking
-    assert(is_transform_type_valid(transinfo->transform_type));
-    assert(from_steps >= 0 && to_steps <= raw_varinfo->nsteps);
+static int generate_read_request_for_pg(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		const ADIOS_SELECTION *sel,
+		int timestep, int timestep_blockidx, int blockidx,
+		adios_transform_read_request *readreq)
+{
+    const ADIOS_SELECTION *pg_bounds_sel;
+    ADIOS_SELECTION *pg_intersection_sel;
+    ADIOS_SELECTION *pg_writeblock_sel;
+
+    const ADIOS_VARBLOCK *raw_vb = &raw_varinfo->blockinfo[blockidx];
+    const ADIOS_VARBLOCK *orig_vb = &transinfo->orig_blockinfo[blockidx];
+
+    pg_bounds_sel = create_pg_bounds_from_varblock(transinfo->orig_ndim, orig_vb);
+    pg_writeblock_sel = common_read_selection_writeblock(blockidx);
+    pg_writeblock_sel->u.block.is_absolute_index = 1;
+
+    // Find the intersection, if any
+    if (is_global_selection(sel)) {
+    	pg_intersection_sel = adios_selection_intersect_global(pg_bounds_sel, sel);
+    } else if (sel->type == ADIOS_SELECTION_WRITEBLOCK) {
+    	pg_intersection_sel = adios_selection_intersect_local(pg_writeblock_sel, sel, timestep, raw_varinfo, transinfo);
+    } else {
+    	abort(); // Should never be called with other types of selections
+    }
 
-    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.");
+    // If there is an intersection, generate a corresponding PG read request
+    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_readreq;
+        new_pg_readreq = 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,
+                                                              transinfo->transform_metadatas[blockidx].content,
+                                                              (uint16_t)transinfo->transform_metadatas[blockidx].length);
+
+        adios_transform_generate_read_subrequests(readreq, new_pg_readreq);
+        adios_transform_pg_read_request_append(readreq, new_pg_readreq);
+
+        // Don't free pg_bounds_sel or pg_intersection_sel, since they are now
+        // held by the adios_transform_pg_read_request struct
+        return 1;
+    } else {
+        // Cleanup
+        common_read_selection_delete((ADIOS_SELECTION *)pg_bounds_sel); // OK to delete, because this function only frees the outer struct, not the arrays within
+        return 0;
     }
+}
+
+static void populate_read_request_for_global_selection(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		const ADIOS_SELECTION *sel, int from_steps, int nsteps,
+		adios_transform_read_request *readreq)
+{
+    int blockidx, timestep, timestep_blockidx;
+    int start_blockidx, end_blockidx;
+    int to_steps = from_steps + nsteps;
 
     // 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++) {
-        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
-        }
+    	generate_read_request_for_pg(raw_varinfo, transinfo, sel, timestep, timestep_blockidx, blockidx, readreq);
 
         // Increment block indexes
         blockidx++;
@@ -245,29 +268,109 @@ adios_transform_read_request * adios_transform_generate_read_reqgroup(const ADIO
             timestep++;
         }
     }
+}
+
+// Note: from_steps and nsteps are ignored in the absolute writeblock case
+static void populate_read_request_for_local_selection(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		const ADIOS_SELECTION *sel, int from_steps, int nsteps,
+		adios_transform_read_request *readreq)
+{
+	int timestep, timestep_blockidx, blockidx;
+	if (sel->type == ADIOS_SELECTION_WRITEBLOCK) {
+		const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &sel->u.block;
+
+		if (wb->is_absolute_index) {
+			// For an absolute writeblock, at most one PG is touched (0 if erroneous blockidx)
+			blockidx = wb->index;
+
+			// Convert blockidx to timestep and timestep_blockidx
+			int valid_blockidx = compute_relative_blockidx_from_absolute_blockidx(raw_varinfo, blockidx, &timestep, &timestep_blockidx);
+			if (valid_blockidx) {
+				generate_read_request_for_pg(raw_varinfo, transinfo, sel, timestep, timestep_blockidx, blockidx, readreq);
+			} else {
+				adios_error(err_invalid_timestep, "Writeblock selection with invalid absolute index %d passed to adios_schedule_read, caught in ADIOS transforms layer",
+							wb->index);
+			}
+		} else {
+			// For a relative writeblock, one PG may be touched per timestep in the user's timestep range
+			timestep_blockidx = wb->index;
+			for (timestep = from_steps; timestep < from_steps + nsteps; timestep++) {
+				// Convert timestep (loop iterator variable) and timestep_blockidx to blockidx
+				int valid_blockidx = compute_absolute_blockidx_from_relative_blockidx(raw_varinfo, timestep, timestep_blockidx, &blockidx);
+				if (valid_blockidx) {
+					generate_read_request_for_pg(raw_varinfo, transinfo, sel, timestep, timestep_blockidx, blockidx, readreq);
+				} else {
+					adios_error(err_invalid_timestep, "Writeblock selection with index %d passed to adios_schedule_read is invalid in timestep %d, caught in ADIOS transforms layer",
+								wb->index, timestep);
+				}
+			}
+		}
+	} else {
+		adios_error_at_line(err_operation_not_supported, __FILE__, __LINE__, "Internal error: unsupported selection type %d in populate_read_request_for_local_selection", sel->type);
+	}
+}
+
+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) {
+    // Declares
+    adios_transform_read_request *new_readreq;
+    int blockidx, timestep, timestep_blockidx;
+    int start_blockidx, end_blockidx;
+
+    enum ADIOS_FLAG swap_endianness = (fp->endianness == get_system_endianness()) ? adios_flag_no : adios_flag_yes;
+
+    // In streaming mode, ignore the user's from_steps/nsteps arguments
+    if (fp->is_streaming) {
+    	from_steps = 0;
+    	nsteps = 1;
+    }
+
+    // Precondition checking
+    assert(is_transform_type_valid(transinfo->transform_type));
+    assert(from_steps >= 0 && from_steps + nsteps <= raw_varinfo->nsteps);
+
+    if (sel->type != ADIOS_SELECTION_BOUNDINGBOX &&
+        sel->type != ADIOS_SELECTION_POINTS &&
+        sel->type != ADIOS_SELECTION_WRITEBLOCK) {
+        adios_error(err_operation_not_supported, "Only bounding box, point , and writeblock selections are currently supported for reads on transformed variables.");
+    }
+
+    // Retrieve blockinfos, if they haven't been done retrieved
+    if (!raw_varinfo->blockinfo)
+        common_read_inq_var_blockinfo_raw(fp, (ADIOS_VARINFO*)raw_varinfo);
+    if (!transinfo->orig_blockinfo)
+        common_read_inq_trans_blockinfo(fp, raw_varinfo, (ADIOS_TRANSINFO*)transinfo);
+
+    // Allocate a new, empty request group
+    new_readreq = adios_transform_read_request_new(fp, raw_varinfo, transinfo, sel, from_steps, nsteps, param, data, swap_endianness);
+
+    if (is_global_selection(sel)) {
+    	populate_read_request_for_global_selection(raw_varinfo, transinfo, sel, from_steps, nsteps, new_readreq);
+    } else {
+    	populate_read_request_for_local_selection(raw_varinfo, transinfo, sel, from_steps, nsteps, new_readreq);
+    }
 
     // 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;
+    if (new_readreq->num_pg_reqgroups == 0) {
+        adios_transform_read_request_free(&new_readreq);
+        new_readreq = NULL;
     }
 
-    return new_reqgroup;
+    return new_readreq;
 }
 
 /*
- * Called whenever a subreq has been served by the read layer. Marks
- * all subreqs, pg_reqgroups and read_reqgroups as completed as necessary,
+ * Called whenever a raw read request has been served by the read layer. Marks
+ * all raw_read_requests, pg_read_requests and read_requests 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_transform_raw_read_request *subreq)
+{
     adios_datablock *result, *tmp_result;
 
     // Mark the subrequest as complete
@@ -293,13 +396,208 @@ static adios_datablock * finish_subreq(
             result = tmp_result;
         }
     }
-#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_stop ("adios_transform_plugin_handle_data");
-#endif
 
     return result;
 }
 
+static uint64_t apply_datablock_to_buffer_local_selections(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		adios_datablock *datablock,
+        void **output_buffer, const ADIOS_SELECTION *output_sel,
+        ADIOS_SELECTION **out_inter_sel, int want_out_inter_sel,
+        enum ADIOS_FLAG swap_endianness)
+{
+	int may_have_intersection = 1;
+
+	// For writeblock selections, we can use adios_patch_data_to_local,
+	// but first we must determine the bounding box of the writeblock selection
+    const ADIOS_SELECTION *vb_bounds_sel = create_writeblock_bounds(&output_sel->u.block, datablock->timestep, raw_varinfo, transinfo);
+
+    // Compute the intersection explicitly if it is requested, or
+    // if we need to allocate a fitting output buffer
+    if (want_out_inter_sel || !*output_buffer) {
+        *out_inter_sel = adios_selection_intersect_local(datablock->bounds, output_sel, datablock->timestep, raw_varinfo, transinfo);
+        may_have_intersection = (*out_inter_sel ? 1 : 0);
+    }
+
+    // Allocate the output buffer if needed (inter_sel is populated by previous if statement)
+    if (!*output_buffer) {
+    	const uint64_t chunk_buffer_size = compute_selection_size_in_bytes(*out_inter_sel, datablock->elem_type, datablock->timestep, raw_varinfo, transinfo);
+		*output_buffer = malloc(chunk_buffer_size);
+
+		// Refitting the output selection to the intersection region, since we
+		// just allocated a buffer for that smaller region
+		output_sel = *out_inter_sel;
+    }
+
+	// Invoke adios_patch_data_to_local to perform the actual patching
+	const uint64_t used_count =
+			adios_patch_data_to_local(
+				*output_buffer, (uint64_t)0, output_sel,
+				datablock->data, datablock->ragged_offset, datablock->bounds,
+				&vb_bounds_sel->u.bb,
+				datablock->elem_type, swap_endianness);
+
+	// Clean up
+	common_read_selection_delete((ADIOS_SELECTION *)vb_bounds_sel);
+	return used_count;
+}
+
+// Note: assumes one or more of datablock->bounds or output_sel is local
+static uint64_t apply_datablock_to_buffer_nonlocal_selections(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		adios_datablock *datablock,
+        void **output_buffer, const ADIOS_SELECTION *output_sel,
+        ADIOS_SELECTION **out_inter_sel, int want_out_inter_sel,
+        enum ADIOS_FLAG swap_endianness)
+{
+	int may_have_intersection = 1;
+	uint64_t used_count = 0;
+
+	const ADIOS_SELECTION *global_output_buffer_sel = output_sel;
+	const ADIOS_SELECTION *global_datablock_bounds = datablock->bounds;
+
+	// Promote output buffer selection and/or datablock selection to global if needed
+	if (!is_global_selection(global_output_buffer_sel))
+		global_output_buffer_sel = create_writeblock_bounds(&global_output_buffer_sel->u.block, datablock->timestep, raw_varinfo, transinfo);
+	if (!is_global_selection(global_datablock_bounds))
+		global_datablock_bounds = create_writeblock_bounds(&global_datablock_bounds->u.block, datablock->timestep, raw_varinfo, transinfo);
+
+    // Compute the intersection explicitly if it is requested, or
+    // if we need to allocate a fitting output buffer
+    if (want_out_inter_sel || !*output_buffer) {
+    	*out_inter_sel = adios_selection_intersect_global(global_datablock_bounds, global_output_buffer_sel);
+    	may_have_intersection = (*out_inter_sel ? 1 : 0);
+    }
+
+    // We can stop immediately if it is known there is no intersection
+    if (may_have_intersection) {
+    	// Allocate the output buffer if needed (inter_sel is populated by previous if statement)
+    	if (!*output_buffer) {
+    		const uint64_t chunk_buffer_size = compute_selection_size_in_bytes(*out_inter_sel, datablock->elem_type, datablock->timestep, raw_varinfo, transinfo);
+    		*output_buffer = malloc(chunk_buffer_size);
+
+    		// Refitting the output selection to the intersection region, since we
+    		// just allocated a buffer for that smaller region
+    		if (global_output_buffer_sel != output_sel)
+    			common_read_selection_delete((ADIOS_SELECTION *)global_output_buffer_sel);
+    		output_sel = *out_inter_sel;
+    		global_output_buffer_sel = *out_inter_sel;
+    	}
+
+    	// Perform the actual data patching, now that everything is in the global space
+    	used_count = adios_patch_data_to_global(
+    			*output_buffer, (uint64_t)0, global_output_buffer_sel,
+    			datablock->data, datablock->ragged_offset, global_datablock_bounds,
+    			datablock->elem_type, swap_endianness);
+    }
+
+	// Clean up
+	if (global_output_buffer_sel != output_sel)
+		common_read_selection_delete((ADIOS_SELECTION *)global_output_buffer_sel);
+	if (global_datablock_bounds != datablock->bounds)
+		common_read_selection_delete((ADIOS_SELECTION *)global_datablock_bounds);
+
+	return used_count;
+}
+
+/*
+ * Takes a datablock and applies its data to a given output buffer (described
+ * by a given output buffer selection), then frees the given datablock.
+ *
+ * If *output_buffer is non-NULL, copies the pertinent data from datablock->data
+ * into *output_buffer, assuming *output_buffer is shaped like output_sel.
+ *
+ * If *output_buffer is NULL, allocates a minimum-size buffer to contain the
+ * data for the *intersection* of datablock->bounds and output_sel and returns
+ * it via *output_buffer.
+ *
+ * If out_inter_sel != NULL, returns a selection representing the intersection
+ * of datablock->bounds and output_sel (i.e., the portion of data that was
+ * actually copied) via *out_inter_sel. Otherwise, leaves this argument untouched.
+ *
+ * This function can handle any combination of datablock bounding selection and
+ * output buffer bounding selection:
+ * - If both datablock and buffer selections are global (BB, points), performs
+ *   a straightforward data patching based on the geometry
+ * - If both datablock and buffer selections are local (writeblock), performs
+ *   a straghtforward memcpy as appropriate
+ * - If the buffer is global but the datablock is local, promotes the datablock
+ *   to a bounding box using blockinfo (note: the variable is guaranteed to be
+ *   a global array in this case because the user supplied a global selection)
+ * - If the buffer is local but the datablock is global, promotes the buffer
+ *   to a bounding box using blockinfo (note: the variable may or may not be
+ *   a global array in this case; however, even if it is not, both the datablock
+ *   and the buffer will be constructed relative to (0,0,...,0), so it will do
+ *   the right thing).
+ *
+ * @return the number of elements patched into the output buffer (0 indicates
+ *         no data in the given datablock was pertinent to the given output
+ *         buffer selection)
+ */
+static uint64_t apply_datablock_to_buffer_and_free(
+		const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO *transinfo,
+		adios_datablock *datablock,
+        void **output_buffer, const ADIOS_SELECTION *output_sel, ADIOS_SELECTION **out_inter_sel, enum ADIOS_FLAG swap_endianness)
+{
+    uint64_t used_count = 0;
+    ADIOS_SELECTION *inter_sel = NULL;
+    assert(raw_varinfo && transinfo && datablock && output_buffer && output_sel);
+
+    // Check preconditions
+    if (datablock->bounds->type != ADIOS_SELECTION_BOUNDINGBOX &&
+    	datablock->bounds->type != ADIOS_SELECTION_POINTS &&
+    	datablock->bounds->type != ADIOS_SELECTION_WRITEBLOCK)
+    {
+        adios_error(err_operation_not_supported,
+                    "Only results of bounding box, points, or writeblock selection types "
+                    "are currently accepted from transform plugins (received selection type %d)\n",
+                    datablock->bounds->type);
+        return 0;
+    }
+    if (output_sel->type != ADIOS_SELECTION_BOUNDINGBOX &&
+    	output_sel->type != ADIOS_SELECTION_POINTS &&
+    	output_sel->type != ADIOS_SELECTION_WRITEBLOCK)
+    {
+        adios_error_at_line(err_operation_not_supported, __FILE__, __LINE__,
+                            "Internal error: only bounding box, points, or writeblock selection types "
+                            "are currently supported in apply_datablock_to_buffer_and_free (received selection type %d)\n",
+                            datablock->bounds->type);
+        return 0;
+    }
+
+    // Invoke the appropriate helper function depending
+    // on whether at least one of datablock->bounds or
+    // output_sel is global
+    if (!is_global_selection(datablock->bounds) && !is_global_selection(output_sel)) {
+    	used_count = apply_datablock_to_buffer_local_selections(
+    			raw_varinfo, transinfo,
+    			datablock, output_buffer, output_sel,
+    			&inter_sel, (out_inter_sel ? 1 : 0),
+    			swap_endianness);
+    } else {
+    	used_count = apply_datablock_to_buffer_nonlocal_selections(
+    			raw_varinfo, transinfo,
+    			datablock, output_buffer, output_sel,
+    			&inter_sel, (out_inter_sel ? 1 : 0),
+    			swap_endianness);
+    }
+
+    // Clean up the returned intersection if it is not wanted by the caller
+	if (inter_sel) {
+		if (out_inter_sel) {
+			*out_inter_sel = inter_sel;
+		} else {
+			// TODO: Deep delete the selection (delete points list, start/count arrays, etc.)
+			common_read_selection_delete(inter_sel);
+		}
+	}
+
+    // Free the datablock
+    adios_datablock_free(&datablock, 1);
+    return used_count;
+}
+
 /*
  * 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
@@ -313,34 +611,51 @@ static adios_datablock * finish_subreq(
  *         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) {
+                                              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);
+    void *output_buffer;
+    if (is_global_selection(reqgroup->orig_sel)) {
+    	// All timestep results have the same size in bytes, so offset the
+    	// output pointer by however many timesteps precede this timestep
+    	const int timestep_within_request = datablock->timestep - reqgroup->from_steps;
+		output_buffer = (char*)reqgroup->orig_data + timestep_within_request * reqgroup->orig_sel_timestep_size;
+    } else if (reqgroup->orig_sel->type == ADIOS_SELECTION_WRITEBLOCK) {
+    	// For writeblock selections, computing the output buffer position for
+    	// the current timestep is a bit trickier, since varblocks may be
+    	// different sizes in different timesteps
+    	const ADIOS_SELECTION_WRITEBLOCK_STRUCT *orig_sel_wb = &reqgroup->orig_sel->u.block;
+
+    	// Compute the offset into the output buffer at which the current timestep's output should go
+    	// For absolute writeblocks, it's always 0, since there is only 1 timestep involved. For
+    	// timestep-relative writeblock selections, we add the size of the writeblock (i.e. varblock)
+    	// for all previous timesteps in the user's read request.
+    	uint64_t output_buffer_offset = 0;
+    	if (!orig_sel_wb->is_absolute_index) {
+    		int timestep;
+    		for (timestep = reqgroup->from_steps; timestep < datablock->timestep; timestep++) {
+        		// Compute the size of the writeblock at this timestep and add it to our offset
+        		output_buffer_offset += compute_selection_size_in_bytes(reqgroup->orig_sel, reqgroup->transinfo->orig_type, timestep, reqgroup->raw_varinfo, reqgroup->transinfo);
+        	}
+    	}
+
+    	// Offset the output pointer by the computed amount
+    	output_buffer = (char*)reqgroup->orig_data + output_buffer_offset;
+    } else {
+    	adios_error_at_line(err_unspecified, __FILE__, __LINE__, "Internal error: unexpected selection type %d, this should not be possible here\n", reqgroup->orig_sel->type);
     }
 
-    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;
+    // Now that we have the output buffer pointer, actually perform the patch operation
+    const uint64_t used_count =
+            apply_datablock_to_buffer_and_free(
+                    reqgroup->raw_varinfo, reqgroup->transinfo,
+                    datablock,
+                    &output_buffer, reqgroup->orig_sel, NULL /* don't need the intersection */,
+                    reqgroup->swap_endianness);
 
-#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 used_count != 0;
 }
 
@@ -349,44 +664,95 @@ static int apply_datablock_to_result_and_free(adios_datablock *datablock,
  * 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 chunk_buffer_size;
+static ADIOS_VARCHUNK * apply_datablock_to_chunk_and_free(adios_datablock *datablock, adios_transform_read_request *reqgroup) {
     ADIOS_SELECTION *inter_sel;
 
-    assert(result); assert(reqgroup);
+    assert(datablock); 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);
+    if (reqgroup->orig_sel->type != ADIOS_SELECTION_BOUNDINGBOX &&
+    	reqgroup->orig_sel->type != ADIOS_SELECTION_POINTS &&
+    	reqgroup->orig_sel->type != ADIOS_SELECTION_WRITEBLOCK)
+    {
+    	adios_error(err_operation_not_supported,
+                    "Only read selections of bounding box, points, or writeblock selection types "
+                    "are currently allowed (received selection type %d) "
+    			    "(NOTE: this should have been caught earlier in the code)\n",
+                    reqgroup->orig_sel->type);
+    }
 
-        // Populate the chunk struct
-        chunk->varid = reqgroup->raw_varinfo->varid;
-        chunk->type = result->elem_type;
+    if (datablock->bounds->type != ADIOS_SELECTION_BOUNDINGBOX &&
+    	datablock->bounds->type != ADIOS_SELECTION_POINTS &&
+    	datablock->bounds->type != ADIOS_SELECTION_WRITEBLOCK)
+    {
+        adios_error(err_operation_not_supported,
+                    "Only results of bounding box, points, or writeblock selection types "
+                    "are currently accepted from transform plugins (received selection type %d)\n",
+                    datablock->bounds->type);
+        abort();
+    }
 
-        common_read_selection_delete(inter_sel);
+    // Special check due to limitations of ADIOS_VARCHUNK return:
+    // If the output is a writeblock selection, AND the input is not, AND
+    // the variable is a local array, AND we are required to return a chunk
+    // at a time, we must warn the user about potentially unexpected output.
+    // Because our results would necessarily be a global-selection-based chunk
+    // (subvolume, etc.), which has no information about what PG it came from,
+    // if the user submitted multiple writeblock selections over a local array
+    // variable at once, there would be no way to determine which writeblock
+    // a varchunk with a bounding box selection corresponds to.
+    //
+    // Potential solutions are: submit only one writeblock per schedule/check/perform
+    // cycle, use blocking reads, use a global array file, or use a different data
+    // transform.
+    if (reqgroup->orig_sel->type == ADIOS_SELECTION_WRITEBLOCK &&
+    	datablock->bounds->type != ADIOS_SELECTION_WRITEBLOCK &&
+    	!reqgroup->transinfo->orig_global &&
+    	adios_transform_read_request_get_mode(reqgroup) == PARTIAL_RESULT_MODE)
+    {
+    	static int warning_printed = 0;
+    	if (!warning_printed) {
+    		const char *transform_name = adios_transform_plugin_primary_xml_alias(reqgroup->transinfo->transform_type);
+    		if (!transform_name) transform_name = "<name unknown>";
+    		log_warn("Results for a chunked read using a writeblock selection over a %s-transformed "
+    				"variable will return correct results, but in the form of ADIOS_VARCHUNKs with "
+    				"non-writeblock selections, so it may be difficult to determine which VARCHUNK "
+    				"goes with which writeblock selection if multiple have been submitted at once. "
+    				"To avoid this warning, either use blocking reads, use a global array file, or "
+    				"select a use data transform. This warning will only be printed once per run.",
+    				transform_name);
+    		warning_printed = 1;
+    	}
+    	return NULL;
     }
 
-    adios_datablock_free(&result, 1); // 1 == free the datablock's buffer, as well
-    return chunk;
+    ADIOS_SELECTION *chunk_sel = NULL;
+    void *chunk_data = NULL;
+    uint64_t used_count =
+    	apply_datablock_to_buffer_and_free(
+			reqgroup->raw_varinfo, reqgroup->transinfo,
+			datablock,
+			&chunk_data, reqgroup->orig_sel, &chunk_sel, // chunk_data == NULL -> allocate fitted buffer, chunk_sel == NULL -> return intersection selection
+			reqgroup->swap_endianness);
+
+    if (used_count) {
+    	assert(chunk_data && chunk_sel);
+
+        // Bind the output buffer to the chunk struct
+    	ADIOS_VARCHUNK *chunk = (ADIOS_VARCHUNK *)malloc(sizeof(ADIOS_VARCHUNK));
+        *chunk = (ADIOS_VARCHUNK) {
+        	.varid = reqgroup->raw_varinfo->varid,
+        	.data = chunk_data,
+        	.type = datablock->elem_type,
+        	.sel = chunk_sel,
+        	.from_steps = datablock->timestep,
+        	.nsteps = 1,
+        };
+
+        return chunk;
+    } else {
+    	return NULL;
+    }
 }
 
 static ADIOS_VARCHUNK * extract_chunk_from_finished_read_reqgroup(adios_transform_read_request *reqgroup) {
@@ -396,26 +762,45 @@ static ADIOS_VARCHUNK * extract_chunk_from_finished_read_reqgroup(adios_transfor
     ADIOS_VARCHUNK *chunk = malloc(sizeof(ADIOS_VARCHUNK));
     chunk->varid = reqgroup->raw_varinfo->varid;
     chunk->type = reqgroup->transinfo->orig_type;
+    chunk->from_steps = reqgroup->from_steps;
+    chunk->nsteps = reqgroup->nsteps;
 
     // 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
+    chunk->sel = copy_selection(reqgroup->orig_sel);
     reqgroup->orig_sel = NULL;
 
     return chunk;
 }
 
+void adios_transform_cleanup_from_previous_check_reads(adios_transform_read_request **readreqs_head) {
+	adios_transform_read_request *readreq = *readreqs_head;
+	while (readreq) {
+		adios_transform_read_request *next_readreq = readreq->next;
+
+		if (readreq->completed) {
+			// If the read request is totally completed, free the whole thing
+			adios_transform_read_request_remove(readreqs_head, readreq);
+			adios_transform_read_request_free(&readreq);
+		} else if (readreq->lent_varchunk_data) {
+			// Otherwise, free any internal data buffer that was previously given
+			// to the user via an ADIOS_VARCHUNK, but which now may be freed since
+			// the user has called adios_check_reads again
+			FREE(readreq->lent_varchunk_data);
+		}
+
+		readreq = next_readreq;
+	}
+}
+
 // 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;
@@ -432,17 +817,14 @@ void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups
     // 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)
+    // Consume the chunk, as the data will be proceessed by a transform method to
+    // produce a new varchunk, so this varchunk should not be processed by the caller.
+    // (NOTE: Freeing this does not free the memory it points to, which we ASSUME
+    //  is also pointed to by subreq->data, since currently we REQUIRE transform
+    //  plugins to supply their own data buffers when submitting read requests)
     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);
@@ -461,7 +843,10 @@ void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups
             // Apply this VARCHUNK
             *chunk = apply_datablock_to_chunk_and_free(result, reqgroup);
 
-            reqgroup->lent_varchunk = *chunk;
+            // (*chunk)->data points to a buffer allocated by the transform plugin, and which
+            // is now given to us to own. Record it here so we can free it once the user is done
+            // accessing it (i.e., at the next check_reads or on file close).
+            reqgroup->lent_varchunk_data = (*chunk)->data;
             break;
         case FULL_RESULT_MODE:
             apply_datablock_to_result_and_free(result, reqgroup);
@@ -478,15 +863,6 @@ void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups
     } 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
 }
 
 /*
@@ -495,9 +871,6 @@ void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups
  * (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;
@@ -524,71 +897,26 @@ void adios_transform_process_all_reads(adios_transform_read_request **reqgroups_
                 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
index b2ccb94..e81b539 100644
--- a/src/core/transforms/adios_transforms_read.h
+++ b/src/core/transforms/adios_transforms_read.h
@@ -11,9 +11,9 @@
 #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"
+#include "core/adios_subvolume.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
 
 //
 // Read request inspection
diff --git a/src/core/transforms/adios_transforms_reqgroup.c b/src/core/transforms/adios_transforms_reqgroup.c
index 6c4acb9..889e21d 100644
--- a/src/core/transforms/adios_transforms_reqgroup.c
+++ b/src/core/transforms/adios_transforms_reqgroup.c
@@ -163,10 +163,10 @@ adios_transform_raw_read_request * adios_transform_raw_read_request_new_byte_seg
     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);
+    sel = common_read_selection_writeblock(pg_reqgroup->blockidx);
 
     wb = &sel->u.block;
-    wb->is_absolute_index = 0;
+    wb->is_absolute_index = 1;
     wb->is_sub_pg_selection = 1;
     wb->element_offset = start; // Assume element type of the raw variable is byte
     wb->nelements = count;
@@ -200,7 +200,7 @@ adios_transform_raw_read_request * adios_transform_raw_read_request_new_byte_seg
 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);
+    ADIOS_SELECTION *sel = common_read_selection_writeblock(pg_reqgroup->blockidx);
     sel->u.block.is_absolute_index = 1;
     return adios_transform_raw_read_request_new(sel, data);
 #else
@@ -256,7 +256,9 @@ adios_transform_pg_read_request * adios_transform_pg_read_request_new(
         const ADIOS_VARBLOCK *orig_varblock,
         const ADIOS_VARBLOCK *raw_varblock,
         const ADIOS_SELECTION *pg_intersection_sel,
-        const ADIOS_SELECTION *pg_bounds_sel) {
+        const ADIOS_SELECTION *pg_bounds_sel,
+        const void *transform_metadata,
+        uint16_t transform_metadata_len) {
 
     adios_transform_pg_read_request *new_pg_reqgroup;
 
@@ -266,7 +268,7 @@ adios_transform_pg_read_request * adios_transform_pg_read_request_new(
     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->blockidx = 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;
@@ -274,6 +276,13 @@ adios_transform_pg_read_request * adios_transform_pg_read_request_new(
     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;
+    new_pg_reqgroup->transform_metadata = transform_metadata;
+    new_pg_reqgroup->transform_metadata_len = transform_metadata_len;
+
+    ADIOS_SELECTION *wbsel = common_read_selection_writeblock(blockidx);
+    wbsel->u.block.is_absolute_index = 1;
+    new_pg_reqgroup->pg_writeblock_sel = wbsel;
+
     // Other fields are 0'd
 
     return new_pg_reqgroup;
@@ -316,6 +325,8 @@ void adios_transform_pg_read_request_free(adios_transform_pg_read_request **pg_r
         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);
+    if (pg_reqgroup->pg_writeblock_sel)
+    	common_read_selection_delete((ADIOS_SELECTION*)pg_reqgroup->pg_writeblock_sel);
     MYFREE(pg_reqgroup->transform_internal);
 
     // Clear all data to 0's for safety
@@ -350,8 +361,12 @@ adios_transform_read_request * adios_transform_read_request_new(
     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);
+    // orig_sel_timestep_size is not meaningful for a writeblock selection, since a
+    // writeblock selection may "change size" depending on which timestep is considered
+    if (sel->type != ADIOS_SELECTION_WRITEBLOCK) {
+		new_reqgroup->orig_sel_timestep_size = compute_selection_size(sel) *
+											   common_read_type_size(transinfo->orig_type, NULL);
+    }
 
     // Other fields are 0'd
 
@@ -412,13 +427,15 @@ void adios_transform_read_request_free(adios_transform_read_request **reqgroup_p
 
     // 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);
+    if (reqgroup->lent_varchunk_data)
+        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
+
+    // DON'T FREE varinfo/transinfo, since they are stored in the infocache
+    // 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
diff --git a/src/core/transforms/adios_transforms_reqgroup.h b/src/core/transforms/adios_transforms_reqgroup.h
index cbf060a..9ddf694 100644
--- a/src/core/transforms/adios_transforms_reqgroup.h
+++ b/src/core/transforms/adios_transforms_reqgroup.h
@@ -9,10 +9,10 @@
 #define ADIOS_TRANSFORMS_REQGROUP_H_
 
 #include <stdint.h>
+#include "public/adios_read_v2.h"
+#include "public/adios_types.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:
@@ -40,16 +40,19 @@ typedef struct _adios_transform_pg_read_request {
     // 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
+    int blockidx;                        // 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
+    const void *transform_metadata;      // Transform metadata associated with this PG
+    uint16_t transform_metadata_len;     // Length of the transform metadata associated with this PG
 
     // Various selections to aid in datablock construction
     const ADIOS_SELECTION *pg_intersection_sel;
     const ADIOS_SELECTION *pg_bounds_sel;
+    const ADIOS_SELECTION *pg_writeblock_sel;
 
     // Subrequests
     int num_subreqs;
@@ -65,8 +68,10 @@ typedef struct _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.
+    ADIOS_VARCHUNK *lent_varchunk_data; // The data buffer of the last ADIOS_VARCHUNK passed to the user.
+                                        // The user is responsible for cleaning up the VARCHUNK itself, but
+                                        // we must free this buffer ourselves each time a new check_reads is
+                                        // called (or the file is closed)
 
     const ADIOS_FILE        *fp;
 
@@ -119,7 +124,9 @@ adios_transform_pg_read_request * adios_transform_pg_read_request_new(int timest
                                                                       const ADIOS_VARBLOCK *orig_varblock,
                                                                       const ADIOS_VARBLOCK *raw_varblock,
                                                                       const ADIOS_SELECTION *pg_intersection_sel,
-                                                                      const ADIOS_SELECTION *pg_bounds_sel);
+                                                                      const ADIOS_SELECTION *pg_bounds_sel,
+                                                                      const void *transform_metadata,
+                                                                      uint16_t transform_metadata_len);
 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);
diff --git a/src/core/transforms/adios_transforms_specparse.c b/src/core/transforms/adios_transforms_specparse.c
index 6d6b213..da2bf8c 100644
--- a/src/core/transforms/adios_transforms_specparse.c
+++ b/src/core/transforms/adios_transforms_specparse.c
@@ -11,6 +11,7 @@
 #include <assert.h>
 #include "core/transforms/adios_transforms_specparse.h"
 #include "core/transforms/adios_transforms_hooks.h"
+#include "core/util.h"
 
 inline static char * strsplit(char *input, char split) {
     char *pos = strchr(input, split);
@@ -31,10 +32,10 @@ inline static int strcount(char *input, char chr) {
 }
 
 // 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)
+#define MALLOC_ARRAY(var, type, count) ((var) = (type *)malloc(sizeof(type) * (count)))
+#define MALLOC_VAR(var, type) MALLOC_ARRAY(var, type, 1)
+#define CALLOC_ARRAY(var, type, count) ((var) = (type *)calloc((count), sizeof(type)))
+#define CALLOC_VAR(var, type) CALLOC_ARRAY(var, type, 1)
 
 //struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str) {
 struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str, 
@@ -42,13 +43,15 @@ 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 = spec_in;
-    if (!spec_in) {
-        MALLOC_VAR(spec);
+    if (spec) {
+    	adios_transform_clear_spec(spec);
+    } else {
+        MALLOC_VAR(spec, struct adios_transform_spec);
     }
 
     *spec = (struct adios_transform_spec){
         .transform_type = adios_transform_none,
-        .transform_type_str = "",
+        .transform_type_str = NULL,
         .param_count = 0,
         .params = NULL,
         .backing_str = NULL,
@@ -87,7 +90,7 @@ struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str,
     assert(param_list);
 
     spec->param_count = strcount(param_list, ',') + 1;
-    MALLOC_ARRAY(spec->params, spec->param_count);
+    MALLOC_ARRAY(spec->params, struct adios_transform_spec_kv_pair, spec->param_count);
     //spec->params = (typeof(spec->params))malloc(sizeof(*spec->params));
 
     struct adios_transform_spec_kv_pair *cur_kv = spec->params;
@@ -105,60 +108,81 @@ struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str,
     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;
+void adios_transform_spec_copy(struct adios_transform_spec *dst, const struct adios_transform_spec *src) {
+	// First, free any previously-held memory in the dst struct
+	adios_transform_clear_spec(dst);
+
+	// Copy some non-pointer fields
+	dst->transform_type = src->transform_type;
+	dst->backing_str_len = src->backing_str_len;
+
+	// If there is a "backing string" field, copy it according to its recorded length
+	// (note: strlen/strcpy won't work, as it probably contains \0s in the middle)
+	dst->backing_str = src->backing_str ? (char*)bufdup(src->backing_str, 1, src->backing_str_len + 1) : NULL;
+
+	// REBASE_STR: return a pointer into dst->backing_str with the same offset as the old pointer had into src->backing_str
+	#define REBASE_STR(str) ((str) - src->backing_str + dst->backing_str)
+	// REBASE_OR_DUP: if src->backing_str exists, return a REBASE_STR pointer; otherwise, duplicate the string and return that
+	#define REBASE_OR_DUP(str) ((src->backing_str) ? REBASE_STR(str) : strdup(str))
+	// REBASE_OR_DUP_OR_NULL: if str is non-NULL, same as REBASE_OR_DUP(str); otherwise, returns NULL
+	#define REBASE_OR_DUP_OR_NULL(str) ((str) ? REBASE_OR_DUP(str) : NULL)
+
+	// Copy the content of transform_type_str (either pointer-into-backing-str, a
+	// duplicated string when no backing string exists, or NULL if it was NULL)
+	dst->transform_type_str = REBASE_OR_DUP_OR_NULL(src->transform_type_str);
+
+	// Copy transform user parameters if they exist
+	if (src->params) {
+        int i;
+
+        // Initialize the key-value pair array
+        dst->param_count = src->param_count;
+        MALLOC_ARRAY(dst->params, struct adios_transform_spec_kv_pair, dst->param_count);
+
+        // Copy each key-value pair
+        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];
+
+            // Copy the key and/or value content
+            dst_kv->key = REBASE_OR_DUP_OR_NULL(src_kv->key);
+            dst_kv->value = REBASE_OR_DUP_OR_NULL(src_kv->value);
         }
+	} else {
+		dst->params = NULL;
+	}
+
+#undef REBASE_STR
+#undef REBASE_OR_DUP
+#undef REBASE_OR_DUP_OR_NULL
+
+}
+
+#define FREE(x) {if(x)free((void*)(x));(x)=NULL;}
+void adios_transform_clear_spec(struct adios_transform_spec *spec) {
+	spec->transform_type = adios_transform_none;
+
+	if (!spec->backing_str) {
+    	int i;
+    	FREE(spec->transform_type_str);
+    	for (i = 0; i < spec->param_count; ++i) {
+    		struct adios_transform_spec_kv_pair *kv = &spec->params[i];
+    		FREE(kv->key);
+    		FREE(kv->value);
+    	}
     } else {
-        dst->backing_str = NULL;
+    	spec->transform_type_str = NULL;
     }
+    spec->param_count = 0;
+    FREE(spec->params);
 
-    return dst;
+    spec->backing_str_len = 0;
+    FREE(spec->backing_str);
 }
 
-#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);
+    adios_transform_clear_spec(spec);
     FREE(*spec_ptr)
 }
 #undef FREE
diff --git a/src/core/transforms/adios_transforms_specparse.h b/src/core/transforms/adios_transforms_specparse.h
index e983afa..f5dc64c 100644
--- a/src/core/transforms/adios_transforms_specparse.h
+++ b/src/core/transforms/adios_transforms_specparse.h
@@ -38,10 +38,19 @@ struct adios_transform_spec * adios_transform_parse_spec(const char *transform_s
                                                          struct adios_transform_spec *spec_in);
 
 /*
- * Copies a transform spec struct, creating a new, independent instance
- * with the same contents.
+ * Copies a source transform spec struct into an already-allocated
+ * dest transform spec struct, freeing any buffers previously
+ * held by the dest struct. After this call, src and dst have the same
+ * content (though all pointers are independent).
  */
-struct adios_transform_spec * adios_transform_spec_copy(struct adios_transform_spec *src);
+void adios_transform_spec_copy(struct adios_transform_spec *dst, const struct adios_transform_spec *src);
+
+/*
+ * Frees all memory held by a adios_transform_spec struct and zeros all fields,
+ * but does not free the struct itself.
+ * @param spec the transform spec to free
+ */
+void adios_transform_clear_spec(struct adios_transform_spec *spec);
 
 /*
  * Frees an adios_transform_spec struct.
diff --git a/src/core/transforms/adios_transforms_transinfo.h b/src/core/transforms/adios_transforms_transinfo.h
index 1ae9a7a..4c8467a 100644
--- a/src/core/transforms/adios_transforms_transinfo.h
+++ b/src/core/transforms/adios_transforms_transinfo.h
@@ -1,17 +1,20 @@
 /*
- *  Created on: Jul 23, 2012
+ * adios_transforms_transinfo.h
+ *
+ *  Created on: Apr 29, 2014
  *      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"
+#include <stdint.h>
+
+#include <public/adios_read_v2.h> // Internally, always use V2 structs
+#include <public/adios_read_ext.h>
 
 // NCSU ALACRITY-ADIOS - struct for original metadata
 typedef struct {
-    enum ADIOS_TRANSFORM_TYPE transform_type;
+    int transform_type; // type actually "enum ADIOS_TRANSFORM_TYPE", but this type is not accessible outside ADIOS internals
 
     uint16_t transform_metadata_len;
     void *transform_metadata;
@@ -25,6 +28,8 @@ typedef struct {
     int orig_global;
 
     ADIOS_VARBLOCK *orig_blockinfo;
+
+    ADIOS_TRANSFORM_METADATA *transform_metadatas;
 } 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
index c1a09bd..cc540f7 100644
--- a/src/core/transforms/adios_transforms_util.c
+++ b/src/core/transforms/adios_transforms_util.c
@@ -6,7 +6,7 @@
 
 #include "adios_transforms_common.h"
 #include "adios_transforms_util.h"
-#include "adios_internals.h"
+#include "core/adios_internals.h"
 
 static int buffer_reserve(char ** buffer, uint64_t * buffer_size
                          ,uint64_t * buffer_offset
diff --git a/src/core/transforms/adios_transforms_write.c b/src/core/transforms/adios_transforms_write.c
index dc8853e..afc285b 100644
--- a/src/core/transforms/adios_transforms_write.c
+++ b/src/core/transforms/adios_transforms_write.c
@@ -3,70 +3,84 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <math.h>
 
-#include "adios_bp_v1.h"
-#include "common_adios.h"
-#include "adios_logger.h"
-#include "adios_internals.h"
+#include "core/adios_bp_v1.h"
+#include "core/common_adios.h"
+#include "core/adios_logger.h"
+#include "core/adios_internals.h"
 #include "public/adios_types.h"
-#include "util.h"
+#include "core/util.h"
 
-#include "adios_transforms_hooks_write.h"
-#include "adios_transforms_common.h"
-#include "adios_transforms_write.h"
-#include "adios_transforms_specparse.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_specparse.h"
 
 ////////////////////////////////////////
 // adios_group_size support
 ////////////////////////////////////////
+#define MIN(X, Y) ((X) < (Y) ? (X) : (Y) )
+#define MAX(X, Y) ((X) > (Y) ? (X) : (Y) )
 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;
-
+	uint64_t transformed_group_size = group_size; // The upper bound on how much data /might/ be transformed
     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));
+    // Aggregated scaling information from all transforms
+    // The end result upper bound group size is:
+    // GS' = total_constant_factor + GS' * max_linear_factor + min(GS', max_capped_linear_cap) * max_capped_linear_factor
+    uint64_t total_constant_factor = 0;
+    double max_linear_factor = 1;
+    double max_capped_linear_factor = 0;
+    uint64_t max_capped_linear_cap = 0;
+
+    // Note: the "max capped linear" component is overestimating by combining the highest factor and cap from all transforms
+    // A tighter lower bound could be computed by keeping all capped linear caps/factors and doing some sort of overlap
+    // computation. However, this requires O(n vars) storage and extra logic that isn't worth it, given capped factors are
+    // very rare, and this method gives a tight bound when none are present.
 
-    // 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)
+    	if (!cur_var->dimensions) // Scalar var
         {
-            continue;
+    		// Remove the scalar's size from the group size that can be affected by data transforms, and add it as a constant factor
+    		// Even if it's a string, we don't know the content yet, so use an empty string to get minimum size (we are computing an upper bound)
+    		transformed_group_size -= adios_get_type_size(cur_var->type, "");
+    		total_constant_factor += adios_get_type_size(cur_var->type, "");
         }
-
-        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;
+    	else if (cur_var->transform_type == adios_transform_none) // Non-transformed, non-scalar var
+    	{
+            // Do nothing
         }
+    	else // Transformed var
+    	{
+    	    uint64_t constant_factor = 0;
+    	    double linear_factor = 1;
+    	    double capped_linear_factor = 0;
+    	    uint64_t capped_linear_cap = 0;
+
+    	    // Get the growth factors for this transform method/spec
+    	    adios_transform_transformed_size_growth(cur_var, cur_var->transform_spec, &constant_factor, &linear_factor, &capped_linear_factor, &capped_linear_cap);
+
+    	    // Combine these growth factors into the maximums for computing the worst case
+    	    total_constant_factor += constant_factor;
+    	    max_linear_factor = MAX(max_linear_factor, linear_factor);
+    	    max_capped_linear_factor = MAX(max_capped_linear_factor, capped_linear_factor);
+    	    max_capped_linear_cap = MAX(max_capped_linear_cap, capped_linear_cap);
+    	}
     }
 
-    // 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;
+    const uint64_t max_transformed_group_size =
+    		total_constant_factor +
+    		ceil(max_linear_factor * transformed_group_size) +
+    		ceil(max_capped_linear_factor * MIN(transformed_group_size, max_capped_linear_cap));
+
+    // Return the maximum worst case for the group size
+    // (which can never be less than the starting group size)
+    return MAX(group_size, max_transformed_group_size);
 }
+#undef MAX
 
 ////////////////////////////////////////
 // Variable conversion to byte array (preparation for transform)
@@ -287,14 +301,15 @@ static int is_timed_scalar(const struct adios_var_struct *var) {
 
 /*
  * 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
+ * orig_var->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_var_struct *orig_var,
-                                                     struct adios_transform_spec *transform_spec) {
+struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *orig_var) {
     // First detect error conditions that prevent the transform from being applied
 
+	struct adios_transform_spec *transform_spec = orig_var->transform_spec;
     if (!transform_spec) return orig_var;
+
     // 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))) {
@@ -302,7 +317,6 @@ struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *or
                  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;
     }
@@ -313,7 +327,6 @@ struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *or
 
     // 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)
@@ -352,56 +365,6 @@ uint64_t adios_transform_get_pre_transform_var_size(struct adios_var_struct *var
                                           var->pre_transform_dimensions);
 }
 
-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
-#if 0
-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;
-}
-#endif
-
 /*
  * Stores the given transformed data length (number of bytes) into the appropriate place
  * in the dimensions array (the non-time local dimension).
@@ -513,7 +476,7 @@ static void buffer_write (char ** buffer, uint64_t * buffer_size
 // Init
 int adios_transform_init_transform_var(struct adios_var_struct *var) {
     var->transform_type = adios_transform_none;
-    var->transform_spec = adios_transform_parse_spec ("none", NULL);
+    var->transform_spec = adios_transform_parse_spec("none", NULL);
     var->pre_transform_dimensions = 0;
     var->pre_transform_type = adios_unknown;
     //var->transform_type_param_len = 0;
@@ -734,8 +697,12 @@ int adios_transform_copy_transform_characteristic(struct adios_index_characteris
 }
 
 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);
+	adios_transform_init_transform_var(dst_var);
+	// Clean out the "none" transform spec added in adios_transform_init_transform_var
+	if (dst_var->transform_spec)
+    	adios_transform_free_spec(&dst_var->transform_spec);
 
+	// Copy simple fields
     dst_var->transform_type = src_var->transform_type;
     dst_var->pre_transform_type = src_var->pre_transform_type;
 
@@ -743,13 +710,15 @@ int adios_transform_copy_var_transform(struct adios_var_struct *dst_var, const s
     // 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);
+    // Copy transform spec structure
+    if (!dst_var->transform_spec)
+    	dst_var->transform_spec = adios_transform_parse_spec("none", NULL);
+    adios_transform_spec_copy(dst_var->transform_spec, src_var->transform_spec);
 
+    // Copy any transform-specific metadata
     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);
+    if (src_var->transform_metadata_len && src_var->transform_metadata) {
+        dst_var->transform_metadata = bufdup(src_var->transform_metadata, 1, src_var->transform_metadata_len);
     } else {
         dst_var->transform_metadata = 0;
     }
diff --git a/src/core/transforms/adios_transforms_write.h b/src/core/transforms/adios_transforms_write.h
index 96ad624..a947d52 100644
--- a/src/core/transforms/adios_transforms_write.h
+++ b/src/core/transforms/adios_transforms_write.h
@@ -8,9 +8,9 @@
 #ifndef ADIOS_TRANSFORMS_WRITE_H_
 #define ADIOS_TRANSFORMS_WRITE_H_
 
-#include "adios_bp_v1.h"
-#include "adios_internals.h"
-#include "adios_transforms_common.h"
+#include "core/adios_bp_v1.h"
+#include "core/adios_internals.h"
+#include "core/transforms/adios_transforms_common.h"
 
 /*
  * Returns the pre-transform size, in bytes, of a variable. Note: only works on
@@ -25,9 +25,10 @@ uint64_t adios_transform_get_pre_transform_var_size(struct adios_var_struct *var
  * 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.
+ *
+ * Note: the transform to be applied is assumed to be specified in orig_var->transform_spec.
  */
-struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *orig_var,
-                                                     struct adios_transform_spec *transform_spec);
+struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *orig_var);
 
 /*
  * Transforms a given variable orig_var via the given transform type.
diff --git a/src/core/util.c b/src/core/util.c
index 4f8ed54..7b48a9e 100644
--- a/src/core/util.c
+++ b/src/core/util.c
@@ -4,8 +4,9 @@
 #include <limits.h>
 #include <errno.h>
 #include <assert.h>
+#include <ctype.h>
 
-#include "../config.h"
+#include "config.h"
 #include "core/util.h"
 #include "core/bp_utils.h"
 #include "core/adios_endianness.h"
@@ -405,7 +406,7 @@ int unique (uint32_t * nids, int size)
             }
         }
     }
- 
+
     // remove duplicates
     i = 0;
     k = 0;
@@ -436,11 +437,11 @@ int unique (uint32_t * nids, int size)
 uint32_t nid_atoi ()
 {
     int name_len;
-    char * nid_str = malloc (MPI_MAX_PROCESSOR_NAME);
+    char * nid_str, * str_buf = malloc (MPI_MAX_PROCESSOR_NAME);
     uint32_t nid;
 
-    MPI_Get_processor_name (nid_str, &name_len);
-
+    MPI_Get_processor_name (str_buf, &name_len);
+    nid_str = str_buf;
     while (*nid_str != '\0' && (!isdigit (*nid_str) || *nid_str == '0'))
     {
         nid_str++;
@@ -452,28 +453,27 @@ uint32_t nid_atoi ()
     }
 
     nid = atoi (nid_str);
-    free (nid_str);
+    free (str_buf);
 
     return nid;
 }
 
 // This helper routine returns a vector of unique NID's.
-// It is the caller's responsiblity to free 'nids'.
-int get_unique_nids (MPI_Comm comm, uint32_t * nids)
+// It is caller's responsiblity to free nids afterwards.
+int get_unique_nids (MPI_Comm comm, uint32_t ** nids)
 {
     int size;
     uint32_t my_nid;
 
     my_nid = nid_atoi ();
-
     MPI_Comm_size (comm, &size);
-    nids = (uint32_t *) malloc (size * 4);
+    * nids = (uint32_t *) malloc (size * 4);
+    assert (* nids);
 
     MPI_Allgather (&my_nid, 1, MPI_INT,
-                   nids, 1, MPI_INT,
+                   *nids, 1, MPI_INT,
                    comm);
-    
-    return unique (nids, size);
+    return unique (*nids, size);
 }
 
 /*******************************************************
diff --git a/src/public/adios.h b/src/public/adios.h
index c0caadc..2d9957f 100644
--- a/src/public/adios.h
+++ b/src/public/adios.h
@@ -118,6 +118,11 @@ int64_t adios_define_var (int64_t group_id,
                           const char * local_offsets
                          );
 
+// To remove all variable definitions from a group.
+// Use it if you want to have a new set of variables defined
+// for the next output step.
+int adios_delete_vardefs (int64_t id);
+
 // To set the transform method for a variable just defined 
 // var_id is the value returned by adios_define_var
 // returns adios_errno (0=OK)
@@ -130,6 +135,9 @@ int adios_define_attribute (int64_t group,
                             const char * value, 
                             const char * var
                            );
+
+int adios_delete_attrdefs (int64_t id);
+
 /** This function does similar function as adios_write. It is, however, used
  * in the following scenario that
  * 1. numbers, instead of a variable, are used to annotate array dimensions, and
diff --git a/src/public/adios_error.h b/src/public/adios_error.h
index a4a5c55..0a62e8a 100644
--- a/src/public/adios_error.h
+++ b/src/public/adios_error.h
@@ -148,6 +148,11 @@ enum ADIOS_ERRCODES {
     // Transform layer errors
     err_invalid_transform_type                = -300, // unknown transform is requested 
 
+    // Query errors
+    err_unsupported_selection                 = -401, // unsupported selection
+    err_invalid_query_value                   = -402, // value passed in expression is invalid
+    err_incompatible_queries                  = -403, // cannot combine two queries
+
     // Miscellaneous
     err_fgr                                   = -900, // FGR lib error
 
@@ -158,6 +163,7 @@ void adios_error (enum ADIOS_ERRCODES errcode, char *fmt, ...);
 void adios_error_at_line (enum ADIOS_ERRCODES errcode, const char* filename, unsigned int linenum, char *fmt, ...);
 
 const char* adios_get_last_errmsg (void);
+void adios_clear_error(void); // reset adios_errno to err_no_err and clear last errmsg
 
 #ifdef __cplusplus
 }
diff --git a/src/public/adios_query.h b/src/public/adios_query.h
new file mode 100644
index 0000000..c703193
--- /dev/null
+++ b/src/public/adios_query.h
@@ -0,0 +1,147 @@
+#ifndef __ADIOS_QUERY_H__
+#define __ADIOS_QUERY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "adios_read.h"
+
+//#define ADIOS_QUERY_METHOD_COUNT  2
+
+//int gCurrentTimeStep;
+
+enum ADIOS_QUERY_METHOD 
+{
+    ADIOS_QUERY_METHOD_FASTBIT = 0,
+    ADIOS_QUERY_METHOD_ALACRITY = 1,
+    ADIOS_QUERY_METHOD_UNKNOWN = 2,
+    ADIOS_QUERY_METHOD_COUNT = ADIOS_QUERY_METHOD_UNKNOWN
+};
+    
+
+enum ADIOS_PREDICATE_MODE 
+{
+    ADIOS_LT = 0,
+    ADIOS_LTEQ = 1,
+    ADIOS_GT = 2,
+    ADIOS_GTEQ = 3,
+    ADIOS_EQ = 4,
+    ADIOS_NE = 5
+};
+
+enum ADIOS_CLAUSE_OP_MODE 
+{
+    ADIOS_QUERY_OP_AND = 0,
+    ADIOS_QUERY_OP_OR  = 1
+};
+
+typedef struct {
+    char* condition;
+    void* queryInternal;
+
+    // keeping start/count to map 1d results from fastbit to N-d
+
+    ADIOS_SELECTION* sel;
+    void* dataSlice;
+
+    ADIOS_VARINFO* varinfo;
+    char* varName;
+
+    ADIOS_FILE* file;
+    enum ADIOS_QUERY_METHOD method;
+
+    enum ADIOS_PREDICATE_MODE predicateOp;
+    char* predicateValue;
+    uint64_t rawDataSize; // this is the result of dim/start+count
+
+    void* left;
+    void* right;
+    enum ADIOS_CLAUSE_OP_MODE combineOp;
+
+    int onTimeStep; // dataSlice is obtained with this timeStep 
+
+    uint64_t maxResultsDesired;
+    uint64_t resultsReadSoFar;
+
+    int hasParent;
+    int deleteSelectionWhenFreed;
+} ADIOS_QUERY;
+   
+
+#ifndef __INCLUDED_FROM_FORTRAN_API__
+
+/* functions */
+
+int adios_query_is_method_available(enum ADIOS_QUERY_METHOD method);
+
+ADIOS_QUERY* adios_query_create (ADIOS_FILE* f, 
+                                 ADIOS_SELECTION* queryBoundary,
+                                 const char* varName,
+                                 enum ADIOS_PREDICATE_MODE op,
+                                 const char* value); 
+
+
+ADIOS_QUERY* adios_query_combine (ADIOS_QUERY* q1, 
+                                  enum ADIOS_CLAUSE_OP_MODE operator,		    
+                                  ADIOS_QUERY* q2);
+
+/* 
+ *  Select a query method manually for a query evaluation. 
+ *  If not set by the user, a suitable query method is chosen at evaluation
+*/
+void adios_query_set_method (ADIOS_QUERY* q, enum ADIOS_QUERY_METHOD method);
+
+
+/*
+ * Estimate the number of hits of the query at "timestep"
+ * 
+ * 
+ * IN:  q               query
+ *      timestep        timestep of interest
+ *
+ * RETURN:  -1 : error
+ *          >=0: estimated hits
+ *
+ */
+
+int64_t adios_query_estimate (ADIOS_QUERY* q, int timeStep);
+
+// obsolete. time_steps for non-streaming files should show up in estimate/evalute
+//void adios_query_set_timestep (int timeStep);
+
+/*
+ * Evaluate and return result of the query at the "timestep"
+ * result will be limited to "batchSize". May need to call Multiple times
+ * to get all the result.
+ * 
+ * IN:  q               query
+ *      timestep        timestep of interest
+ *	batchSize       max size of results to return of this call
+ *      outputBoundary  query results will be mapped to this selection
+ *	                outputBoundary must match the selections used when construct the query
+ *			if NULL, then will use the first selection used in query
+ * OUT: queryResult     list of points
+ *                      NULL if no result      
+ * RETURN:  -1: error
+ *           1: if more results to follow, keep calling evaluate() to find out
+ *           0: of no more results to fetch 
+ *
+ */
+
+int  adios_query_evaluate (ADIOS_QUERY* q, 
+			   ADIOS_SELECTION* outputBoundary,// must supply to get results
+			   int timestep,
+			   uint64_t batchSize, // limited by maxResult
+			   ADIOS_SELECTION** queryResult);
+
+
+void adios_query_free(ADIOS_QUERY* q);
+
+#endif /* __INCLUDED_FROM_FORTRAN_API__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ADIOS_QUERY_H__ */
diff --git a/src/public/adios_read_ext.h b/src/public/adios_read_ext.h
new file mode 100644
index 0000000..f1cfaaa
--- /dev/null
+++ b/src/public/adios_read_ext.h
@@ -0,0 +1,126 @@
+/*
+ * adios_read_ext.h
+ *
+ *  Created on: Apr 25, 2014
+ *      Author: David A. Boyuka II
+ */
+#ifndef ADIOS_READ_EXT_H_
+#define ADIOS_READ_EXT_H_
+
+#ifdef ADIOS_USE_READ_API_1
+#  error "Extended ADIOS Read API is not available in Read API v1"
+#endif
+
+#include <stdint.h>
+
+#include "adios_read_v2.h"
+#include "adios_selection.h"
+
+// An opaque type defining a particular view of the data.
+// Currently, there are only two possible values: LOGICAL_DATA_VIEW and PHYSICAL_DATA_VIEW
+typedef const void* data_view_t;
+
+// LOGICAL_DATA_VIEW: the default, ADIOS presents the same view of the data as it was written to the
+//   file (e.g., if processes wrote to a 3D global array of doubles, the user API will present a 3D global
+//   array of doubles to the user when in this view mode).
+extern const data_view_t LOGICAL_DATA_VIEW;
+
+// PHYSICAL_DATA_VIEW: ADIOS will present the raw transport layer view of the data. If a variable is not
+//   transformed, its presentation is equivalent to that under LOGICAL_DATA_VIEW. If a variable is
+//   transformed, it will be presented as a 1D byte array, and reads will be answered directly from the
+//   transformed data with out any de-transformation applied.
+extern const data_view_t PHYSICAL_DATA_VIEW;
+
+// An identifier for a particular transform type (e.g., identity, zlib, etc.)
+// constant NO_TRANSFORM indicates the absence of any data transform being applied.
+typedef int adios_transform_type_t;
+
+extern const adios_transform_type_t NO_TRANSFORM;
+
+typedef struct {
+	const void *content;
+	uint64_t length;   // in bytes
+} ADIOS_TRANSFORM_METADATA;
+
+// A transform information structure describing how a particular variable has been transformed
+typedef struct {
+	int varid;       // Copied from ADIOS_VARINFO, since it is needed for some ADIOS_VARTRANSFORM operations
+	int sum_nblocks; // ...
+
+	adios_transform_type_t transform_type; /* The data transform applied to this variable */
+
+	int should_free_transform_metadata; // Used internally for free
+
+	/* An array of transform plugin-specific metadata buffers, one for each
+       varblock in this file (number of varblocks == ADIOS_VARINFO.sum_nblocks).
+	   Only needed by advanced applications requiring direct manipulation
+	   of transformed data. */
+	ADIOS_TRANSFORM_METADATA *transform_metadatas;
+} ADIOS_VARTRANSFORM;
+
+
+
+typedef struct {
+	int timestep;
+	int blockidx;
+	int blockidx_in_timestep;
+	ADIOS_SELECTION *pg_bounds_sel;    // it is a global box (offset/start is global)
+	ADIOS_SELECTION *intersection_sel; // it is a global box (offset/start is global)
+} ADIOS_PG_INTERSECTION ;
+
+
+typedef struct {
+	ADIOS_PG_INTERSECTION * intersections;
+	int npg;
+} ADIOS_PG_INTERSECTIONS;
+
+#ifndef __INCLUDED_FROM_FORTRAN_API__
+
+// Sets the "data view" for this ADIOS file, which determines how ADIOS presents variables through
+// adios_inq_var*, and how reads are evaluated in adios_schedule_reads/adios_check_reads calls.
+// Currently, the choice is between a logical and physical view of the data, which only differ for
+// transformed variables; a logical view of a transformed variable presents the data as it was
+// originally written (this is the default), whereas a physical view presents the transformed data
+// as it actually exists on disk.
+// Returns the previous view that was set
+data_view_t adios_read_set_data_view(ADIOS_FILE *fp, data_view_t vt);
+
+// Populates data transform information about a given variable into an ADIOS_VARTRANSFORM struct
+// Return NULL if failed
+ADIOS_VARTRANSFORM *  adios_inq_var_transform(const ADIOS_FILE *fp, const ADIOS_VARINFO *varinfo);
+
+// Frees an ADIOS_VARTRANSFORM previous received from a call to adios_inq_var_transform
+void adios_free_var_transform(ADIOS_VARTRANSFORM *vartransform);
+
+// Returns the adios_transform_type_t constant for a data transformation method specified
+// by its unique ID, corresponding to the third argument in transforms/transform_plugins.h.
+// For example, to get ISOBAR's type constant:
+//
+// In transforms/transform_plugin.h:
+//   REGISTER_TRANSFORM_PLUGIN(isobar, "isobar", "ncsu-isobar", "ISOBAR compression")
+//                                               ^^^^^^^^^^^^^
+// const adios_transform_type_t ISOBAR_TTYPE = adios_get_transform_type_by_uid("ncsu-isobar");
+//
+adios_transform_type_t adios_get_transform_type_by_uid(const char *transform_uid);
+
+// Creates a writeblock selection that only retrieves elements [start_elem, start_elem + num_elems)
+// within a variable. An element is a single value of whatever the varaible's datatype is (i.e.,
+// 1 element = 1 double if the variable type is double, 1 byte if the variable type is byte, etc.)
+ADIOS_SELECTION * adios_selection_writeblock_bounded(int index, uint64_t start_elem, uint64_t num_elems, int is_timestep_relative);
+
+ADIOS_PG_INTERSECTIONS * adios_find_intersecting_pgs(
+		const ADIOS_FILE *fp, int varid, const ADIOS_SELECTION *sel,
+		const int from_step, const int nsteps);
+
+int adios_get_absolute_writeblock_index(const ADIOS_VARINFO *varinfo, int timestep_relative_idx, int timestep);
+
+void adios_free_pg_intersections(ADIOS_PG_INTERSECTIONS **intersections);
+
+// What is the dimension order of arrays in the file?
+// 0: C ordering (row-major), last dimension is the fastest dimension
+// 1: Fortran ordering (column-major), first dimension is the fastest dimension
+int adios_read_get_dimension_order (ADIOS_FILE *);
+
+#endif  /*__INCLUDED_FROM_FORTRAN_API__*/
+
+#endif /* ADIOS_READ_EXT_H_ */
diff --git a/src/public/adios_read_v1.h b/src/public/adios_read_v1.h
index ac3f98b..74ed45e 100644
--- a/src/public/adios_read_v1.h
+++ b/src/public/adios_read_v1.h
@@ -86,6 +86,12 @@ typedef struct {
         void * internal_data;       /* internal storage for version 2 read API data */
 } ADIOS_VARINFO;
 
+/* Needed by ADIOS_TRANSINFO below */
+typedef struct {
+    uint64_t * start;      /* offset start point in global array ('ndim' elements)         */
+    uint64_t * count;      /* local sizes in global array ('ndim' elements)                */
+} ADIOS_VARBLOCK;
+
 /* The list of the available read methods */
 enum ADIOS_READ_METHOD {
          ADIOS_READ_METHOD_BP           = 0    /* Read from ADIOS BP file (written by POSIX, MPI etc methods) */
diff --git a/src/public/adios_read_v1_defs.h b/src/public/adios_read_v1_defs.h
index 15e548c..975f591 100644
--- a/src/public/adios_read_v1_defs.h
+++ b/src/public/adios_read_v1_defs.h
@@ -15,6 +15,7 @@
 #define ADIOS_GROUP ADIOS_GROUP_V1
 #define ADIOS_VARINFO ADIOS_VARINFO_V1
 #define ADIOS_HIST ADIOS_HIST_V1
+#define ADIOS_VARBLOCK ADIOS_VARBLOCK_V1
 
 #define ADIOS_READ_METHOD ADIOS_READ_METHOD_V1
 #define ADIOS_READ_METHOD_BP ADIOS_READ_METHOD_BP_V1
diff --git a/src/public/adios_read_v2.h b/src/public/adios_read_v2.h
index 95b60e6..ad4abc7 100644
--- a/src/public/adios_read_v2.h
+++ b/src/public/adios_read_v2.h
@@ -18,6 +18,7 @@
 #include "adios_selection.h"
 #include "adios_schema.h"
 #include "adios_read_v2_fwd.h"
+#include "adios_read_ext.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -33,12 +34,15 @@ struct _ADIOS_FILE {
         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                               */
+        int      nmeshes;           /* Number of meshes in all groups                                 */
+        char     ** mesh_namelist;  /* Mesh names in a char* array                                    */
+        int      nlinks;            /* Number of links in all groups                                  */
+        char     ** link_namelist;  /* link names in a char* array                                    */
 
         /* Stream step information */
         int      current_step;      /* The current step in a stream. For a file, it is always 0.      */
         int      last_step;         /* The currently available latest step in the stream/file.        */
+        int      is_streaming;      /* Non-zero if in streaming mode, zero if in non-streaming mode   */
 
         /* Information about file/stream */
         char     *path;             /* Full path file name (as passed at open)                        */
@@ -143,6 +147,7 @@ enum ADIOS_READ_METHOD {
         ADIOS_READ_METHOD_DATASPACES    = 3,  /* Read from memory written by DATASPACES method               */
         ADIOS_READ_METHOD_DIMES         = 4,  /* Read from memory written by DIMES method                    */
         ADIOS_READ_METHOD_FLEXPATH      = 5,  /* Read from memory written by FLEXPATH method                 */
+        ADIOS_READ_METHOD_ICEE          = 6,  /* Read from memory written by ICEE method                 */
 };
 
 /** Locking mode for streams. 
diff --git a/src/query/Makefile.plugins b/src/query/Makefile.plugins
new file mode 100644
index 0000000..872abc3
--- /dev/null
+++ b/src/query/Makefile.plugins
@@ -0,0 +1,9 @@
+if HAVE_FASTBIT
+query_method_SOURCES += query/query_fastbit.c
+query_method_SOURCES += query/fastbit_adios.c
+query_method_HDRS    += query/fastbit_adios.h
+endif # HAVE_FASTBIT
+
+if HAVE_ALACRITY
+query_method_SOURCES += query/query_alac.c
+endif # HAVE_ALACRITY 
diff --git a/src/query/Makefile.plugins.cmake b/src/query/Makefile.plugins.cmake
new file mode 100644
index 0000000..3987d6e
--- /dev/null
+++ b/src/query/Makefile.plugins.cmake
@@ -0,0 +1,8 @@
+if(HAVE_FASTBIT)
+set(query_method_SOURCES ${query_method_SOURCES} query/query_fastbit.c)
+set(query_method_SOURCES ${query_method_SOURCES} query/fastbit_adios.c)
+endif() # HAVE_FASTBIT
+
+if(HAVE_ALACRITY)
+set(query_method_SOURCES ${query_method_SOURCES} query/query_alac.c)
+endif() # HAVE_ALACRITY 
diff --git a/src/query/adios_query.c b/src/query/adios_query.c
new file mode 100644
index 0000000..127bf92
--- /dev/null
+++ b/src/query/adios_query.c
@@ -0,0 +1,56 @@
+#include "public/adios_read.h"
+#include "common_query.h"
+
+int adios_query_is_method_available(enum ADIOS_QUERY_METHOD method) {
+	return common_query_is_method_available(method);
+}
+
+ADIOS_QUERY* adios_query_create(ADIOS_FILE* f, 
+				ADIOS_SELECTION* queryBoundary,
+				const char* varName,
+				enum ADIOS_PREDICATE_MODE op,
+				const char* value)
+{
+  return common_query_create(f, queryBoundary, varName, op, value);
+}
+					
+
+ADIOS_QUERY* adios_query_combine(ADIOS_QUERY* q1, 
+				 enum ADIOS_CLAUSE_OP_MODE operator,		    
+				 ADIOS_QUERY* q2)
+{
+  return common_query_combine(q1, operator, q2);
+}
+
+void adios_query_set_method (ADIOS_QUERY* q, enum ADIOS_QUERY_METHOD method) 
+{
+     common_query_set_method (q, method);
+}
+
+int64_t adios_query_estimate(ADIOS_QUERY* q, int timestep)
+{
+  return common_query_estimate(q, timestep);
+}
+
+ 
+/* //obsolete
+void adios_query_set_timestep(int timeStep)
+{
+  return common_query_set_timestep(timeStep);
+}
+*/
+int  adios_query_evaluate(ADIOS_QUERY* q, 
+			  ADIOS_SELECTION* outputBoundary,
+			  int timeStep, 
+			  uint64_t batchSize, // limited by maxResult
+			  ADIOS_SELECTION** queryResult)
+{
+  return common_query_evaluate(q, outputBoundary, timeStep,  batchSize, queryResult);
+}
+
+void adios_query_free(ADIOS_QUERY* q)
+{
+  common_query_free(q);
+}
+
+
diff --git a/src/query/adios_query_hooks.c b/src/query/adios_query_hooks.c
new file mode 100644
index 0000000..b13422d
--- /dev/null
+++ b/src/query/adios_query_hooks.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+    
+#include "adios_query_hooks.h"
+#include "public/adios_query.h"
+
+#define ASSIGN_FNS(a,b) \
+  (*t) [b].method_name = #b; /* stringify the enum constant's name */ \
+  (*t) [b].adios_query_free_fn          = adios_query_##a##_free; \
+  (*t) [b].adios_query_estimate_fn      = adios_query_##a##_estimate; \
+  (*t) [b].adios_query_can_evaluate_fn  = adios_query_##a##_can_evaluate;  \
+  (*t) [b].adios_query_evaluate_fn      = adios_query_##a##_evaluate; \
+  (*t) [b].adios_query_finalize_fn      = adios_query_##a##_finalize; 
+
+
+void adios_query_hooks_init (struct adios_query_hooks_struct ** t)
+{ 
+    static int did_init = 0;
+    if (did_init) {
+        return;
+    }
+    did_init = 1;
+
+    fflush(stdout);
+ 
+    *t = (struct adios_query_hooks_struct *) calloc (ADIOS_QUERY_METHOD_COUNT, sizeof (struct adios_query_hooks_struct));
+
+    int i=0;
+    for (i=0; i<ADIOS_QUERY_METHOD_COUNT; i++) {
+      (*t) [i].adios_query_free_fn = 0;
+      (*t) [i].adios_query_estimate_fn = 0;
+      (*t) [i].adios_query_can_evaluate_fn = 0;
+      (*t) [i].adios_query_evaluate_fn = 0;
+      (*t) [i].adios_query_finalize_fn = 0;
+    }
+
+#ifdef ALACRITY
+    ASSIGN_FNS(alac, ADIOS_QUERY_METHOD_ALACRITY);
+#endif
+#ifdef FASTBIT
+    ASSIGN_FNS(fastbit, ADIOS_QUERY_METHOD_FASTBIT);
+#endif
+}
+
+#undef ASSIGN_FNS
+
+
diff --git a/src/query/adios_query_hooks.h b/src/query/adios_query_hooks.h
new file mode 100644
index 0000000..ffb173e
--- /dev/null
+++ b/src/query/adios_query_hooks.h
@@ -0,0 +1,36 @@
+#ifndef ADIOS_QUERY_HOOKS_H
+#define ADIOS_QUERY_HOOKS_H
+
+#include "public/adios_query.h"
+#include "public/adios_read.h"
+
+#define FORWARD_DECLARE(a) \
+  int     adios_query_##a##_can_evaluate(ADIOS_QUERY* q); \
+  int64_t adios_query_##a##_estimate(ADIOS_QUERY* q, int timeStep);			\
+  int     adios_query_##a##_evaluate(ADIOS_QUERY* q, int timeStep, uint64_t batchSize, ADIOS_SELECTION* outputBoundry, ADIOS_SELECTION** result); \
+  int     adios_query_##a##_free(ADIOS_QUERY* q); \
+  int     adios_query_##a##_finalize();
+
+FORWARD_DECLARE(fastbit)
+FORWARD_DECLARE(alac)
+
+typedef int      (* ADIOS_QUERY_FREE_FN) (ADIOS_QUERY* q);
+typedef int      (* ADIOS_QUERY_FINALIZE_FN) ();
+typedef int      (* ADIOS_QUERY_EVALUATE_FN) (ADIOS_QUERY* q, int timeStep, uint64_t batchSize, ADIOS_SELECTION* o, ADIOS_SELECTION** result);
+typedef int64_t  (* ADIOS_QUERY_ESTIMATE_FN) (ADIOS_QUERY* q, int timeStep);
+typedef int  (* ADIOS_QUERY_CAN_EVALUATE_FN) (ADIOS_QUERY* q);
+
+struct adios_query_hooks_struct
+{
+  const char *                  method_name;
+  ADIOS_QUERY_EVALUATE_FN       adios_query_evaluate_fn;
+  ADIOS_QUERY_FINALIZE_FN       adios_query_finalize_fn;
+  ADIOS_QUERY_FREE_FN           adios_query_free_fn;
+  ADIOS_QUERY_ESTIMATE_FN       adios_query_estimate_fn;
+  ADIOS_QUERY_CAN_EVALUATE_FN   adios_query_can_evaluate_fn;
+};
+  
+void adios_query_hooks_init (struct adios_query_hooks_struct ** t);
+
+#undef FORWARD_DECLARE
+#endif
diff --git a/src/query/adios_query_mod.f90 b/src/query/adios_query_mod.f90
new file mode 100644
index 0000000..22f4605
--- /dev/null
+++ b/src/query/adios_query_mod.f90
@@ -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.
+!
+
+! 
+! Query Fortran 90 API for ADIOS 
+!    
+! Use this module in your source code to ensure that
+! you are calling the adios_* query functions with
+! the correct arguments
+!
+module adios_query_mod
+
+    use adios_read_mod
+
+    type ADIOS_QUERY
+        private
+        integer*8  q
+    end type ADIOS_QUERY
+
+    !
+    ! ADIOS Query method                                 
+    !
+    integer, parameter :: ADIOS_QUERY_METHOD_FASTBIT  = 1 
+    integer, parameter :: ADIOS_QUERY_METHOD_ALACRITY = 2 
+
+    !
+    ! Predicate
+    !
+    integer, parameter :: ADIOS_LT           = 0
+    integer, parameter :: ADIOS_LTEQ         = 1
+    integer, parameter :: ADIOS_GT           = 2
+    integer, parameter :: ADIOS_GTEQ         = 3
+    integer, parameter :: ADIOS_EQ           = 4
+    integer, parameter :: ADIOS_NE           = 5
+
+    ! 
+    ! Clause
+    !
+    integer, parameter :: ADIOS_QUERY_OP_AND = 0
+    integer, parameter :: ADIOS_QUERY_OP_OR  = 1
+
+
+interface
+
+    subroutine adios_query_create (f, sel, varname, pred, value, q)
+        import :: ADIOS_QUERY
+        implicit none
+        integer*8,         intent(in)  :: f       ! ADIOS FILE (from adios_read_open())
+        integer*8,         intent(in)  :: sel     ! ADIOS_SELECTION from read API
+        character(*),      intent(in)  :: varname
+        integer,           intent(in)  :: pred    ! PREDICATE like ADIOS_GT
+        character(*),      intent(in)  :: value   ! comparison value (integer or real)
+        type(ADIOS_QUERY), intent(out) :: q       ! output variable, 0 on error
+    end subroutine
+
+    subroutine adios_query_combine (q1, op, q2, q)
+        import :: ADIOS_QUERY
+        implicit none
+        type(ADIOS_QUERY), intent(in)  :: q1   ! Query 1
+        integer,           intent(in)  :: op   ! Clasue like ADIOS_QUERY_OP_AND
+        type(ADIOS_QUERY), intent(in)  :: q2   ! Query 2
+        type(ADIOS_QUERY), intent(out) :: q    ! Result Query 
+    end subroutine
+
+    subroutine adios_query_set_method (q, method)
+        import :: ADIOS_QUERY
+        implicit none
+        type(ADIOS_QUERY), intent(in)  :: q        ! Query 
+        integer,           intent(in)  :: method   ! Method like ADIOS_QUERY_METHOD_FASTBIT
+    end subroutine
+
+    integer*8 function adios_query_estimate (q, timestep)
+        ! return the (estimated) number of points (an upper bound)
+        import :: ADIOS_QUERY
+        implicit none
+        type(ADIOS_QUERY), intent(in)  :: q        ! Query 
+        integer,           intent(in)  :: timestep ! must be 0 in case of streaming
+    end function
+
+    subroutine adios_query_evaluate (q, sel_outboundary, timestep, batchsize, sel_result, err)
+        import :: ADIOS_QUERY
+        implicit none
+        type(ADIOS_QUERY), intent(in)  :: q           ! Query 
+        integer*8,         intent(in)  :: sel_outboundary  ! apply hits on this selection
+        integer,           intent(in)  :: timestep    ! must be 0 in case of streaming
+        integer*8,         intent(in)  :: batchsize   ! limit result size for one call
+        integer*8,         intent(out) :: sel_result  ! result selection (ADIOS point selection)
+        integer,           intent(out) :: err         ! 0 on OK
+    end subroutine
+
+    subroutine adios_query_free (q)
+        import :: ADIOS_QUERY
+        implicit none
+        type(ADIOS_QUERY), intent(in)  :: q
+    end subroutine
+
+end interface
+
+
+!
+! ADIOS_QUERY_CREATE generic interface
+!
+! Usage: call adios_query_create (fp, varname, sel, pred, value, query, err)
+!        integer*8,      intent(in)  :: fp     ! ADIOS FILE pointer
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel    ! ADIOS_SELECTION from read API
+!        integer,        intent(in)  :: pred   ! PREDICATE like ADIOS_GT
+!                        intent(in)  :: value  ! comparison value (integer or real)
+!        integer*8,      intent(out) :: query  ! output variable, 0 on error
+!
+!interface adios_query_create
+!
+!    subroutine adios_query_create_int1 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        integer*1,      intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!    subroutine adios_query_create_int2 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        integer*2,      intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!    subroutine adios_query_create_int4 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        integer*4,      intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!    subroutine adios_query_create_int8 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        integer*8,      intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!    subroutine adios_query_create_real4 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        real*4,         intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!    subroutine adios_query_create_real8 (fp, varname, sel, pred, value, query)
+!        implicit none
+!        integer*8,      intent(in)  :: fp
+!        character(*),   intent(in)  :: varname
+!        integer*8,      intent(in)  :: sel
+!        integer,        intent(in)  :: pred 
+!        real*8,         intent(in)  :: value
+!        integer*8,      intent(out) :: query
+!    end subroutine
+!
+!end interface adios_query_create
+
+
+contains
+
+    logical function adios_query_is_method_available (method)
+        ! returns .true. if method is available
+        implicit none
+        integer,           intent(in)  :: method   ! Method like ADIOS_QUERY_METHOD_FASTBIT
+        integer :: ret
+        logical :: avail
+
+        call adios_query_is_method_available_f2c (method, ret)
+        if (ret.ne.0) then
+            avail = .true.
+        else 
+            avail = .false.
+        endif
+        adios_query_is_method_available = avail
+    end function
+
+end module adios_query_mod
diff --git a/src/query/adiosf_query.c b/src/query/adiosf_query.c
new file mode 100644
index 0000000..7a78f55
--- /dev/null
+++ b/src/query/adiosf_query.c
@@ -0,0 +1,111 @@
+#include "config.h"
+#include <string.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define __INCLUDED_FROM_FORTRAN_API__
+#include "public/adios_read_v2.h"
+#include "common_query.h"
+#include "core/futils.h"
+
+
+#ifdef __cplusplus
+extern "C"  /* prevent C++ name mangling */
+#endif
+
+#ifdef BUILD_WITH_CMAKE
+  #include "FC.h"
+#endif
+
+
+
+int FC_FUNC_(adios_query_is_method_available_f2c,ADIOS_QUERY_IS_METHOD_AVAILABLE_F2C) (int *method)
+{
+    return common_query_is_method_available((enum ADIOS_QUERY_METHOD)*method);
+}
+
+void FC_FUNC_(adios_query_create,ADIOS_QUERY_CREATE) (
+        int64_t     * fp, 
+        int64_t     * queryBoundary,
+        const char  * varName,
+        int         * op,
+        const char  * value, 
+        int64_t     * q,
+        int           varName_size,
+        int           value_size
+        )
+{
+    char * buf1 = 0;
+    char * buf2 = 0;
+    ADIOS_QUERY *query;
+
+    buf1 = futils_fstr_to_cstr (varName, varName_size);
+    buf2 = futils_fstr_to_cstr (value, value_size);
+    if (buf1 != 0 && buf2 != 0) {
+        query = common_query_create( (ADIOS_FILE*) *fp, 
+                                     (ADIOS_SELECTION*) *queryBoundary, 
+                                     buf1, 
+                                     (enum ADIOS_PREDICATE_MODE) *op, 
+                                     buf2);
+        free (buf1);
+        free (buf2);
+        *q = (int64_t)query;
+    } else {
+        *q = 0;
+    }
+}
+					
+
+void FC_FUNC_(adios_query_combine,ADIOS_QUERY_COMBINE) (
+        int64_t * q1, 
+        int     * op, 
+        int64_t * q2, 
+        int64_t * q)
+{
+    ADIOS_QUERY *query = common_query_combine( (ADIOS_QUERY*)*q1, 
+                                               (enum ADIOS_CLAUSE_OP_MODE)*op, 
+                                               (ADIOS_QUERY*)*q2);
+    *q = (int64_t)query;
+}
+
+void FC_FUNC_(adios_query_set_method,ADIOS_QUERY_SET_METHOD) (int64_t * q, int * method) 
+{
+    common_query_set_method ((ADIOS_QUERY*)*q, (enum ADIOS_QUERY_METHOD)*method);
+}
+
+int64_t FC_FUNC_(adios_query_estimate,ADIOS_QUERY_ESTIMATE) (int64_t * q, int * timestep)
+{
+    return common_query_estimate((ADIOS_QUERY*)*q, *timestep);
+}
+
+ 
+void FC_FUNC_(adios_query_evaluate,ADIOS_QUERY_EVALUATE) (
+        int64_t  * q, 
+        int64_t  * sel_outputboundary,
+        int      * timestep, 
+        uint64_t * batchsize, 
+        int64_t  * sel_result,
+        int      * err
+        )
+{
+    ADIOS_SELECTION * result;
+    int ret;
+    *err = common_query_evaluate( (ADIOS_QUERY*)*q, 
+                                  (ADIOS_SELECTION*) *sel_outputboundary,
+                                  *timestep, 
+                                  *batchsize, 
+                                  &result);
+    if (!*err) {
+        *sel_result = (int64_t)result;
+    } else {
+        *sel_result = 0;
+    }
+}
+
+void FC_FUNC_(adios_query_free,ADIOS_QUERY_FREE) (int64_t* q)
+{
+    common_query_free((ADIOS_QUERY*)*q);
+}
+
+
diff --git a/src/query/common_query.c b/src/query/common_query.c
new file mode 100644
index 0000000..c97ee05
--- /dev/null
+++ b/src/query/common_query.c
@@ -0,0 +1,825 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include "common_query.h"
+#include "adios_query_hooks.h"
+#include "public/adios_error.h"
+#include "core/common_read.h"
+#include "core/adios_logger.h"
+
+static struct adios_query_hooks_struct * query_hooks = 0;
+
+static int getTotalByteSize (ADIOS_FILE* f, ADIOS_VARINFO* v, ADIOS_SELECTION* sel, 
+			     uint64_t* total_byte_size, uint64_t* dataSize, int timestep);
+
+int isCompatible(ADIOS_QUERY* q1, ADIOS_QUERY* q2);
+
+static ADIOS_SELECTION* getAdiosDefaultBoundingBox(ADIOS_VARINFO* v) 
+{
+  if (v->ndim == 0) {
+    return NULL;
+  }
+  /*uint64_t start[v->ndim];
+  uint64_t count[v->ndim];
+
+  int i=0;
+  for (i=0; i<v->ndim; i++) {
+    start[i] = 0;
+    count[i] = v->dims[i];
+  }
+  */
+  uint64_t* start = malloc(v->ndim * sizeof(uint64_t));
+  uint64_t* count = malloc(v->ndim * sizeof(uint64_t));
+
+  int i=0;
+                                                                                                                                                                         
+  for (i=0; i<v->ndim; i++) {
+    start[i] = 0;
+    count[i] = v->dims[i];
+  }   
+
+  ADIOS_SELECTION* result =  common_read_selection_boundingbox(v->ndim, start, count);
+  return result;
+}
+
+void common_query_init()
+{
+    static int did_init = 0;
+    if (!did_init) {
+        adios_query_hooks_init(&query_hooks);
+        did_init = 1;
+    }
+}
+
+void common_query_finalize()
+{
+    static int did_finalize = 0;
+    if (!did_finalize) {
+        enum ADIOS_QUERY_METHOD m;
+        for (m=0; m < ADIOS_QUERY_METHOD_COUNT; m++) {
+	  if (query_hooks[m].adios_query_finalize_fn != NULL) {
+	    query_hooks[m].adios_query_finalize_fn();
+	  }
+        }
+        free(query_hooks);
+        did_finalize = 1;
+    }
+}
+
+int common_query_is_method_available(enum ADIOS_QUERY_METHOD method) {
+	if (method < 0 || method >= ADIOS_QUERY_METHOD_COUNT)
+		return 0;
+	else
+		return (query_hooks[method].adios_query_evaluate_fn != 0);
+}
+
+void common_query_set_method (ADIOS_QUERY* q, enum ADIOS_QUERY_METHOD method) 
+{
+    q->method = method;
+
+    if (q->left != NULL) {
+      common_query_set_method(q->left, method);
+    } 
+    if (q->right != NULL) {
+      common_query_set_method(q->right, method);      
+    }
+}
+
+// Choose a query method which can work on this query
+static enum ADIOS_QUERY_METHOD detect_and_set_query_method(ADIOS_QUERY* q)
+{
+	enum ADIOS_QUERY_METHOD m;
+	if (q->method != ADIOS_QUERY_METHOD_UNKNOWN) {
+		// Was set by user manually
+		return q->method;
+	}
+	// Look for a method that can evaluate this query
+	for (m=0; m < ADIOS_QUERY_METHOD_COUNT; m++) {
+		// without checking whether *evaluate_fn is defined,
+		// it causes crash when idx is not used for fastbit. (i.e. m=0, returns 0, m=1, crashes at "found = nullpoiint(q)"
+		if (query_hooks[m].adios_query_can_evaluate_fn == NULL) {
+		  continue;
+		}
+		int found = query_hooks[m].adios_query_can_evaluate_fn(q);
+		if (found) {
+		  // q->method = m;
+		  common_query_set_method(q, m);
+		  return m;
+		}
+	}
+	// return default that always works
+	//q->method = ADIOS_QUERY_METHOD_FASTBIT;
+	common_query_set_method(q, ADIOS_QUERY_METHOD_FASTBIT);
+	return ADIOS_QUERY_METHOD_FASTBIT;
+}
+
+int adios_get_actual_timestep(ADIOS_QUERY* q, int timeStep)
+{
+  if (q == NULL) {
+    return -1;
+  }
+
+
+  if ((q->left == NULL) && (q->right == NULL)) 
+  {
+    if ((q->file != NULL) && (q->file->is_streaming == 1)) 
+    {
+      return q->file->current_step;
+    }  
+  } else {
+    return adios_get_actual_timestep(q->left, timeStep);
+  }
+  return timeStep;
+}
+
+
+static int adios_check_query_at_timestep(ADIOS_QUERY* q, int timeStep)
+{
+    // get data from bp file
+    if (timeStep < 0) {
+      log_error("Invalid timestep\n");
+      return -1;
+    }
+
+    if (q == NULL) {
+      return 0;
+    }
+
+    if ((q->left == NULL) && (q->right == NULL)) 
+    {      // leaf 
+      if ((q->file == NULL) || (q->varName == NULL)) {
+	  log_error ("Query has no file or var info\n");
+	  return -1;
+      }
+
+      if ((q->file->is_streaming == 1) && (timeStep != 0)) {
+	adios_error(err_invalid_query_value, "TimeStep for streaming file should always be 0.\n");
+	return -1;
+      }
+
+      if (q->file->is_streaming == 1) {
+	  timeStep = q->file->current_step;
+      }
+
+      ADIOS_VARINFO* v = common_read_inq_var(q->file, q->varName);
+      if (v == NULL) {
+	adios_error (err_invalid_varname, "Query Invalid variable '%s':\n%s",
+		     q->varName, adios_get_last_errmsg());
+	return -1;
+      }
+      if (q->varinfo != NULL) {
+	common_read_free_varinfo(q->varinfo);
+      }
+      q->varinfo = v;
+
+      free(q->dataSlice);
+
+      uint64_t total_byte_size, dataSize;
+
+      if (getTotalByteSize(q->file, v, q->sel, &total_byte_size, &dataSize, timeStep) < 0) {
+        adios_error(err_incompatible_queries, "Unable to create query.");
+	return -1;
+      }
+
+      log_debug("%s, raw data size=%ld\n", q->condition, dataSize);
+      q->dataSlice = malloc(total_byte_size);
+      q->rawDataSize = dataSize;
+
+      return timeStep;
+    } else {
+      int leftTimeStep = adios_check_query_at_timestep(q->left, timeStep);
+      int rightTimeStep = adios_check_query_at_timestep(q->right, timeStep);
+
+      if ((rightTimeStep == -1) || (leftTimeStep == -1)) {
+	return -1;
+      }
+      if (isCompatible(q->left, q->right) != 0) {
+        adios_error (err_incompatible_queries, 
+		     "Found queries' selections are not compatible actual timestep: %d.\n", leftTimeStep);
+
+	return -1;
+      }
+      return leftTimeStep;
+    }
+}
+
+void freeQuery(ADIOS_QUERY* query) {
+  log_debug("common_free() query: %s \n", query->condition);
+
+  free(query->predicateValue);
+  free(query->condition);
+  free(query->varName);
+        
+  common_read_free_varinfo(query->varinfo);
+
+  free(query->dataSlice);
+  query->dataSlice = 0;
+
+  free(query);
+}
+
+
+void common_query_free(ADIOS_QUERY* q)
+{
+  if (q == NULL) {
+    return;
+  }
+
+  if (q->deleteSelectionWhenFreed) {
+    common_read_selection_delete(q->sel);
+  }
+
+  // Only call a specialized free method if this query has been evaluated using
+  // a particular query engine! Otherwise, if a query is created but never
+  // evaluated, this will cause segfaults since no query method initialized the query
+  if (q->method != ADIOS_QUERY_METHOD_UNKNOWN) {
+      assert(q->method < ADIOS_QUERY_METHOD_COUNT);
+      if (query_hooks[q->method].adios_query_free_fn != NULL) {
+	query_hooks[q->method].adios_query_free_fn(q);
+      }
+  }
+
+  freeQuery(q);
+}
+
+static int getTotalByteSize (ADIOS_FILE* f, ADIOS_VARINFO* v, ADIOS_SELECTION* sel, 
+			     uint64_t* total_byte_size, uint64_t* dataSize, int timestep)                             
+{
+  *total_byte_size = common_read_type_size (v->type, v->value);    
+  *dataSize = 1; 
+
+  if (sel == 0) {
+    uint64_t s = 0;
+    for (s=0; s<v->ndim; s++) {
+         *total_byte_size *=v->dims[s];
+         *dataSize *= v->dims[s];
+         //	log_debug(" dim %" PRIu64 "default count %" PRIu64 "\n", s, v->dims[s]);
+    }
+    return 0;
+  }
+
+  switch (sel->type) {
+  case  ADIOS_SELECTION_BOUNDINGBOX:    
+    {
+      const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(sel->u.bb);
+      uint64_t* count = bb->count;            
+      uint64_t* start = bb->start;            
+
+      int s=0;
+
+      for (s=0; s<v->ndim; s++) {
+	   if (start[s]+count[s] > v->dims[s]) {
+	     log_error(" Invalid bounding box at %dth dim: start %" PRIu64 " + count %" PRIu64 " exceeds dim size: %" PRIu64 "\n", s, start[s], count[s], v->dims[s]);
+	     return -1;
+	   }
+	   *total_byte_size *=count[s];
+	   *dataSize *= count[s];
+//	   log_debug(" dim %" PRIu64 "count %" PRIu64 " \n", s, count[s]);
+      }
+      
+//	   log_debug("\tThe data size is = %" PRIu64 " \n", *dataSize);
+      break;
+    }
+  case ADIOS_SELECTION_POINTS:
+    {
+      const ADIOS_SELECTION_POINTS_STRUCT *pts = &(sel->u.points);
+      *total_byte_size *= pts->npoints;
+      *dataSize = pts->npoints;
+      break;
+    }
+  case ADIOS_SELECTION_WRITEBLOCK:
+    {
+      const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(sel->u.block);
+
+      common_read_inq_var_blockinfo(f, v);
+      int i=0;
+      int min = v->nblocks[0];
+      int absBlockCounter = wb->index;
+
+      if (v->nsteps > 1) {	// all timesteps are known, can get abs
+	for (i=0; i<v->nsteps; i++) 
+	  {
+	    int nBlocksAtStep = v->nblocks[i];	  
+	    if (nBlocksAtStep < min) {
+	      min = nBlocksAtStep;
+	    }
+	    log_debug("\t\t   currstep=%d nblocks=%d\n", i, nBlocksAtStep);
+	    if (i < timestep) {
+	      absBlockCounter += nBlocksAtStep;
+	    }
+	  }
+      }
+
+      if (wb->index > min) {
+	  log_error("Error: Unable to handle this block index %d over all the timesteps. Stop.\n", wb->index);
+	  return -1;
+      }
+
+      int j=0;
+      for (j=0; j<v->ndim; j++)
+	{
+          *total_byte_size *= v->blockinfo[absBlockCounter].count[j];
+          *dataSize *= v->blockinfo[absBlockCounter].count[j];
+	}
+
+      log_debug("\t\t   block %d, abs id:%d, bytes: %" PRIu64 ", size =  %" PRIu64 " \n", wb->index, absBlockCounter, *total_byte_size, *dataSize);
+
+      break;
+    }
+  default:
+    break;
+  }
+  return 0;
+}
+
+static void initialize(ADIOS_QUERY* result)
+{
+  result->onTimeStep = -1; // no data recorded
+  result->maxResultsDesired = 0; // init
+  result->resultsReadSoFar = 0; // init
+  result->hasParent = 0;
+  result->deleteSelectionWhenFreed = 0;
+  result->method = ADIOS_QUERY_METHOD_UNKNOWN;
+  result->varName = 0;
+  result->condition = 0;
+  result->left = 0;
+  result->right = 0;
+}
+
+
+ADIOS_QUERY* common_query_create(ADIOS_FILE* f, 
+				 ADIOS_SELECTION* queryBoundary,
+				 const char* varName,
+				 enum ADIOS_PREDICATE_MODE op,
+				 const char* value)
+{
+    log_debug("[Is caller using Fortran?] %d\n", futils_is_called_from_fortran());
+  //syncTimeStep(f);
+    if (query_hooks == NULL) {
+	adios_error(err_operation_not_supported,
+		    "ADIOS Query Library Error: Query environment is not initialized.\n");
+	return NULL;
+        //exit(EXIT_FAILURE);
+    }
+
+    if (queryBoundary != NULL) {
+        if ((queryBoundary->type != ADIOS_SELECTION_BOUNDINGBOX)
+                && (queryBoundary->type != ADIOS_SELECTION_POINTS)
+                && (queryBoundary->type != ADIOS_SELECTION_WRITEBLOCK)) 
+        {
+            adios_error (err_unsupported_selection, 
+                    "Query create: selection type is not supported in queries. "
+                    "Choose either boundingbox, points or writeblock selection\n");	       
+            return NULL;
+        }
+    }
+
+    if (value == NULL) {
+        adios_error (err_invalid_query_value, "Query create: NULL for value is provided.\n");
+        return NULL;
+    }
+    if (f == NULL) {
+        adios_error (err_invalid_file_pointer, "Query create: NULL for input file is provided.\n");
+        return NULL;
+    }
+
+	// NOTE: No longer replacing default bounding box here; each query engine
+	// should handle q->sel == NULL by themselves, as this is a clearer indication
+    // to the query engine that the user is query the whole dataset rather than some
+    // subset
+	//    int defaultBoundaryUsed = 0;
+	//    if (queryBoundary == NULL) {
+	//#ifdef ALACRITY
+	//        queryBoundary = getAdiosDefaultBoundingBox(v);
+	//        defaultBoundaryUsed = 1;
+	//#endif
+	//    }
+
+    //
+    // create selection string for fastbit
+    //
+    ADIOS_QUERY* result = (ADIOS_QUERY*)calloc(1, sizeof(ADIOS_QUERY));
+    initialize(result);
+
+    result->condition = malloc(strlen(varName)+strlen(value)+ 10); // 10 is enough for op and spaces 
+    if (op == ADIOS_LT) {
+        sprintf(result->condition, "(%s < %s)", varName, value);
+    } else if (op == ADIOS_LTEQ) {
+        sprintf(result->condition, "(%s <= %s)", varName, value);
+    } else if (op == ADIOS_GT) {
+        sprintf(result->condition, "(%s > %s)", varName, value);
+    } else if (op == ADIOS_GTEQ) {
+        sprintf(result->condition, "(%s >= %s)", varName, value);
+    } else if (op == ADIOS_EQ) {
+        sprintf(result->condition, "(%s = %s)", varName, value);
+    } else {
+        sprintf(result->condition, "(%s != %s)", varName, value);
+    }
+
+    result->varName = strdup(varName);
+
+    result->file = f;
+
+    result->sel = queryBoundary;
+    result->deleteSelectionWhenFreed = 0;
+
+    result->predicateOp = op;
+    result->predicateValue = strdup(value);
+
+    //initialize two pointers
+    result->left = NULL;
+    result->right = NULL;
+
+    return result;
+}
+			
+static int isSelectionCompatible(ADIOS_SELECTION* first, ADIOS_SELECTION* second)			  
+{
+  if ((first == NULL) || (second == NULL)) {
+    return 0;
+  }
+
+  switch (first->type) {
+  case  ADIOS_SELECTION_BOUNDINGBOX:    
+    if (second->type != ADIOS_SELECTION_BOUNDINGBOX) {
+        log_error("Error! Not supported: comparing bounding box to another type \n");
+	return -1;
+    }
+    
+    return 0;
+  case ADIOS_SELECTION_POINTS:
+    if (second->type != ADIOS_SELECTION_POINTS) {
+        log_error("Error! Not supported: comparing adios points to another type \n");
+	return -1;
+    }
+    const ADIOS_SELECTION_POINTS_STRUCT *pt1 = &(first->u.points);
+    const ADIOS_SELECTION_POINTS_STRUCT *pt2 = &(second->u.points);
+    
+    if (pt1 -> npoints != pt2->npoints) {
+      log_error("Error! point selections have different size. %ld != %ld\n", pt1->npoints, pt2->npoints);
+      return -1;
+    }
+    return 1;
+  case ADIOS_SELECTION_WRITEBLOCK:
+    if (second->type != ADIOS_SELECTION_WRITEBLOCK) {
+        log_error("Error! Not supported: comparing adios blocks to another type \n");
+	return -1;
+    }      
+    return 0;
+  default:
+    return 0;
+  }    
+}
+
+/* static uint64_t getVariableSize(ADIOS_VARINFO* v) 
+{
+  uint64_t dataSize = 1;
+  int s;
+  for (s=0; s<v->ndim; s++) {
+    dataSize *= v->dims[s];
+  }
+  return dataSize;
+}*/
+
+//
+// return 0 if yes.
+//
+int isCompatible(ADIOS_QUERY* q1, ADIOS_QUERY* q2) {
+  if ((q1->left == 0) && (q2->left == 0)) { // both are leaves
+    if (q1->rawDataSize != q2->rawDataSize) {
+      log_error("Error! Not supported: combining query with different sizes!\n");
+      return -1;
+    }
+    if ((q1->sel != NULL) && (q2->sel != NULL)) {
+      return isSelectionCompatible(q1->sel, q2->sel);
+    } 
+    // all other cases, as long as data sizes match, fastbit can work on it.
+    return 0;
+  }
+
+  if (q1->left != NULL) {
+    return isCompatible(q1->left, q2);
+  } 
+
+  if (q2->left != NULL) {
+    return isCompatible(q1, q2->left);
+  }
+  
+  return 0;
+}
+
+ADIOS_QUERY* common_query_combine(ADIOS_QUERY* q1, 
+				  enum ADIOS_CLAUSE_OP_MODE operator,		    
+				  ADIOS_QUERY* q2)
+{
+    // combine selection sel3 = q1.fastbitSelection & q2.fastbitSelection
+    //create a new query (q1.cond :op: q2.cond, sel3);
+    //ADIOS_QUERY* result = (ADIOS_QUERY*)malloc(sizeof(ADIOS_QUERY));
+
+    if ((q1 == NULL) || (q2 == NULL)) {
+        log_error("Error: detected NULL query when combining.\n");
+        adios_error (err_incompatible_queries, "Query combine: NULL passed as query.\n");
+        return NULL;
+    }
+
+    if (isCompatible(q1, q2) != 0) {
+        adios_error (err_incompatible_queries, 
+		     "Query combine: the two queries' selections are not compatible.\n");
+        return NULL;
+    }
+
+    ADIOS_QUERY* result = (ADIOS_QUERY*)calloc(1, sizeof(ADIOS_QUERY));
+    initialize(result);
+
+    result->condition = malloc(strlen(q1->condition)+strlen(q2->condition)+10);
+    if (operator == ADIOS_QUERY_OP_AND) {
+        sprintf(result->condition, "(%s and %s)", q1->condition, q2->condition);
+    } else {
+        sprintf(result->condition, "(%s or %s)", q1->condition, q2->condition);
+    }
+
+    q1->hasParent = 1;
+    q2->hasParent = 1;
+    result->left = q1;
+    result->right = q2;
+    result->combineOp = operator;
+
+    //initialize(result);
+    return result;
+}
+
+int64_t common_query_estimate(ADIOS_QUERY* q, int timestep)
+{
+    if (q == NULL) {
+      return -1;
+    }
+    enum ADIOS_QUERY_METHOD m = detect_and_set_query_method (q);
+    if (query_hooks[m].adios_query_estimate_fn != NULL) {
+      int actualTimeStep = adios_check_query_at_timestep(q, timestep);
+      if (actualTimeStep == -1) {
+	return -1;
+      }
+
+      return query_hooks[m].adios_query_estimate_fn(q, timestep);
+    }		
+
+    log_debug("No estimate function was supported for method %d\n", m);
+    return -1;
+}
+
+/*
+void common_query_set_timestep(int timeStep)
+{  
+    gCurrentTimeStep = timeStep;
+}
+*/
+
+ /*
+static void updateBlockSize(const ADIOS_SELECTION_WRITEBLOCK_STRUCT* wb, ADIOS_QUERY* leaf, int timeStep) 
+{
+    int i=0;
+    int serializedBlockNum = 0;
+
+    ADIOS_VARINFO* v = leaf->varinfo;
+    uint64_t total_byte_size = common_read_type_size (v->type, v->value); ;
+    uint64_t dataSize=0;
+
+    for (i=0; i<timeStep; i++) 
+    {
+        int nBlocksAtStep = v->nblocks[i];  
+        serializedBlockNum += nBlocksAtStep;     
+    }
+
+    int j=0;
+    for (j=0; j<v->ndim; j++)
+    {
+        total_byte_size *= v->blockinfo[serializedBlockNum].count[j];
+        dataSize *= v->blockinfo[serializedBlockNum].count[j];
+    }
+
+    log_debug("\t\t   block %d (linedup as %d), bytes: %" PRIu64 ", size = %" PRIu64 " \n", 
+            wb->index, serializedBlockNum, total_byte_size, dataSize);
+
+    if (dataSize != leaf->rawDataSize) {
+        log_debug("\t\t reallocate dataSlice due to block size change\n");
+
+        leaf->rawDataSize = dataSize;
+        if (leaf->dataSlice != NULL) {
+            free(leaf->dataSlice);
+        }
+        leaf->dataSlice = malloc(total_byte_size);
+    }
+}
+
+static int updateBlockSizeIfNeeded(ADIOS_QUERY* q, int timeStep) 
+{
+    // leaf query
+    if ((q->left == NULL) && (q->right == NULL)) 
+    {
+        if (q->sel == NULL) {
+            log_error("No selections detected. \n");
+            return 0; // no need to -1, not a block selection.
+        }
+
+        if (q->varinfo == NULL) {
+            log_error("No variable recorded. \n");
+            return -1;
+        }
+
+	// // this is removed b/c if using read_open() instead of read_open_file(), then var->nstep will always be 1
+        //if (gCurrentTimeStep > q->varinfo->nsteps) {
+	//  log_error("The given timestep %d exceeds variable (id %d)'s nsteps. \n", gCurrentTimeStep, q->varinfo->varid);
+	//  return -1;
+        //}
+	//
+        if (q->sel->type != ADIOS_SELECTION_WRITEBLOCK) {
+            return 0;
+        }
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(q->sel->u.block);
+        updateBlockSize(wb, q, timeStep);      
+        return 1;
+    }
+
+    int result = 0;
+    if (q->left != NULL) {
+        int leftUpdate = updateBlockSizeIfNeeded(q->left, timeStep);
+        if (leftUpdate < 0) {
+            return -1;
+        }
+        result += leftUpdate;
+    } 
+    if (q->right != NULL) {
+        int rightUpdate = updateBlockSizeIfNeeded(q->right, timeStep);
+        if (rightUpdate < 0) {
+            return -1;
+        }
+        result += rightUpdate;
+    }
+
+    return result;
+}
+*/
+/*
+static int checkCompatibility(ADIOS_QUERY* q) 
+{
+    if ((q->left != NULL) && (q->right != NULL)) {
+        return isCompatible(q->left, q->right); 
+    }
+    return 0; // ok, no need to check  
+}
+*/
+static ADIOS_VARBLOCK * computePGBounds(ADIOS_QUERY *q, int wbindex, int timestep, int *out_ndim) 
+{
+    if (!q->left && !q->right) {
+        // In this case, we have reached a leaf query node, so directly
+        // retrieve the varblock from the varinfo
+        assert(q->varinfo);
+
+        // Read the blockinfo if not already present
+        if (!q->varinfo->blockinfo) {
+            adios_read_set_data_view(q->file, LOGICAL_DATA_VIEW);
+            common_read_inq_var_blockinfo(q->file, q->varinfo);
+        }
+
+        // Note: adios_get_absolute_writeblock_index ensures that timestep and wbindex
+        // are both in bounds, signalling an adios_error if not. However, there will be
+        // no variable name cited in the error, so perhaps better error handling would
+        // be desirable in the future
+        //const int abs_wbindex = adios_get_absolute_writeblock_index(q->varinfo, wbindex, timestep);
+	int abs_wbindex = wbindex;
+	if (q->varinfo->nsteps > 1) { // varinfo contains ALL timesteps, not just one step, so streaming mode files will not need call this func
+	  abs_wbindex = adios_get_absolute_writeblock_index(q->varinfo, wbindex, timestep);
+	}
+
+        // Finally, return ndim and the varblock
+        *out_ndim = q->varinfo->ndim;
+        return &q->varinfo->blockinfo[abs_wbindex];
+    } else if (!q->left || !q->right) {
+        // In this case, we have only one subtree, so just return the
+        // ndim and varblock from that subtree directly, since there's
+        // nothing to compare against
+
+        ADIOS_QUERY *present_subtree = q->left ? (ADIOS_QUERY*)q->left : (ADIOS_QUERY*)q->right;
+        return computePGBounds(present_subtree, wbindex, timestep, out_ndim);
+    } else {
+        // In this final case, we have two subtrees, and we must compare
+        // the resultant varblock from each one to ensure they are equal
+        // before returning
+
+        ADIOS_QUERY *left = (ADIOS_QUERY *)q->left;
+        ADIOS_QUERY *right = (ADIOS_QUERY *)q->right;
+
+        // Next, retrieve the ndim and varblock for each subtree
+        int left_ndim, right_ndim;
+        ADIOS_VARBLOCK *left_vb = computePGBounds(left, wbindex, timestep, &left_ndim);
+        ADIOS_VARBLOCK *right_vb = computePGBounds(right, wbindex, timestep, &right_ndim);
+
+        // If either subtree returns an invalid (NULL) varblock, fail immediately
+        if (!left_vb || !right_vb) {
+            return NULL;
+        }
+
+        // Check that the ndims are equal, failing if not
+        int ndim;
+        if (left_ndim != right_ndim) {
+            return NULL;
+        } else {
+            ndim = left_ndim;
+        }
+
+        // Check the start/count coordinate in each dimension for equality,
+        // failing if any coordinate is not equal between the subtrees
+        int i;
+        for (i = 0; i < ndim; i++) {
+            if (left_vb->start[i] != right_vb->start[i] ||
+                    left_vb->count[i] != right_vb->count[i]) {
+                return NULL;
+            }
+        }
+
+        // Finally, we have ensured that both subtrees yield valid and equal
+        // varblocks, so return the common ndim and varblock (arbitrarily use
+        // left_vb, since right and left equal)
+        *out_ndim = ndim;
+        return left_vb;
+    }
+}
+
+static ADIOS_SELECTION * convertWriteblockToBoundingBox(ADIOS_QUERY *q, ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb, int timestep) 
+{
+    assert(!wb->is_absolute_index && !wb->is_sub_pg_selection); // The user should not be using the internal ADIOS writeblock flags
+
+    int pg_ndim;
+    ADIOS_VARBLOCK *pg_bounds = computePGBounds(q, wb->index, timestep, &pg_ndim);
+    if (!pg_bounds)
+    	return NULL;
+
+    ADIOS_SELECTION *bb = common_read_selection_boundingbox(pg_ndim, pg_bounds->start, pg_bounds->count);
+							    
+    return bb;
+}
+
+int common_query_evaluate(ADIOS_QUERY* q, 
+			  ADIOS_SELECTION* outputBoundary, 
+			  int timeStep, 
+			  uint64_t batchSize, // limited by maxResult
+			  ADIOS_SELECTION** result)
+{  
+  if (q == 0) {
+    log_debug("Error: empty query will not be evaluated!");
+    return -1;
+  }
+    int actualTimeStep = adios_check_query_at_timestep(q, timeStep);
+    if (actualTimeStep == -1) {
+      return -1;
+    }
+
+    /*
+    if (checkCompatibility(q) != 0) {
+      log_error("query components are not compatible at this time step.\n");
+      return -1;
+    }
+    */
+    /*
+    if ((q->onTimeStep >= 0) && (q->onTimeStep != timeStep)) {
+        int updateResult = updateBlockSizeIfNeeded(q, timeStep);
+        if (updateResult < 0) {
+            log_error("Error with this timestep %d. Can not proceed. \n", timeStep);
+            return -1;
+        }
+        if (updateResult > 0) { // blocks were updated. check compatitibity
+            if (checkCompatibility(q) <= 0) {
+                return -1;
+            }
+        }
+    }
+    */
+    int freeOutputBoundary = 0;
+    if ((outputBoundary != NULL) && (outputBoundary->type == ADIOS_SELECTION_WRITEBLOCK)) {
+        outputBoundary = convertWriteblockToBoundingBox(q, &outputBoundary->u.block, timeStep);
+        if (!outputBoundary) {
+	  adios_error(err_invalid_argument,
+		      "Attempt to use writeblock output selection on a query where not "
+		      "all variables participating have the same varblock bounding box "
+		      "at that writeblock index (index = %d)\n",
+		      outputBoundary->u.block.index);
+	  return -1;
+        }
+        freeOutputBoundary = 1;
+    }
+
+    enum ADIOS_QUERY_METHOD m = detect_and_set_query_method (q);
+
+    if (query_hooks[m].adios_query_evaluate_fn != NULL) {
+      int retval = query_hooks[m].adios_query_evaluate_fn(q, timeStep, batchSize, outputBoundary, result);	      
+      if (freeOutputBoundary) common_read_selection_delete(outputBoundary);
+      return retval;
+    } 
+    log_debug ("No selection method is supported for method: %d\n", m);
+    return -1;
+}
+
+
diff --git a/src/query/common_query.h b/src/query/common_query.h
new file mode 100644
index 0000000..907ad57
--- /dev/null
+++ b/src/query/common_query.h
@@ -0,0 +1,50 @@
+#ifndef __COMMON_QUERY_H__
+#define __COMMON_QUERY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "public/adios_query.h"
+
+#define NO_EVAL_BEFORE -1
+
+// called from Read init only; it does NOT call methods' init
+void common_query_init();
+
+//void common_query_set_method(enum ADIOS_QUERY_METHOD method);
+
+int common_query_is_method_available(enum ADIOS_QUERY_METHOD method);
+
+ADIOS_QUERY* common_query_create(ADIOS_FILE* f, 				 
+				 ADIOS_SELECTION* queryBoundry,
+				 const char* varName,
+				 enum ADIOS_PREDICATE_MODE op,
+				 const char* value); 
+					
+
+ADIOS_QUERY* common_query_combine(ADIOS_QUERY* q1, 
+				   enum ADIOS_CLAUSE_OP_MODE operator,		    
+				   ADIOS_QUERY* q2);
+
+int64_t common_query_estimate(ADIOS_QUERY* q, int timestep);
+
+//void common_query_set_timestep(int timeStep);
+
+int common_query_evaluate(ADIOS_QUERY* q, 
+			  ADIOS_SELECTION* outputBoundry,
+			  int timestep,
+			  uint64_t batchSize, 
+			  ADIOS_SELECTION** result);
+
+void common_query_free(ADIOS_QUERY* q);
+
+// called from Read finalize only; 
+// this function then calls all query methods' finalize
+void common_query_finalize();
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __COMMON_QUERY_H__ */
diff --git a/src/query/fastbit_adios.c b/src/query/fastbit_adios.c
new file mode 100644
index 0000000..1858646
--- /dev/null
+++ b/src/query/fastbit_adios.c
@@ -0,0 +1,489 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "core/common_read.h"
+#include "core/adios_logger.h"
+#include <iapi.h>
+
+#include "fastbit_adios.h"
+
+long fastbit_adios_getCurrentTimeMillis() 
+{
+  time_t          s;  // Seconds
+  struct timespec spec;
+
+#ifdef CLOCK_MONOTONIC
+  clock_gettime(CLOCK_MONOTONIC, &spec);
+#else
+  clock_gettime(CLOCK_REALTIME, &spec);
+#endif
+  s  = spec.tv_sec;
+  long ms = round(spec.tv_nsec/1.0e6) + s*1000; // Convert nanoseconds to milliseconds
+  return ms;
+}
+
+
+void fastbit_adios_util_checkNotNull(void* fastbitHandle, const char* arrayName) {
+  if (fastbitHandle == NULL) {
+    log_error(" >> Unable to create handle on fastbit, ref: %s\n", arrayName);
+  } else {
+    log_debug(" >> created handle on fastbit, ref: %s\n", arrayName);
+  }
+}
+
+int fastbit_adios_util_getRelativeBlockNumForPoint(ADIOS_VARINFO* v,  uint64_t* point, int timestep) 
+{
+  int i=0;
+  int j=0;
+
+  if (v->nsteps == 1) {
+    // 
+    // if file is read through adios_read_open(), knows only about the current time step
+    //
+    int result = -1;    
+    for (i=0; i<v->sum_nblocks; i++) {      
+      if (result >=0 ) {	
+	break;
+      }
+	
+      ADIOS_VARBLOCK curr = v->blockinfo[i];
+      for (j=0; j<v->ndim; j++) {
+	int begin = curr.start[j];
+	int end   = curr.start[j]+curr.count[j];
+
+	if ((begin <= point[j]) && (point[j] < end)) {
+	  result = i; // relative to the timestep                                                                                                                                      
+	  //result = sum; //if want to return abs block number                                                                                                                         
+	} else {
+	  result = -1;
+	  break;
+	}
+      }
+    }
+    return result;
+  }
+
+  //
+  // if v has info of all time steps;
+  //
+  int totalBlocksInTimeStep = v->nblocks[timestep];
+  int sum=0;
+
+  for (i=0;i<timestep; i++) {
+    sum += v->nblocks[i];
+  }
+
+  int result = -1;
+  for (i=0; i<totalBlocksInTimeStep; i++) {
+    if (result >= 0) {
+      break;
+    }
+    ADIOS_VARBLOCK curr = v->blockinfo[sum];
+    for (j=0; j<v->ndim; j++) {
+      int begin = curr.start[j];
+      int end   = curr.start[j]+curr.count[j];
+
+      if ((begin <= point[j]) && (point[j] < end)) {
+	result = i; // relative to the timestep
+	//result = sum; //if want to return abs block number
+      } else {
+	result = -1;
+	break;
+      }
+    }
+    sum++;
+  }
+
+  return result;
+}
+
+
+char *fastbit_adios_util_getFastbitIndexFileName(const char* dataFileLoc) 
+{
+  int len = strlen(dataFileLoc);			   
+  char  idxFileNamePad [len];
+  char *idxFileName = malloc (len*sizeof(char)+2); // .idx is 1 more than .bp
+  
+  strncpy(idxFileNamePad, dataFileLoc, len-3);
+  idxFileNamePad[len-3]=0;
+  sprintf(idxFileName, "%s.idx", idxFileNamePad); 
+  return idxFileName;
+}
+
+int fastbit_adios_util_FastbitIndexFileExists(const char* dataFileLoc)
+{
+    char *idxFileName = fastbit_adios_util_getFastbitIndexFileName (dataFileLoc);
+    int retval = query_utils_file_exists (idxFileName);
+    free (idxFileName);
+    return retval;
+}
+
+ADIOS_FILE* fastbit_adios_util_getFastbitIndexFileToRead(const char* dataFileLoc, MPI_Comm comm) 
+{
+  char *idxFileName = fastbit_adios_util_getFastbitIndexFileName (dataFileLoc);
+  ADIOS_FILE* f = NULL;
+
+  if (query_utils_file_exists(idxFileName)) 
+  {
+      // turn off logging
+      //int log_level = adios_verbose_level;
+      //adios_verbose_level = 0;
+      f = common_read_open_file (idxFileName, ADIOS_READ_METHOD_BP, comm);
+      // turn back on logging
+      //adios_verbose_level = log_level;
+      // reset possible error
+      //adios_clear_error();
+      if (!f) {
+          log_warn ("Could not open FastBit index file '%s'. "
+                  "Will use FastBit evaluation on data directly\n",
+                  idxFileName);
+      }
+  } else {
+      log_warn ("No FastBit index file '%s' was found. "
+              "Will use FastBit evaluation on data directly\n",
+              idxFileName);
+  }
+  free (idxFileName);
+  return f;
+}
+
+
+
+
+FastBitDataType fastbit_adios_util_getFastbitDataType(enum ADIOS_DATATYPES type) 
+{  
+  switch (type)
+    {
+    case adios_unsigned_byte:
+      return FastBitDataTypeUByte;
+      break;
+
+    case adios_byte:
+      return FastBitDataTypeByte;
+      break;
+
+    case adios_short:
+      return FastBitDataTypeShort;
+      break;
+
+    case adios_unsigned_short:
+      return FastBitDataTypeUShort;
+      break;
+
+    case adios_integer:
+      return FastBitDataTypeInt;
+      break;
+
+    case adios_unsigned_integer:
+      return FastBitDataTypeUInt;
+      break;
+
+    case adios_long:
+      return FastBitDataTypeLong;
+      break;
+
+    case adios_unsigned_long:
+      return FastBitDataTypeULong;
+      break;
+
+    case adios_string:
+      return FastBitDataTypeUnknown;
+      break;
+
+    case adios_real:
+      return FastBitDataTypeFloat;
+      break;
+
+    case adios_double:
+      return FastBitDataTypeDouble;
+      break;
+
+    case adios_long_double:
+    //sprintf (s, "%Lg", ((long double *) data)[idx]);
+    case adios_complex:
+    //sprintf (s, "(%g, %g)", ((float *) data)[2*idx], ((float *) data)[2*idx+1]);   	       
+    case adios_double_complex:
+    //sprintf (s, "(%lg, %lg)", ((double *) data)[2*idx], ((double *) data)[2*idx+1]);	       
+    return FastBitDataTypeDouble;
+    }
+
+}
+
+FastBitCompareType fastbit_adios_util_getFastbitCompareType(enum ADIOS_PREDICATE_MODE op) 
+{
+    switch (op) 
+    {
+    case ADIOS_LT:
+      return FastBitCompareLess;
+      break;
+    case ADIOS_LTEQ:
+      return FastBitCompareLessEqual;
+      break;
+    case ADIOS_GT:
+      return FastBitCompareGreater;
+      break;
+    case ADIOS_GTEQ:
+      return FastBitCompareGreaterEqual;
+      break;
+    case ADIOS_EQ:
+      return FastBitCompareEqual;
+      break;
+    case ADIOS_NE:
+      return FastBitCompareNotEqual;
+      break;
+    }
+}
+
+// k is numbered from 1 to sum_nblocks
+//uint64_t getBlockDataSize(ADIOS_VARINFO* v, int k) // k = blockNumber 
+uint64_t fastbit_adios_util_getBlockSize(ADIOS_VARINFO* v, int timestep, int relativeBlockIdx) // k = blockNumber 
+{
+  //uint64_t blockBytes = common_read_type_size (v->type, v->value);
+  uint64_t blockSize = 1;
+  int j=0;
+
+  if (v->ndim <= 0) {
+    return blockSize;
+  }
+
+  int k = 0; // absBlockIdx
+  for (j=0; j<timestep; j++) {
+    k+= v->nblocks[j];
+  }
+
+  k += relativeBlockIdx;
+  
+  log_debug("\n blockinfo[%d]: [ ", k);
+  
+  for (j=0; j<v->ndim; j++) 
+    {  
+      blockSize *= v->blockinfo[k].count[j];
+      log_debug("%llu:%llu ", v->blockinfo[k].start[j], v->blockinfo[k].count[j]);
+    }
+  
+  log_debug("]\n");
+  
+  //  log_debug("\t\t   block %d, bytes: %llu \n", k, blockBytes);      
+  
+  return blockSize;
+}
+
+
+static const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx)
+{
+    static char s [100];
+    s [0] = 0;
+
+
+  switch (type)
+    {
+    case adios_unsigned_byte:
+      sprintf (s, "%u", ((uint8_t *) data)[idx]);
+      break;
+
+    case adios_byte:
+      sprintf (s, "%d", ((int8_t *) data)[idx]);
+      break;
+
+    case adios_short:
+      sprintf (s, "%hd", ((int16_t *) data)[idx]);
+      break;
+
+    case adios_unsigned_short:
+      sprintf (s, "%hu", ((uint16_t *) data)[idx]);
+      break;
+
+    case adios_integer:
+      sprintf (s, "%d", ((int32_t *) data)[idx]);
+      break;
+
+    case adios_unsigned_integer:
+      sprintf (s, "%u", ((uint32_t *) data)[idx]);
+      break;
+      
+    case adios_long:
+      sprintf (s, "%lld", ((int64_t *) data)[idx]);
+      break;
+      
+    case adios_unsigned_long:
+      sprintf (s, "%llu", ((uint64_t *) data)[idx]);
+      break;
+      
+    case adios_real:
+      sprintf (s, "%g", ((float *) data)[idx]);
+      break;
+      
+    case adios_double:
+      sprintf (s, "%lg", ((double *) data)[idx]);
+      break;
+      
+    case adios_long_double:
+      sprintf (s, "%Lg", ((long double *) data)[idx]);
+      break;
+      
+    case adios_string:
+      return (char*) ((char *)data+idx);
+      break;
+
+    case adios_complex:
+      sprintf (s, "(%g, %g)",
+	       ((float *) data)[2*idx], ((float *) data)[2*idx+1]);
+      break;
+      
+    case adios_double_complex:
+      sprintf (s, "(%lg, %lg)",
+	       ((double *) data)[2*idx], ((double *) data)[2*idx+1]);
+      break;
+    }
+
+  return s;
+}
+
+//
+//
+// caller frees keys, offsets and bms.
+//
+//
+int fastbit_adios_util_readNoBMSFromIndexFile(ADIOS_FILE* idxFile, ADIOS_VARINFO* v, int timestep, int blockNum, 
+					      double** keys, uint64_t* nk, int64_t** offsets, uint64_t* no,
+					      char** bmsVarName)
+{
+  char keyVarName[100];
+  char offsetName[100];
+
+  *bmsVarName = malloc(100);
+  sprintf(*bmsVarName, "bms-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(keyVarName, "key-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(offsetName, "offset-%d-%d-%d", v->varid, timestep, blockNum);
+
+  log_debug("reading from index file: %s for variables: %s %s %s \n", idxFile->path, *bmsVarName, keyVarName, offsetName);
+
+  ADIOS_VARINFO * keyV = common_read_inq_var (idxFile, keyVarName);
+  ADIOS_VARINFO * offsetV = common_read_inq_var (idxFile, offsetName);
+
+  if ((keyV == 0) || (offsetV == 0)) {
+    log_warn("WARN: no index for this variable.\n");
+    return -1;
+  }
+
+  uint64_t keySize    = (uint64_t)(keyV->dims[0] * common_read_type_size (keyV->type, keyV->value));
+  uint64_t offsetSize = (uint64_t)(offsetV->dims[0] * common_read_type_size (offsetV->type, offsetV->value));
+    
+  *offsets = malloc(offsetSize);
+  *keys    = malloc(keySize);
+
+  uint64_t start[] = {0};
+  uint64_t count_key[] = {keyV->dims[0]};
+  uint64_t count_offset[] = {offsetV->dims[0]};
+
+  ADIOS_SELECTION* keySel = common_read_selection_boundingbox(keyV->ndim, start, count_key);
+  ADIOS_SELECTION* offsetSel = common_read_selection_boundingbox(offsetV->ndim, start, count_offset);
+
+  // idx file has one timestep
+  common_read_schedule_read(idxFile, keySel, keyVarName, 0, 1, NULL, *keys);
+  common_read_schedule_read(idxFile, offsetSel, offsetName, 0, 1, NULL, *offsets);
+
+  common_read_perform_reads(idxFile,1);
+
+  *nk = keyV->dims[0];
+  *no = offsetV->dims[0];
+
+  log_debug(" /key/offset data: length=%lld/%lld\n", *nk, *no);
+  
+  //printData(*bms, bmsV->type, *nb);
+  common_read_selection_delete(keySel);
+  common_read_free_varinfo(keyV);
+
+  common_read_selection_delete(offsetSel);
+  common_read_free_varinfo(offsetV);
+
+  return 0;
+}
+
+int fastbit_adios_util_readFromIndexFile(ADIOS_FILE* idxFile, ADIOS_VARINFO* v, int timestep, int blockNum, 
+					 double** keys, uint64_t* nk, int64_t** offsets, uint64_t* no,
+					 uint32_t** bms, uint64_t* nb)
+
+{
+  char bmsVarName[100];
+  char keyVarName[100];
+  char offsetName[100];
+
+  sprintf(bmsVarName, "bms-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(keyVarName, "key-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(offsetName, "offset-%d-%d-%d", v->varid, timestep, blockNum);
+
+  log_debug("reading from index file: %s for variables: %s %s %s \n", idxFile->path, bmsVarName, keyVarName, offsetName);
+
+  ADIOS_VARINFO * bmsV = common_read_inq_var (idxFile, bmsVarName);
+  ADIOS_VARINFO * keyV = common_read_inq_var (idxFile, keyVarName);
+  ADIOS_VARINFO * offsetV = common_read_inq_var (idxFile, offsetName);
+
+  if ((bmsV == 0) || (keyV == 0) || (offsetV == 0)) {
+    log_warn("WARN: no index for this variable.\n");
+    return -1;
+  }
+
+  uint64_t bmsSize    = (uint64_t)(bmsV->dims[0] * common_read_type_size (bmsV->type, bmsV->value));
+  uint64_t keySize    = (uint64_t)(keyV->dims[0] * common_read_type_size (keyV->type, keyV->value));
+  uint64_t offsetSize = (uint64_t)(offsetV->dims[0] * common_read_type_size (offsetV->type, offsetV->value));
+    
+  *offsets = malloc(offsetSize);
+  *keys    = malloc(keySize);
+  *bms     = malloc(bmsSize);
+
+  uint64_t start[] = {0};
+  uint64_t count_bms[] = {bmsV->dims[0]};
+  uint64_t count_key[] = {keyV->dims[0]};
+  uint64_t count_offset[] = {offsetV->dims[0]};
+
+  ADIOS_SELECTION* bmsSel = common_read_selection_boundingbox(bmsV->ndim, start, count_bms);
+  ADIOS_SELECTION* keySel = common_read_selection_boundingbox(keyV->ndim, start, count_key);
+  ADIOS_SELECTION* offsetSel = common_read_selection_boundingbox(offsetV->ndim, start, count_offset);
+
+  // idx file has one timestep
+  common_read_schedule_read(idxFile, bmsSel, bmsVarName, 0, 1, NULL, *bms);
+  common_read_schedule_read(idxFile, keySel, keyVarName, 0, 1, NULL, *keys);
+  common_read_schedule_read(idxFile, offsetSel, offsetName, 0, 1, NULL, *offsets);
+
+  common_read_perform_reads(idxFile,1);
+
+  *nk = keyV->dims[0];
+  *no = offsetV->dims[0];
+  *nb = bmsV->dims[0];
+
+  log_debug(" bms/key/offset data: length=%lld/%lld/%lld\n", *nb, *nk, *no);
+  
+  //printData(*bms, bmsV->type, *nb);
+  common_read_selection_delete(bmsSel);
+  common_read_free_varinfo(bmsV);
+
+  common_read_selection_delete(keySel);
+  common_read_free_varinfo(keyV);
+
+  common_read_selection_delete(offsetSel);
+  common_read_free_varinfo(offsetV);
+
+  return 0;
+}
+ 
+void fastbit_adios_util_printData(void* data, enum ADIOS_DATATYPES type, uint64_t size)
+{
+  /*
+see if blocks are read by bounding boxes as in blockinfo
+or is lined as 
+		timestep n (1,...nblocks)
+		do not see how i (in sum_nblocks) will reflect timestep...
+*/
+
+  int i=0;
+  int max = 10;
+  if (max > size) {
+    max = size;
+  }
+  log_debug("  \tfirst %d data out of %lld:[", max, size);
+  for (i=0; i<max; i++) {
+    log_debug("%s ", value_to_string(type, data, i));
+  }
+  log_debug("]\n");
+}
diff --git a/src/query/fastbit_adios.h b/src/query/fastbit_adios.h
new file mode 100644
index 0000000..c0cd85d
--- /dev/null
+++ b/src/query/fastbit_adios.h
@@ -0,0 +1,84 @@
+#ifndef __FASTBIT_ADIOS_H__
+#define __FASTBIT_ADIOS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "public/adios_read.h"
+#include <iapi.h>
+
+#include "public/adios_query.h"
+
+#ifdef __MACH__
+#include <mach/mach_time.h>
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 0
+int clock_gettime(int clk_id, struct timespec *t){
+  mach_timebase_info_data_t timebase;
+  mach_timebase_info(&timebase);
+  uint64_t time;
+  time = mach_absolute_time();
+  double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom);
+  double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9);
+  t->tv_sec = seconds;
+  t->tv_nsec = nseconds;
+  return 0;
+}
+#else
+#include <time.h>
+#endif
+
+#include <math.h>
+
+/** A simple reader to be used by FastBit for index reconstruction.  In
+    this simple case, the first argument is the whole array storing all the
+    serialized bitmaps.  This first argument can be used to point to a data
+    structure pointing to any complex object type necassary.
+*/
+//
+// this static function is from fastbit example/tiapi.c
+//
+static int mybmreader(void *ctx, uint64_t start,uint64_t count, uint32_t *buf)
+{
+  const uint32_t *bms = (uint32_t*)ctx + start;
+  unsigned j;
+  for (j = 0; j < count; ++ j) {
+    buf[j] = bms[j];
+  }
+  return 0;
+}
+
+long fastbit_adios_getCurrentTimeMillis();
+
+int fastbit_adios_util_getRelativeBlockNumForPoint(ADIOS_VARINFO* v,  uint64_t* point, int timestep);
+void fastbit_adios_util_checkNotNull(void* fastbitHandle, const char* arrayName);
+  
+char* fastbit_adios_util_getFastbitIndexFileName(const char* dataFileLoc);
+int fastbit_adios_util_FastbitIndexFileExists(const char* dataFileLoc);
+ADIOS_FILE* fastbit_adios_util_getFastbitIndexFileToRead(const char* dataFileLoc, MPI_Comm comm);
+
+void fastbit_adios_util_printData(void* data, enum ADIOS_DATATYPES type, uint64_t size);
+
+FastBitDataType fastbit_adios_util_getFastbitDataType(enum ADIOS_DATATYPES type);
+
+FastBitCompareType fastbit_adios_util_getFastbitCompareType(enum ADIOS_PREDICATE_MODE op);
+
+const char * fastbit_adios_util_value_to_string (enum ADIOS_DATATYPES type, void * data, int idx);
+
+uint64_t fastbit_adios_util_getAdiosBlockSize(ADIOS_VARINFO* v, int k); // k = blockNumber;
+
+  
+int fastbit_adio_util_readFromFastbitIndexFile(ADIOS_FILE* idxFile, ADIOS_VARINFO* v, int timestep, int blockNum, 
+					       double** keys, uint64_t* nkeys, int64_t** offsets, uint64_t* no,
+					       uint32_t** bms, uint64_t* nb);
+  
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ADIOS_QUERY_H__ */
diff --git a/src/query/query_alac.c b/src/query/query_alac.c
new file mode 100644
index 0000000..31e7a1a
--- /dev/null
+++ b/src/query/query_alac.c
@@ -0,0 +1,1415 @@
+/*
+ * query_alacrity.c
+ *
+ *  Created on: Jun 1, 2014
+ *      Author: xczou
+ */
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <float.h>
+#include "public/adios_error.h"
+#include "public/adios_read_ext.h"
+#include "public/adios_query.h"
+#include "public/adios_selection.h"
+#include "transforms/adios_transform_alacrity_common.h"
+#include "core/common_read.h"
+#include "common_query.h"
+//#include <alacrity.h>
+
+
+#ifdef ALACRITY
+#include "alacrity.h"
+
+/************Uncompressed bitmap*********/
+/***********This is an internal data structure for multi-variate constraints query processing ******/
+typedef struct{
+	uint64_t *bits;       // uint64_t array holds the bits
+	uint64_t length;      // the bits array size
+	uint64_t numSetBits;  // actual element size of this bits array represents ( the number of set bits(1s) in the bits array)
+	uint64_t realElmSize; // the number of elements the bits are presenting
+	                      // if number of elements is 100, then, the length = 2 ( 100 / 64 + 100%64 ), and realElmSize = 100
+	uint64_t lastConvRid; // it is only used when the bit map is converted to RIDs, it indicates the bit position (local RID) of last RID conversion
+	                      // if the last converting bit array is ....(234) 0001 0001 0000 0000 , then lastConvRid = 238 indicates the left RID 242(0001) has
+	                      // not been converted
+} ADIOS_ALAC_BITMAP;
+
+#define FreeALACBITMAP(b) { FREE(b->bits); FREE(b) }
+
+
+#define MAX_DIMS 32
+
+
+/**** Funcs. that are internal funcs. ********/
+
+uint64_t * convertALACBitmapTomemstream( ADIOS_ALAC_BITMAP * b);
+
+void convertMemstreamToALACBitmap( void *mem , ADIOS_ALAC_BITMAP * bout /*OUT*/);
+
+ADIOS_ALAC_BITMAP * adios_alac_process(ADIOS_QUERY* q, int timeStep,
+		bool estimate);
+
+ADIOS_ALAC_BITMAP * adios_alac_bitsOp(ADIOS_ALAC_BITMAP * op1,
+		ADIOS_ALAC_BITMAP * op2, enum ADIOS_CLAUSE_OP_MODE operator);
+
+uint64_t calSetBitsNum(ADIOS_ALAC_BITMAP *b);
+
+// since we could not set initial lastConvRid to 0 ( 0 represents the first RID in the bitmap )
+// we need extra effort to set lastConvRid to initial state
+void initLastConvRid (ADIOS_ALAC_BITMAP *b);
+
+bool isLastConvRidInit(const ADIOS_ALAC_BITMAP *b);
+
+static inline int coordinateConversionWithCheck(uint64_t * coordinates, const  int dim
+		, const  uint64_t *srcstart, const  uint64_t *deststart, const  uint64_t *destend);
+
+static inline bool ridConversionWithCheck(const rid_t rid/*relative to local src selectoin*/
+		, const uint64_t *srcstart, const uint64_t *srccount, const uint64_t *deststart, const uint64_t *destcount,
+		const int dim, rid_t *relativeRid , const int Corder);
+
+static rid_t ridConversionWithoutCheck(const rid_t rid/*relative to local src selectoin*/,
+		const uint64_t *srcstart, const uint64_t *srccount, const uint64_t *deststart, const uint64_t *destcount,
+		const int dim, const int Corder);
+
+static inline void ridToCoordinates(const int dim, const int Corder, const rid_t rid, const uint64_t * const dimSize , uint64_t * const coordinates /*OUT*/);
+
+static void init_lookup();
+
+bool boxEqual(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgBB, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *interBB);
+
+void readPartitionMeta(int blockId, uint64_t metaSize, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, ALMetadata *pm /*OUT*/);
+
+void readTransformedElms(ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, int blockId, uint64_t start_elem, uint64_t num_elems, int is_timestep_relative, void * outputData/*out*/);
+
+void readIndexData(int blockId, uint64_t offsetSize /*in bytes*/
+		,uint64_t length /*in bytes*/, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, void *idxBytes /*OUT*/);
+
+void readLowOrderBytes(int blockId, uint64_t offsetSize /*in bytes*/
+		,uint64_t length /*in bytes*/, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, void *idxBytes /*OUT*/);
+
+void resolveQueryBoundary(ADIOS_QUERY *adiosQuery, double *hb, double *lb);
+
+static inline void setRidToBits(bool isPGCovered ,uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount,
+		int ndim, rid_t * idx, uint64_t totalRids,
+		ADIOS_ALAC_BITMAP *alacResultBitmap /*IN&OUT*/, int Corder);
+
+
+void proc_write_block(int blockId, bool isPGCovered, ADIOS_VARTRANSFORM *ti, ADIOS_QUERY * adiosQuery, int startStep, bool estimate
+		, ALUnivariateQuery * alacQuery , double lb , double hb
+		,uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount
+		, ADIOS_ALAC_BITMAP * alacResultBitmap /*OUT*/ , int Corder);
+
+
+inline void setBitsinBitMap(rid_t rid, ADIOS_ALAC_BITMAP * alacResultBitmap){
+	uint32_t word = (uint32_t) (rid >> 6);
+	if (word > alacResultBitmap->length){
+		printf("what a hell\n");
+	}
+	assert(word <= alacResultBitmap->length);
+	alacResultBitmap->bits[word]
+			|= (1LL << (rid & 0x3F));
+}
+
+#define BITNSLOTS64(nb) ((nb + 64 - 1) / 64)
+
+static uint8_t bits_in_char[256] = {
+#   define B2(n) n,     n+1,     n+1,     n+2
+#   define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
+#   define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
+		B6(0), B6(1), B6(1), B6(2)};
+
+static isInitialized = 0; // 0: the lookup table is not initialized ; 1 : the lookup table is initialized
+static unsigned char set_bit_count[65536];
+static unsigned char set_bit_position[65536][16];
+
+
+/**** END -- Funcs. that are internal funcs. ********/
+
+void initLastConvRid (ADIOS_ALAC_BITMAP *b){
+	b->lastConvRid = b->realElmSize + 1;
+}
+
+bool isLastConvRidInit(const ADIOS_ALAC_BITMAP *b){
+	return (b->lastConvRid == (b->realElmSize +1));
+}
+
+
+
+
+/*since we are set data view is physical view, the element size is 1 byte */
+
+void readTransformedElms(ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, int blockId, uint64_t start_elem, uint64_t num_elems, int is_timestep_relative, void * outputData/*out*/){
+	ADIOS_SELECTION *sel = adios_selection_writeblock_bounded(blockId, start_elem, num_elems, is_timestep_relative);
+	common_read_schedule_read_byid(fp, sel, vi->varid, startStep, numStep, NULL, outputData);
+	common_read_perform_reads(fp, 1);
+	// adios_selection_writeblock_bounded internally malloc data for adios_selection
+	// so I need to free it before the next usage
+	common_read_selection_delete(sel);
+}
+
+void readBlockData(int gBlockId /*global block id */, ADIOS_QUERY * adiosQuery, int startStep,
+		ADIOS_VARINFO * varInfo, uint64_t dataElmNum, void ** data){
+	adios_read_set_data_view(adiosQuery->file, LOGICAL_DATA_VIEW); // switch to the transform view,
+	int dataElmSize = common_read_type_size(varInfo->type, NULL); // data element size, in bytes
+	char * blockData = (char*) (*data);
+	blockData = (char *) malloc(sizeof(char) * dataElmSize * dataElmNum);
+	ADIOS_SELECTION *sel = adios_selection_writeblock_bounded(gBlockId, 0, dataElmNum, 0); // entire PG selection
+	common_read_schedule_read_byid(adiosQuery->file, sel, varInfo->varid, startStep, 1, NULL, blockData);
+}
+void readIndexData(int blockId, uint64_t offsetSize /*in bytes*/
+		,uint64_t length /*in bytes*/, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, void *idxBytes /*OUT*/){
+	const int is_streaming = fp->is_streaming;
+	readTransformedElms(fp, vi, startStep, numStep, blockId, offsetSize, length, is_streaming, idxBytes);
+}
+
+void readLowOrderBytes(int blockId/*if file, global block id; if streaming, block id relative to current step*/, uint64_t offsetSize /*in bytes*/
+		,uint64_t length /*in bytes*/, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, void *idxBytes /*OUT*/){
+	const int is_streaming = fp->is_streaming;
+	readTransformedElms(fp, vi, startStep, numStep, blockId, offsetSize,length, is_streaming, idxBytes);
+}
+
+void readPartitionMeta( int blockId /*if file, global block id; if streaming, block id relative to current step*/, uint64_t metaSize, ADIOS_FILE* fp,ADIOS_VARINFO* vi
+		, int startStep, int numStep
+		, ALMetadata *pm /*OUT*/){
+	const int is_streaming = fp->is_streaming;
+	memstream_t ms = memstreamInitReturn(malloc(metaSize));
+	uint64_t metaStartPos= 0;
+	readTransformedElms(fp, vi, startStep,numStep,blockId, metaStartPos, metaSize, is_streaming, ms.buf);
+	ALDeserializeMetadata(pm, &ms);
+	memstreamDestroy(&ms, true);
+
+}
+
+bool boxEqual(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgBB, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *interBB){
+	if (pgBB->ndim != interBB->ndim)
+		return false;
+	 // if these two boxes are not equal, then,
+	// it means two boxes are intersecting / partial overlapping
+	int k = 0;
+	for(k = 0 ; k < pgBB->ndim ; k ++){
+		if (pgBB->count[k]!=interBB->count[k] ||
+				pgBB->start[k] != interBB->start[k]){
+			return false;
+		}
+	}
+	return true;
+}
+
+
+static void init_lookup() {
+	memset(set_bit_count, 0, 256);
+	int i = 0, j;
+	for (i = 0; i < 65536; i++) {
+//		set_bit_count[i] = __builtin_popcount(i); // total bit 1 for value
+		set_bit_count[i] =  bits_in_char [i & 0xff]
+						   +  bits_in_char [(i >>  8) & 0xff]
+						   +  bits_in_char [(i >> 16) & 0xff]
+						   +  bits_in_char [(i >> 24) & 0xff]
+						   ;
+		unsigned short int temp = i;
+		int counter = set_bit_count[i] - 1;
+		for (j = 15; j >= 0; j--) {
+			unsigned int temp1 = temp >> j & 0x0001;
+			if (temp1 == 1) {
+				set_bit_position[i][counter--] = j;
+			}
+		}
+
+	}
+}
+
+
+
+
+uint64_t calSetBitsNum(ADIOS_ALAC_BITMAP *b) {
+
+	uint64_t total = 0, count = 0, i = 0;
+	for (; i < b->length; i++) {
+		  count = bits_in_char[b->bits[i] & 0xff]
+				+ bits_in_char[(b->bits[i] >> 8) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 16) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 24) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 32) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 40) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 48) & 0xff]
+				+ bits_in_char[(b->bits[i] >> 56) & 0xff];
+		total += count;
+	}
+	return total;
+}
+
+// Supports bitmap AND or OR operation.
+// The space of second operand is freed, and the first operand serves as the results of the operation
+ADIOS_ALAC_BITMAP * adios_alac_bitsOp(ADIOS_ALAC_BITMAP * op1,
+		ADIOS_ALAC_BITMAP * op2, enum ADIOS_CLAUSE_OP_MODE operator) {
+	int64_t i = 0;
+	if (operator == ADIOS_QUERY_OP_AND) {
+		for (i = 0; i < op1->length; i++) {
+			op1->bits[i] &= op2->bits[i];
+		}
+
+		FreeALACBITMAP(op2);
+//		free(op2->bits);
+//		op1->elmSize = calSetBitsNum(op1);
+
+	} else if (operator == ADIOS_QUERY_OP_OR) {
+
+		for (i = 0; i < op1->length; i++) {
+			op1->bits[i] |= op2->bits[i];
+		}
+
+		FreeALACBITMAP(op2);
+	//		free(op2->bits);
+//		op1->elmSize = calSetBitsNum(op1);
+
+	} else {
+		printf("Operator[%d] is not surpported now \n ", operator);
+	}
+	return op1;
+}
+
+
+static inline int coordinateConversionWithCheck(uint64_t * coordinates, const  int dim, const  uint64_t *srcstart, const  uint64_t *deststart, const  uint64_t *destend){
+
+	int i = 0;
+	for (i = 0; i < dim; i++) {
+		coordinates[i] += (srcstart[i] /*global coordinate*/ );
+		if ( coordinates[i] < deststart[i] || coordinates[i] > destend[i]){
+			return (i+1) * -1;
+		}
+	}
+
+	/*change coordinate to the destination box*/
+	for (i = 0; i < dim; i++) {
+		coordinates[i] -=  deststart[i];
+	}
+	return 1;
+}
+
+
+/* Give a rid that is relative to a src region
+ * return a rid that is relative to dest selection box
+ * Assume all the start & count array has slowest dimension at first position
+ * NOTE: some redundant codes are for performance sake
+ */
+static inline bool ridConversionWithCheck(const rid_t rid/*relative to local src selectoin*/, const uint64_t *srcstart, const uint64_t *srccount, const uint64_t *deststart, const uint64_t *destcount,
+		const int dim, rid_t *relativeRid , const int Corder ){
+
+	int i = 0;
+	uint64_t coordinates[MAX_DIMS];
+	uint64_t destend[MAX_DIMS];
+
+	for(i=0; i < dim ; i ++){
+		destend[i] = deststart[i] + destcount[i] -1;
+	}
+
+	ridToCoordinates(dim, Corder, rid, srccount, coordinates);
+
+	if (coordinateConversionWithCheck(coordinates, dim, srcstart, deststart, destend) < 0) {
+			return false;
+	}
+
+	rid_t tmpRelativeRid = 0;
+	if (Corder) {
+		for (i = 0; i < dim; i++){
+			tmpRelativeRid *= destcount[i];
+			tmpRelativeRid += coordinates[i];
+		}
+	} else {
+		for (i = dim-1; i >= 0; i--){
+			tmpRelativeRid *= destcount[i];
+			tmpRelativeRid += coordinates[i];
+		}
+	}
+
+	*relativeRid = tmpRelativeRid;
+	return true;
+}
+
+
+/*
+ * TODO:
+ * handle with c-order and fortran order
+ */
+static inline void ridToCoordinates(const int dim, const int Corder, const rid_t rid, const uint64_t * const dimSize , uint64_t * const coordinates /*OUT*/) {
+	int i;
+	rid_t remain = rid;
+	if (Corder) {	// c-order
+		for (i = dim - 1; i >= 0; i--) {
+			coordinates[i] = remain % dimSize[i];
+			remain /= dimSize[i];
+		}
+	} else { //f-order
+		for (i = 0; i < dim; i++) {
+			coordinates[i] = remain % dimSize[i];
+			remain /= dimSize[i];
+		}
+	}
+}
+
+/*
+ * Corder: 1 => c-order , 0=> fortran-order
+		count={2,5, 7}
+		coord= {1,3,4}
+		c-order :    1 * 5 * 7 + 3 * 7 + 4 = 35 + 21 + 4 =
+		expected RID: 4 + 3*7 + 1*35 = 4 + 21 + 35 = 60
+		relativeRID = 0	(0)
+		relativeRID *= 2	(0)
+		relativeRID += 1	(1)
+		relativeRID *= 5	(5)
+		relativeRID += 3	(8)
+		relativeRID *= 7	(56)
+		relativeRID += 4	(60)
+
+	( (0*2 + 1 ) *5 + 3 )* 7 + 4 = 1*5*7 + 3*7 + 4
+ */
+
+static inline rid_t ridConversionWithoutCheck(const rid_t rid/*relative to local src selectoin*/,
+		const uint64_t *srcstart, const uint64_t *srccount, const uint64_t *deststart, const uint64_t *destcount,
+		const int dim, const int Corder){
+
+	int i;
+	uint64_t coordinates[MAX_DIMS];
+
+	// First convert the RID in the src box to coordinates in the dest box
+	ridToCoordinates(dim, Corder, rid, srccount, coordinates);
+	for (i = 0; i < dim; i++)
+		coordinates[i] = coordinates[i] + srcstart[i] - deststart[i];
+
+	// Then, convert the coordinates in the dest box back to an RID
+	uint64_t relativeRid = 0;
+	if (Corder) {
+		for (i = 0; i < dim; i++){
+			relativeRid *= destcount[i];
+			relativeRid += coordinates[i];
+		}
+	} else {
+		for (i = dim-1; i >= 0; i--){
+			relativeRid *= destcount[i];
+			relativeRid += coordinates[i];
+		}
+	}
+
+	return relativeRid;
+}
+
+/*
+ * usage: this MACRO tightly depends on the usage context,
+ * which requires the context to declare the exact variables
+ */
+#define CHECK_ELEMENT(code) { \
+		for(el= 0; el < totalElm; el ++){              \
+			if ((code)){                               \
+				rid = decodeRids[el];                  \
+				if (ridConversionWithCheck(rid, srcstart,srccount, deststart,destcount, dim, &newRid, Corder)){  \
+					setBitsinBitMap(newRid, alacResultBitmap);       \
+					alacResultBitmap->numSetBits ++;   \
+				}                                      \
+			}                                          \
+		}                                              \
+}
+
+// printf("%"PRIu32"->%"PRIu32",", rid, newRid);
+
+/*
+ * NOTE : relies on  a lots of variables:
+ * isPGCovered, el, srcstart, srcount, deststart, destcount, ndim, newRid, totalElm, op, Corder
+ */
+#define CHECK_NODECODE_ELEMENT(code) {                         \
+		if (isPGCovered){                             \
+			for(el= 0; el < totalElm; el ++){         \
+				if (code) {                           \
+					newRid = ridConversionWithoutCheck(el, srcstart,srccount, deststart,destcount, ndim,Corder);   \
+					setBitsinBitMap(newRid, alacResultBitmap);    \
+					alacResultBitmap->numSetBits ++;              \
+				}                                                 \
+			}                                                     \
+		}else {                                                   \
+			for(el= 0; el < totalElm; el ++){                     \
+				if (code) {                                       \
+					if (ridConversionWithCheck(el,	srcstart,srccount, deststart,destcount, ndim, &newRid,Corder)){  \
+						setBitsinBitMap(newRid, alacResultBitmap); \
+						alacResultBitmap->numSetBits ++;           \
+					}                                              \
+				}                                                  \
+			}                                                      \
+		}                                                          \
+}
+
+/*
+ * NOTE: for ADIOS_NE (!=), we still use == to do the candidate check,
+ * since we first treat != to be =, and at end, we will flip the bits
+ */
+#define CHECK_GENERIC_DATA(data, FUNC) {                       \
+	switch(op){                                          \
+		case(ADIOS_LT):                                  \
+				FUNC((data)[el] < hb);            \
+				break;                                   \
+		case (ADIOS_LTEQ):                               \
+				FUNC((data)[el] <= hb);           \
+				break;                                   \
+		case (ADIOS_GT):                                 \
+				FUNC((data)[el] > lb);            \
+				break;                                   \
+		case (ADIOS_GTEQ):                               \
+				FUNC((data)[el] >= lb);           \
+				break;                                   \
+		case (ADIOS_EQ):                                 \
+				FUNC((data)[el] ==  lb);          \
+				break;                                   \
+		case (ADIOS_NE):                                 \
+				FUNC((data)[el] == lb);           \
+				break;                                   \
+		default :                                        \
+			printf("unknown predicate mode %d \n", op);  \
+	}                                                    \
+}
+
+
+
+/*
+ * return : 1 => yes, there is unsupported data type
+ *          0 => no
+ */
+int checkUnsupportedDataType(enum ADIOS_DATATYPES dataType) {
+
+	return !( (dataType == adios_real ) ||
+			 (dataType == adios_double) ) ;
+}
+int adios_alac_check_candidate(ALMetadata *partitionMeta, bin_id_t startBin, bin_id_t endBin , double hb, double lb
+		, uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount, int dim
+		, ADIOS_QUERY * adiosQuery , const char *inputCurPtr /*index bytes of entire PG*/
+		, bool decoded  /*true: need decoding */ , char * lowOrderBytes /*low order bytes of from startBin to endBin*/
+		, enum ADIOS_DATATYPES dataType
+		,ADIOS_ALAC_BITMAP * alacResultBitmap /*OUT*/, int Corder){
+	const ALBinLayout * bl = &(partitionMeta->binLayout);
+	/*assert(adiosQuery->_sel->type == ADIOS_SELECTION_BOUNDINGBOX);
+	const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(adiosQuery->_sel->u.bb);
+	uint64_t * destcount = bb->count;  uint64_t * deststart = bb->start; //region dimension of Selection box
+	uint64_t *srcstart = pgBB->start; uint64_t *srccount = pgBB->count; //PG region dimension
+	int dim = pgBB->ndim;*/
+	uint32_t * decodeRids;
+	bin_offset_t totalElm = bl->binStartOffsets[endBin] - bl->binStartOffsets[startBin];
+	if (decoded){
+		const uint64_t *compBinStartOffs = partitionMeta->indexMeta.u.ciim.indexBinStartOffsets;
+		uint64_t  binCompressedLen = compBinStartOffs[endBin] - compBinStartOffs[startBin];
+		decodeRids= (uint32_t*) malloc(sizeof(uint32_t)*totalElm);
+		ALDecompressRIDs( inputCurPtr, binCompressedLen, decodeRids, &totalElm);
+		assert(totalElm== bl->binStartOffsets[endBin] - bl->binStartOffsets[startBin]);
+	}else{
+		decodeRids = (uint32_t *) inputCurPtr;
+	}
+
+	char * data = (char *) malloc(partitionMeta->elementSize*totalElm); // recovered data in bytes
+	reconstituteData(partitionMeta, startBin, endBin,
+										 lowOrderBytes, data);
+	//Following variables are needed for the micros definition
+	rid_t newRid;
+	enum ADIOS_PREDICATE_MODE op = adiosQuery->predicateOp;
+	bin_offset_t el = 0;   rid_t rid ;
+
+	switch(dataType){
+		case adios_unsigned_byte:
+			CHECK_GENERIC_DATA((unsigned char  *)data, CHECK_ELEMENT );
+			break;
+		case adios_byte:
+			CHECK_GENERIC_DATA((signed char  *)data, CHECK_ELEMENT );
+			break;
+		case adios_string:
+			CHECK_GENERIC_DATA((char *)data, CHECK_ELEMENT );
+			break;
+		case adios_unsigned_short:
+			CHECK_GENERIC_DATA((unsigned short  *)data, CHECK_ELEMENT );
+			break;
+		case adios_short:
+			CHECK_GENERIC_DATA((signed short  *)data, CHECK_ELEMENT );
+			break;
+		case adios_unsigned_integer:
+			CHECK_GENERIC_DATA((unsigned int *)data, CHECK_ELEMENT );
+			break;
+		case adios_integer:
+			CHECK_GENERIC_DATA((signed int *)data, CHECK_ELEMENT );
+			break;
+		case adios_unsigned_long:
+			CHECK_GENERIC_DATA((unsigned long long  *)data, CHECK_ELEMENT );
+			break;
+		case adios_long:
+			CHECK_GENERIC_DATA((signed long long  *)data, CHECK_ELEMENT );
+			break;
+		case adios_real:
+			CHECK_GENERIC_DATA((float *)data, CHECK_ELEMENT );
+			break;
+		case adios_double:
+			CHECK_GENERIC_DATA((double *)data, CHECK_ELEMENT );
+			break;
+	}
+
+
+	free(data);
+	if(decoded)
+		free(decodeRids);
+	return 0;
+
+}
+
+/*
+ * go through every data value in the array, check whether the value satisfies the query condition
+ * return: 1 ==> error, 0 ==> no error
+ */
+int literallyCheckData(void *data, uint64_t totalElm , enum ADIOS_DATATYPES dataType, ADIOS_QUERY * adiosQuery, double hb, double lb
+		, uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount, int ndim, bool isPGCovered
+		,ADIOS_ALAC_BITMAP * alacResultBitmap /*OUT*/,int Corder){
+	uint32_t newRid ;
+	uint64_t el = 0;
+	enum ADIOS_PREDICATE_MODE op = adiosQuery->predicateOp;
+//	GENERIC_DATA_CONV(data, CHECK_NODECODE_ELEMENT );
+	switch(dataType){
+		case adios_unsigned_byte:
+			CHECK_GENERIC_DATA((unsigned char  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_byte:
+			CHECK_GENERIC_DATA((signed char  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_string:
+			CHECK_GENERIC_DATA((char *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_unsigned_short:
+			CHECK_GENERIC_DATA((unsigned short  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_short:
+			CHECK_GENERIC_DATA((signed short  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_unsigned_integer:
+			CHECK_GENERIC_DATA((unsigned int *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_integer:
+			CHECK_GENERIC_DATA((signed int *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_unsigned_long:
+			CHECK_GENERIC_DATA((unsigned long long  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_long:
+			CHECK_GENERIC_DATA((signed long long  *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_real:
+			CHECK_GENERIC_DATA((float *)data, CHECK_NODECODE_ELEMENT );
+			break;
+		case adios_double:
+			CHECK_GENERIC_DATA((double *)data, CHECK_NODECODE_ELEMENT );
+			break;
+	}
+
+	free(data);
+	return 0;
+
+}
+/*for each RID, set bit as 1 at corresponding position */
+/*check the rid whether it belongs to user selection box
+ if the current PG is not fully covered by user selection box*/
+void setRidToBits(bool isPGCovered
+		,uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount,
+		int ndim, rid_t * idx, uint64_t totalRids,
+		ADIOS_ALAC_BITMAP *alacResultBitmap /*IN&OUT*/, int Corder){
+	uint32_t newRid ;
+	if (isPGCovered){ // if PG is fully covered by the user bounding box, we dont need to check the new location(position) of converted point
+		uint64_t ni;
+		for ( ni = 0; ni < totalRids; ni++) {
+			rid_t rid_val = idx[ni];
+			newRid = ridConversionWithoutCheck(rid_val, srcstart,srccount, deststart,destcount, ndim, Corder);
+#ifdef RIDBUG
+			printf("%"PRIu32"->%"PRIu32",", rid_val, newRid);
+#endif
+			setBitsinBitMap(newRid, alacResultBitmap);
+		}
+		alacResultBitmap->numSetBits += totalRids;
+	}else {
+		uint64_t ni;
+		for ( ni = 0; ni < totalRids; ni++) {
+			rid_t rid_val = idx[ni];
+			if (ridConversionWithCheck(rid_val,	srcstart,srccount, deststart,destcount, ndim, &newRid, Corder)){
+#ifdef RIDBUG
+			printf("%"PRIu32"->%"PRIu32",", rid_val, newRid);
+#endif
+				setBitsinBitMap(newRid, alacResultBitmap);
+				alacResultBitmap->numSetBits ++;
+			}
+		}
+	}
+}
+
+
+
+void resolveQueryBoundary(ADIOS_QUERY *adiosQuery, double *hb, double *lb)
+{
+	(*hb)= DBL_MAX;
+	(*lb)= -DBL_MAX;
+    if(adiosQuery->predicateOp == ADIOS_LT || adiosQuery->predicateOp == ADIOS_LTEQ){
+    	*hb = atof(adiosQuery->predicateValue);
+    }else if(adiosQuery->predicateOp == ADIOS_GT || adiosQuery->predicateOp == ADIOS_GTEQ){
+    	*lb = atof(adiosQuery->predicateValue);
+	}else if(adiosQuery->predicateOp == ADIOS_EQ){
+		//following two cases are tricky to ALACRITY
+		*hb = atof(adiosQuery->predicateValue);
+		*lb = *hb;
+	}else if(adiosQuery->predicateOp == ADIOS_NE){
+		//TODO: flip the bits once the evaluation is done
+		*hb = atof(adiosQuery->predicateValue);
+		*lb = *hb;
+	}else{
+			printf("Unsupported predicate type[%d] \n", adiosQuery->predicateOp);
+	}
+
+}
+
+/*
+ * read low order bytes from 'low_bin'  bin to 'hi_bin'
+ * allocated the data buffer in this function, requiring caller to free the readData
+ */
+char * readLowDataAmongBins(ALMetadata *partitionMeta, bin_id_t low_bin , bin_id_t hi_bin
+		, uint64_t lowDataByteStartPos,  ADIOS_QUERY * adiosQuery
+		, int blockId, int startStep, int numStep){
+	const uint64_t bin_read_len = ALGetDataBinOffset( partitionMeta, hi_bin) - ALGetDataBinOffset( partitionMeta, low_bin); // in bytes
+	uint64_t lowDataBinOffset = lowDataByteStartPos+ ALGetDataBinOffset( partitionMeta, low_bin); /*element offset*/;
+	// low order bytes from low_bin to hi_bin, ITS NOT entire low order byte
+	char * readData= (char *) calloc(bin_read_len, sizeof(char));
+	readLowOrderBytes(blockId,lowDataBinOffset, bin_read_len
+	         , adiosQuery->file, adiosQuery->varinfo, startStep, numStep, (void *)readData);
+	return readData;
+}
+
+
+char * readIndexAmongBins(ALMetadata *partitionMeta, bin_id_t low_bin , bin_id_t hi_bin
+		, uint64_t indexStartPos,  ADIOS_QUERY * adiosQuery
+		, int blockId, int startStep, int numStep){
+	const uint64_t bin_read_len = ALGetIndexBinOffset( partitionMeta, hi_bin) - ALGetIndexBinOffset( partitionMeta, low_bin); // in bytes
+	uint64_t lowDataBinOffset = indexStartPos+ ALGetIndexBinOffset( partitionMeta, low_bin); /*element offset*/;
+	// low order bytes from low_bin to hi_bin, ITS NOT entire low order byte
+	char * readData= (char *) calloc(bin_read_len, sizeof(char));
+	readLowOrderBytes(blockId,lowDataBinOffset, bin_read_len
+	         , adiosQuery->file, adiosQuery->varinfo, startStep, numStep, (void *)readData);
+	return readData;
+}
+
+
+void proc_write_block(int gBlockId /*its a global block id*/, bool isPGCovered, ADIOS_VARTRANSFORM *ti, ADIOS_QUERY * adiosQuery, int startStep, bool estimate
+		, ALUnivariateQuery * alacQuery , double lb , double hb
+		,uint64_t *srcstart, uint64_t *srccount, uint64_t *deststart, uint64_t *destcount
+		, ADIOS_ALAC_BITMAP * alacResultBitmap /*OUT*/ , int Corder){
+
+#ifdef RIDBUG
+	printf("PG [%d], RIDs relative to PG converted to RIDs relative to output BoundingBox: ", gBlockId);
+#endif
+
+	int numStep = 1; // only deal with one timestep
+//	uint64_t metaSize, indexSize, dataSize;
+	ADIOS_VARINFO * varInfo = adiosQuery->varinfo;
+	int ndim = varInfo->ndim;
+	ADIOS_TRANSFORM_METADATA * tmetas = ti->transform_metadatas;
+	ADIOS_TRANSFORM_METADATA tmeta = tmetas[gBlockId];
+	//	assert(tmeta->length == 24);
+
+	adios_transform_alacrity_metadata *alac_metadata = (adios_transform_alacrity_metadata *) malloc(sizeof(adios_transform_alacrity_metadata));
+	//the metadata order is alacrity meta, alacrity index, alacrity LoB, raw data (original data)
+	read_alacrity_transform_metadata(tmeta.length, tmeta.content, alac_metadata);
+	//It now assumes LoB along with OD (original data)
+
+
+	//TODO: offset of each PG should be included
+//	printf("PG[%d] has meta size[ %" PRIu64 "], index size[ %" PRIu64 "], and data size[ %" PRIu64 "] \n", blockId, metaSize,  indexSize, dataSize);
+
+	// transformed data has 1 dimension,
+	// 1. load partition Metadata
+	// NOTE: One ALACRITY PG Data is written in the below format:  [meta data] | [low order bytes data] | [ index data]
+	ALMetadata partitionMeta;
+	readPartitionMeta(gBlockId, alac_metadata->meta_size,adiosQuery->file, varInfo
+					,startStep,numStep,&partitionMeta);
+	const uint8_t insigbytes = insigBytesCeil(&partitionMeta);
+
+	//2. find touched bin
+	bin_id_t low_bin, hi_bin;
+	_Bool are_bins_touched = findBinRange1C(&partitionMeta, alacQuery, &low_bin,
+			&hi_bin);
+
+	if (are_bins_touched) {
+
+		//3. load index size
+		uint64_t indexStartPos =  alac_metadata->index_offset ;
+		char * index = readIndexAmongBins(&partitionMeta
+									, low_bin,  hi_bin, indexStartPos, adiosQuery, gBlockId, startStep, numStep);
+		char * input_index = index;
+		const ALBinLayout * bl = &(partitionMeta.binLayout);
+		ALIndex* indexPtr = &index;
+		//TODO: distinguish the offset btw two bins for compressed and uncompressed index
+		// is the offset byte-level or element-level?
+		if (partitionMeta.indexMeta.indexForm == ALInvertedIndex) {
+			// indexes are inverted indexes that are not compressed,  we build bitmaps for each rid;
+			//element offset, instead of byte element
+			uint64_t resultCount = bl->binStartOffsets[hi_bin] - bl->binStartOffsets[low_bin];
+
+			if (estimate) {
+				setRidToBits(isPGCovered, srcstart, srccount, deststart, destcount, ndim
+						, (rid_t *)index, resultCount, alacResultBitmap,Corder);
+
+			} else {
+				uint64_t lowByteStartPos2 = alac_metadata->lob_offset;
+				char * lowOrderBytes2  = readLowDataAmongBins(&partitionMeta
+										,low_bin, hi_bin,  lowByteStartPos2, adiosQuery, gBlockId, startStep, numStep);
+				char *lowOrderPtr2 = lowOrderBytes2; // temporary pointer
+				rid_t * decodedRid = (rid_t *) index;
+
+				// It touches at least 3 bins, so, we need to check RIDs that are in first and last bins
+				if (hi_bin - low_bin > 2) {
+					bin_offset_t lowBinElm = bl->binStartOffsets[low_bin + 1] - bl->binStartOffsets[low_bin];
+					uint64_t hiBinElm = bl->binStartOffsets[hi_bin] - bl->binStartOffsets[hi_bin-1];
+					// low boundary bin
+					adios_alac_check_candidate(&partitionMeta, low_bin, low_bin+1 , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery , (char*) decodedRid /*index bytes of entire PG*/
+							, false  /*don't need decoding*/ , lowOrderPtr2, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+					decodedRid += lowBinElm;
+
+					uint64_t innerElm = resultCount- lowBinElm - hiBinElm;
+					setRidToBits(isPGCovered, srcstart, srccount, deststart, destcount, ndim
+												, decodedRid, innerElm, alacResultBitmap,Corder);
+					decodedRid  +=  innerElm;
+
+					lowOrderPtr2 += (( bl->binStartOffsets[hi_bin-1] - bl->binStartOffsets[low_bin]) * insigbytes);
+					// high boundary bin
+					adios_alac_check_candidate(&partitionMeta, hi_bin-1, hi_bin , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery , (char *)decodedRid
+							, false , lowOrderPtr2, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+
+				} else { // for 1 or 2 bins touched, we need to check all RIDs
+					adios_alac_check_candidate(&partitionMeta, low_bin, hi_bin  , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery , (char*)decodedRid
+							, false , lowOrderPtr2, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+				}
+
+				FREE(lowOrderBytes2);
+
+			}
+
+		}else if (partitionMeta.indexMeta.indexForm == ALCompressedInvertedIndex) {
+			const uint64_t *compBinStartOffs = partitionMeta.indexMeta.u.ciim.indexBinStartOffsets;
+			uint64_t binCompressedLen;
+			const char *inputCurPtr = input_index;
+
+			if (estimate) {
+				// Now compress each bin in turn
+				bin_id_t bin ;
+				for ( bin = low_bin; bin < hi_bin; bin++) {
+					binCompressedLen = compBinStartOffs[bin + 1] - compBinStartOffs[bin];
+					uint32_t decodedElm = ALDecompressRIDtoSelBox(isPGCovered , inputCurPtr, binCompressedLen
+							, srcstart, srccount /*PG region dimension*/ , deststart, destcount /*region dimension of Selection box*/
+							, ndim , &(alacResultBitmap->bits));
+					inputCurPtr += binCompressedLen;
+					alacResultBitmap->numSetBits += decodedElm;
+				}
+
+			}else{
+				// element count of touched bins, which is also the count of low order data
+				uint64_t lowByteStartPos = alac_metadata->lob_offset;
+				char * lowOrderBytes  = readLowDataAmongBins(&partitionMeta
+						, low_bin,  hi_bin, lowByteStartPos , adiosQuery, gBlockId, startStep, numStep);
+				char *lowOrderPtr = lowOrderBytes; // temporary pointer
+
+				// It touches at least 3 bins, so, we need to check RIDs that are in first and last bins
+				if (hi_bin - low_bin > 2) {
+					// low boundary bin, compressed byte offset
+					binCompressedLen = compBinStartOffs[low_bin + 1] - compBinStartOffs[low_bin];
+
+					adios_alac_check_candidate(&partitionMeta, low_bin, low_bin+1 , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery  , inputCurPtr /*index bytes of entire PG*/
+							, true  /*need decoding*/ , lowOrderPtr /*it points to the start of `low_bin` */, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+					inputCurPtr += binCompressedLen;
+
+					bin_id_t innerlowBin = low_bin + 1;
+					bin_id_t innerHiBin = hi_bin -1;
+					bin_id_t bin;
+					// Now compress each bin in turn
+					for ( bin = innerlowBin; bin < innerHiBin; bin++) {
+						binCompressedLen = compBinStartOffs[bin + 1] - compBinStartOffs[bin];
+
+						uint32_t decodedElm = ALDecompressRIDtoSelBox(isPGCovered
+								, inputCurPtr, binCompressedLen
+								, srcstart, srccount //PG region dimension
+								, deststart, destcount //region dimension of Selection box
+								, ndim , &(alacResultBitmap->bits));
+						alacResultBitmap->numSetBits += decodedElm;
+						inputCurPtr += binCompressedLen;
+					}
+
+					// high boundary bin
+					binCompressedLen = compBinStartOffs[hi_bin]- compBinStartOffs[hi_bin-1];
+					// point to the low order byte of one bin before hi_bin
+					lowOrderPtr += (( bl->binStartOffsets[hi_bin-1] - bl->binStartOffsets[low_bin]) * insigbytes);
+					adios_alac_check_candidate(&partitionMeta, hi_bin-1, hi_bin , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery , inputCurPtr /*index bytes of entire PG*/
+							, true  /*need decoding*/ , lowOrderPtr /*low order bytes of entire PG*/, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+					inputCurPtr += binCompressedLen;
+
+				} else { // for 1 or 2 bins touched, we need to check all RIDs
+
+					adios_alac_check_candidate(&partitionMeta, low_bin, hi_bin , hb, lb
+							, srcstart, srccount, deststart, destcount, ndim,  adiosQuery , inputCurPtr /*index bytes of entire PG*/
+							, true , lowOrderPtr, varInfo->type
+							,alacResultBitmap /*OUT*/,Corder);
+				}
+
+				FREE(lowOrderBytes);
+			}
+		} else {
+			printf("index form %d in alacrity is not supported", partitionMeta.indexMeta.indexForm);
+			exit(EXIT_FAILURE);
+		}
+		FREE(input_index);
+	}else {
+//		printf("there is no touched bin for constraint \n");
+	}
+
+	FREE(alac_metadata);
+
+#ifdef RIDBUG
+	printf("\n");
+#endif
+}
+
+
+
+/*
+ * PG selection, [startPG, endPG)
+ */
+ADIOS_ALAC_BITMAP* adios_alac_uniengine(ADIOS_QUERY * adiosQuery, int timeStep, bool estimate) {
+
+	if (checkUnsupportedDataType(adiosQuery->varinfo->type)){
+		printf("unsupported data type [%d] at this point \n", adiosQuery->varinfo->type);
+		exit(EXIT_FAILURE);
+	}
+
+	double lb , hb ;
+    resolveQueryBoundary(adiosQuery, &hb, &lb); // query constraints
+	//printf("constraint: %s\n", adiosQuery->_condition);
+
+	ADIOS_VARINFO * varInfo = adiosQuery->varinfo;
+
+	adios_read_set_data_view(adiosQuery->file, LOGICAL_DATA_VIEW); // switch to the transform view,
+ 	ADIOS_VARTRANSFORM *ti = adios_inq_var_transform(adiosQuery->file, varInfo); // this func. will fill the blockinfo field
+	int startStep = timeStep, numStep = 1;
+	uint64_t totalElm = adiosQuery->rawDataSize; // no matter bounding box or writeblock selection, the rawDataSize has been calculated in the common query layer
+	ADIOS_ALAC_BITMAP *alacResultBitmap =  (ADIOS_ALAC_BITMAP *) malloc(sizeof(ADIOS_ALAC_BITMAP ));
+	alacResultBitmap->length = BITNSLOTS64(totalElm);
+	//initially, no 1s at all
+	alacResultBitmap->bits = (uint64_t *) calloc( alacResultBitmap->length , sizeof(uint64_t));
+	alacResultBitmap->numSetBits = 0;
+	alacResultBitmap->realElmSize = totalElm;
+
+	// check the transform type, if it is alacrity,
+	ALQueryEngine qe;
+	ALUnivariateQuery alacQuery;
+	if (ti->transform_type == adios_get_transform_type_by_uid("ncsu-alacrity")) { // if it is not alacrity type, do not initialize this query engine
+		if ( adiosQuery->varinfo->type == adios_double){
+			ALQueryEngineStartUnivariateDoubleQuery(&qe, lb, hb, REGION_RETRIEVAL_INDEX_ONLY_QUERY_TYPE, &alacQuery);
+		}else if (adiosQuery->varinfo->type == adios_real){
+			ALQueryEngineStartUnivariateFloatQuery(&qe, lb, hb, REGION_RETRIEVAL_INDEX_ONLY_QUERY_TYPE, &alacQuery);
+		}
+	}
+
+	const int Corder = !futils_is_called_from_fortran(); // Use the dimension order of the caller; the common read layer will also mimic this order
+
+	/*********** doQuery ***************
+	 *
+	 * 1. Open partition  [locate offsets of meta, data, and index for the partition]
+	 * 2. Read Partition Meta from file => meta
+	 3. find touched bins:  are_bins_touched = findBinRange1C(meta, uniquery, &start_bin, &end_bin);
+	 4. read index of touched bins: ALPartitionStoreReadIndexBins
+	 5. read dataBin
+	 */
+	uint64_t* deststart ;  uint64_t* destcount ;// current variables selection box
+	uint64_t * srcstart;  	uint64_t * srccount; // PG's bounding box is the global bounding box
+	int ndim = varInfo->ndim;
+
+    if (adiosQuery->sel == NULL) {
+         static uint64_t ZERO[32] = { 0 };
+		 destcount = varInfo->dims;   deststart = ZERO;
+
+         if (varInfo->blockinfo == NULL) {
+        	 adios_read_set_data_view(adiosQuery->file, LOGICAL_DATA_VIEW);
+             common_read_inq_var_blockinfo(adiosQuery->file, varInfo);
+         }
+
+		adios_read_set_data_view(adiosQuery->file, PHYSICAL_DATA_VIEW);
+		ADIOS_VARTRANSFORM *ti = adios_inq_var_transform(adiosQuery->file, varInfo);
+
+		int totalPG = varInfo->nblocks[timeStep];
+		int blockId, j;
+
+		// global block id
+		int startBlkId = 0;
+		int blkIter;
+		for (blkIter = 0; blkIter < timeStep; blkIter++) {
+			startBlkId += varInfo->nblocks[blkIter];
+		}
+
+		for (j = startBlkId; j < startBlkId + totalPG; j++) {
+			// false: PG selection box is intersecting with variable's selection box
+			// true : PG selection box is fully contained within variable's selection box
+                        // isPGCovered is alwasy true for selection is NULL
+			bool isPGCovered = true;
+
+			srcstart = varInfo->blockinfo[j].start;
+			srccount = varInfo->blockinfo[j].count;
+
+			if (ti->transform_type == adios_get_transform_type_by_uid("ncsu-alacrity")) {
+				proc_write_block(j,isPGCovered,ti, adiosQuery,startStep,estimate,&alacQuery,lb,hb
+						,srcstart, srccount, deststart, destcount,alacResultBitmap	,Corder);
+			}else {
+				char * blockData  = NULL;
+				uint64_t totalElm = 1;
+				int t = 0;
+				for(t=0; t < ndim; t++){
+					totalElm *= srccount[t];
+				}
+				readBlockData(j, adiosQuery, startStep, varInfo,totalElm, (void**)&blockData );
+				literallyCheckData(blockData, totalElm, varInfo->type,adiosQuery,hb, lb
+						, srcstart, srccount, deststart, destcount, ndim, isPGCovered
+						, alacResultBitmap,Corder);
+			}
+		}
+
+	}else if (adiosQuery->sel->type == ADIOS_SELECTION_BOUNDINGBOX) {
+
+		const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(adiosQuery->sel->u.bb);
+		destcount = bb->count;   deststart = bb->start;
+#ifdef RIDBUG
+		printf("Output Bounding box, start: [");
+		int t = 0;
+		for(t  = 0 ; t < ndim ; t++){
+			printf("%"PRIu64", ", deststart[t]);
+		}
+		printf("], count: [");
+		for(t  = 0 ; t < ndim ; t++){
+			printf("%"PRIu64", ", destcount[t]);
+		}
+		printf("]\n");
+
+#endif
+		adios_read_set_data_view(adiosQuery->file, PHYSICAL_DATA_VIEW);
+		ADIOS_VARTRANSFORM *ti = adios_inq_var_transform(adiosQuery->file, varInfo);
+		ADIOS_PG_INTERSECTIONS* intersectedPGs = adios_find_intersecting_pgs( adiosQuery->file, varInfo->varid, adiosQuery->sel, timeStep, numStep);
+		int totalPG = intersectedPGs->npg;
+		int blockId, j;
+
+		ADIOS_PG_INTERSECTION *  PGs = intersectedPGs->intersections;
+		for (j = 0; j < totalPG; j++) {
+			ADIOS_PG_INTERSECTION pg = PGs[j];
+			ADIOS_SELECTION * interSelBox = pg.intersection_sel;
+			// false: PG selection box is intersecting with variable's selection box
+			// true : PG selection box is fully contained within variable's selection box
+			bool isPGCovered = false;
+			ADIOS_SELECTION * pgSelBox = pg.pg_bounds_sel;
+			assert(pgSelBox->type == ADIOS_SELECTION_BOUNDINGBOX );
+			assert(pgSelBox->type == interSelBox->type );
+			const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgBB = &(pgSelBox->u.bb);
+			const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *interBB = &(interSelBox->u.bb);
+			isPGCovered = boxEqual(pgBB, interBB);
+
+			srcstart = pgBB->start;
+			srccount = pgBB->count;
+			// blockId = pg.blockidx; // pg.blockidx is relative block id           //	blockId = pg.blockidx_in_timestep ;
+			if (ti->transform_type == adios_get_transform_type_by_uid("ncsu-alacrity")) {
+				proc_write_block(pg.blockidx,isPGCovered,ti, adiosQuery,startStep,estimate,&alacQuery,lb,hb
+						,srcstart, srccount, deststart, destcount,alacResultBitmap,Corder	);
+			}else {
+				char * blockData  = NULL;
+				uint64_t totalElm = 1;
+				int t = 0;
+				for(t=0; t < ndim; t++){
+					totalElm *= pgBB->count[t];
+				}
+				readBlockData(pg.blockidx, adiosQuery, startStep, varInfo,totalElm, (void**)&blockData );
+				literallyCheckData(blockData, totalElm, varInfo->type,adiosQuery,hb, lb
+						, srcstart, srccount, deststart, destcount, ndim, isPGCovered
+						, alacResultBitmap,Corder);
+			}
+		}
+		adios_free_pg_intersections(&intersectedPGs);
+
+	} else if (adiosQuery->sel->type == ADIOS_SELECTION_WRITEBLOCK){
+
+		const ADIOS_SELECTION_WRITEBLOCK_STRUCT *writeBlock = &(adiosQuery->sel->u.block);
+		int blockId= writeBlock->index; //relative block id
+		int globalBlockId = query_utils_getGlobalWriteBlockId(blockId, startStep, varInfo);
+		common_read_inq_var_blockinfo(adiosQuery->file, varInfo);
+		ADIOS_VARBLOCK block = varInfo->blockinfo[globalBlockId];
+		// since user supplies the query with block id, in this case, the start and destination(querying) bounding box are the block itself
+		srcstart = block.start; srccount = block.count;
+		deststart = block.start;  destcount = block.count;
+		bool isPGCovered = true; // because they are same bounding boxes, they are fully contained
+
+		if (ti->transform_type == adios_get_transform_type_by_uid("ncsu-alacrity")){
+			adios_read_set_data_view(adiosQuery->file, PHYSICAL_DATA_VIEW); // switch to the transform view,
+			ADIOS_VARTRANSFORM *ti = adios_inq_var_transform(adiosQuery->file, varInfo); // this func. will fill the blockinfo field
+			proc_write_block(globalBlockId,isPGCovered,ti, adiosQuery,startStep,estimate,&alacQuery,lb,hb
+					,srcstart, srccount, deststart, destcount,alacResultBitmap,Corder	);
+		}else {
+			char * blockData  = NULL;
+			readBlockData(globalBlockId, adiosQuery, startStep, varInfo,adiosQuery->rawDataSize, (void**) &blockData );
+			literallyCheckData(blockData, adiosQuery->rawDataSize,  varInfo->type,adiosQuery,hb, lb
+					, srcstart, srccount, deststart, destcount, ndim, isPGCovered
+					, alacResultBitmap,Corder);
+		}
+
+	} else if (adiosQuery->sel->type == ADIOS_SELECTION_POINTS){
+		// TODO: at this point, this type of querying is took careful by the common query layer
+	} else {
+		printf("not supported selection typed in alacrity \n");
+		exit(EXIT_FAILURE);
+	}
+
+
+	if (adiosQuery->predicateOp == ADIOS_NE){ // we flip the bits, since we treat it "=" before
+		uint64_t i  = 0;
+		for (; i < alacResultBitmap->length; i++) {
+			alacResultBitmap->bits[i]  = ~(alacResultBitmap->bits[i]);
+		}
+	}
+	// NOTE: this is for correctness of reading info later. We switch back to ensure the end-use are not affected
+	adios_read_set_data_view(adiosQuery->file, LOGICAL_DATA_VIEW);
+	return alacResultBitmap;
+}
+
+static void dump_bitmap_word(FILE *stream, uint64_t word, int nbits) {
+	int i;
+	char bitstr[65];
+	for (i = 0; i < nbits; ++i) {
+		const int bit = (word >> i) & 1;
+		bitstr[i] = bit ? '1' : '0';
+	}
+	bitstr[nbits] = 0;
+	fprintf(stream, bitstr);
+}
+
+static void dump_bitmap(FILE *stream, ADIOS_ALAC_BITMAP *bitmap) {
+	uint64_t i;
+	for (i = 0; i < bitmap->length - 1; ++i)
+		dump_bitmap_word(stream, bitmap->bits[i], 64);
+
+	if (bitmap->realElmSize > 0) {
+		// Dump only the valid bits of the last word
+		dump_bitmap_word(
+			stream,								// output stream
+			bitmap->bits[bitmap->length - 1],	// the last word
+			(bitmap->realElmSize - 1) % 64 + 1	// the number of valid bits in the last word
+		);
+	}
+}
+
+/*
+ * This is an internal function processing the expression tree
+ */
+ADIOS_ALAC_BITMAP * adios_alac_process(ADIOS_QUERY* q, int timestep,
+		bool estimate) {
+
+	ADIOS_ALAC_BITMAP *result;
+	//LEAF NODE
+	ADIOS_ALAC_BITMAP * rbitmap, *lbitmap;
+	if (q ->left == NULL && q->right == NULL) {
+		result = adios_alac_uniengine(q, timestep, estimate);
+
+#ifdef ADIOS_ALAC_QUERY_DEBUG
+		fprintf(stderr, "constraint %s = ", q->condition);
+		dump_bitmap(stderr, result);
+		fprintf(stderr, "\n");
+#endif
+		return result;
+	}
+
+	if (q->left)
+		lbitmap = adios_alac_process((ADIOS_QUERY*) q->left, timestep, estimate);
+
+	if (q->right)
+		rbitmap = adios_alac_process((ADIOS_QUERY*) q->right, timestep, estimate);
+
+	result = adios_alac_bitsOp(lbitmap, rbitmap, q->combineOp);
+
+#ifdef ADIOS_ALAC_QUERY_DEBUG
+	fprintf(stderr, "op %s = ", (q->combineOp == ADIOS_QUERY_OP_AND ? "AND" : "OR"));
+	dump_bitmap(stderr, result);
+	fprintf(stderr, "\n");
+#endif
+	return result;
+}
+
+
+//void adios_query_alac_init() {} // not used
+
+void adios_query_alac_retrieval_pointsNd( ADIOS_ALAC_BITMAP *b, uint64_t retrieval_size
+		, ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb , uint64_t *points /*OUT*/, int Corder ){
+	int d = 0, td;
+	uint64_t start_pos = 0;
+	if (!isLastConvRidInit(b))
+		start_pos =	b->lastConvRid  / 64;
+
+	uint64_t * p_bitmap = b->bits;
+	uint64_t pidx = 0, off = start_pos, retrieveCount = 0;
+	uint64_t reconstct_rid;
+	uint64_t coordinates[MAX_DIMS];
+#ifdef RIDBUG
+	printf("reconstrcuted RID relative to timestep : ");
+#endif
+	while (off < b->length ){
+		uint16_t * temp = (uint16_t *) &(p_bitmap[off]); // 2 bytes (unsigned short int)  = 16 bits
+		uint64_t offset_long_int = off * 64; // original index offset ; // 4 bytes (unsigned long int )= 64 bit
+		uint64_t offset;
+		int j , m;
+		for (j = 0; j < 4; j++) {
+			offset = offset_long_int + j * 16; // here, 16 is used because temp is 16bits (unsigned short int) pointer
+			// set_bit_count for each 2 bytes, the number of 1
+			/*
+			 * *******|               64 bits                 | => final_result_bitmap []
+			 * *******| 16 bits | 16 bits | 16 bits | 16 bits | => temp[]
+			 */
+
+			for (m = 0; m < set_bit_count[temp[j]]  ; m++) {
+				reconstct_rid = offset+ set_bit_position[temp[j]][m];
+#ifdef RIDBUG
+				printf("%"PRIu64", ", reconstct_rid);
+#endif
+				if (!isLastConvRidInit(b)) {
+					if (reconstct_rid > b->lastConvRid) { // skip the RIDs in the 16-bits part
+						ridToCoordinates(bb->ndim, Corder, reconstct_rid, bb->count, coordinates );
+						for (d = 0; d < bb->ndim; d ++){
+							points[pidx++] = bb->start[d] + coordinates[d];
+						}
+						retrieveCount++;
+					}
+				}else { // lastConvRid == realElmSize+1 represents the initial state
+					// in which the RID recovering has not started yet
+					ridToCoordinates(bb->ndim, Corder, reconstct_rid, bb->count, coordinates);
+					for (d = 0; d < bb->ndim; d ++){
+						points[pidx++] = bb->start[d] + coordinates[d];
+					}
+					retrieveCount++;
+				}
+
+				if (retrieveCount == retrieval_size){
+					b->lastConvRid = reconstct_rid; 					 // updated the status
+
+#ifdef RIDBUG
+		printf("\n");
+#endif
+					return ;
+				}
+			}
+		}
+		off ++;
+	}
+
+#ifdef RIDBUG
+		printf("\n");
+#endif
+}
+
+static ADIOS_SELECTION * adios_query_build_results_boundingbox(ADIOS_ALAC_BITMAP *b, uint64_t retrieval_size, ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb, int Corder) {
+	const uint64_t dataSize = retrieval_size * (bb->ndim);
+	uint64_t *points = (uint64_t *)(malloc(dataSize * sizeof(uint64_t)));
+	adios_query_alac_retrieval_pointsNd(b,retrieval_size, bb, points,Corder);
+
+	return common_read_selection_points(bb->ndim, retrieval_size, points);
+}
+
+void adios_query_alac_build_results(
+		uint64_t retrieval_size, ADIOS_SELECTION* outputBoundry, ADIOS_ALAC_BITMAP *b,
+		ADIOS_VARINFO *varinfo, ADIOS_SELECTION ** queryResult, int Corder)
+{
+
+	//last bounding box / points supplied by user
+	switch (outputBoundry->type) {
+	case ADIOS_SELECTION_BOUNDINGBOX: {
+		ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(outputBoundry->u.bb);
+		*queryResult = adios_query_build_results_boundingbox(b, retrieval_size, bb,Corder);
+		break;
+	}
+	case ADIOS_SELECTION_WRITEBLOCK : {
+		adios_error(err_unspecified,
+					"Detected writeblock selection as query output selection internally, "
+					"but the writeblock selection should have already been mapped to a bounding box! (at %s:%s)",
+					__FILE__, __LINE__);
+		break;
+	}
+	case ADIOS_SELECTION_POINTS: {
+		const ADIOS_SELECTION_POINTS_STRUCT *points =
+				&(outputBoundry->u.points);
+		uint64_t arraySize = retrieval_size * (points->ndim);
+		uint64_t* pointArray =
+				(uint64_t*) (malloc(arraySize * sizeof(uint64_t)));
+		//TODO:
+		break;
+	}
+	default:
+		printf("Error: Type of selection is not supported!");
+	}
+}
+
+
+int adios_query_alac_can_evaluate(ADIOS_QUERY* q)
+{
+	int is_alac = 0;
+	if (!q->left && !q->right) {
+		// If this is a query leaf node, we support ALACRITY query iff
+		// that variable is transformed using the ALACRITY indexing method
+		ADIOS_VARTRANSFORM *vartrans = adios_inq_var_transform(q->file, q->varinfo);
+		is_alac = (vartrans->transform_type == adios_get_transform_type_by_uid("ncsu-alacrity"));
+		adios_free_var_transform(vartrans);
+	} else {
+		// Else, this is an internal node, and we support ALACRITY query if
+		// any descendent node supports ALACRITY (since ALACRITY query is
+		// capable of processing indexed and non-indexed variables in the
+		// same query)
+		if (q->left)
+			is_alac |= adios_query_alac_can_evaluate((ADIOS_QUERY *)q->left);
+		if (q->right)
+			is_alac |= adios_query_alac_can_evaluate((ADIOS_QUERY *)q->right);
+	}
+    return is_alac;
+}
+
+
+
+int64_t adios_query_alac_estimate(ADIOS_QUERY* q, int timestep) {
+	ADIOS_ALAC_BITMAP* b = adios_alac_process(q, timestep, true);
+	return calSetBitsNum(b);
+}
+
+/* memory format:
+ * | length | numSetBits | realNumSize | lastConvRid  |bits ....
+ */
+uint64_t * convertALACBitmapTomemstream( ADIOS_ALAC_BITMAP * b ){
+	int metaLen = 4; //----- 1 /*b->length*/ + 1 /*b->numSetBits*/ + 1 /*b->realNumSize*/ + 1 /*b->lastConvRid*/----//
+	uint64_t totalSize = b->length + metaLen;
+	uint64_t * headPtr  = (uint64_t *) calloc (totalSize, sizeof(uint64_t));
+	if (headPtr == NULL){
+		printf("%s failed to allocat %"PRIu64 " bytes memory \n", __FUNCTION__, sizeof(uint64_t)*totalSize);
+		return NULL;
+	}
+	uint64_t * movePtr = headPtr;
+	movePtr[0] = b->length;   movePtr[1] = b->numSetBits; movePtr[2] = b->realElmSize; movePtr[3] = b->lastConvRid;
+	memcpy(movePtr+ metaLen, b->bits, sizeof(uint64_t) * b->length);
+	return headPtr;
+}
+
+/*
+ * do memory copy for the bits, so that the `mem` could be free later
+ */
+void convertMemstreamToALACBitmap( void *mem , ADIOS_ALAC_BITMAP * bout /*OUT*/){
+
+	uint64_t * ptr  = (uint64_t *) mem;
+	bout->length = ptr[0];
+	bout->numSetBits = ptr[1];
+	bout->realElmSize = ptr[2];
+	bout->lastConvRid = ptr[3];
+	bout->bits = (uint64_t *) malloc(sizeof(uint64_t)*(bout->length));
+	memcpy(bout->bits, ptr+4, sizeof(uint64_t)*(bout->length));
+}
+
+int adios_query_alac_evaluate(ADIOS_QUERY* q,
+                   int timestep,
+			       uint64_t batchSize, // limited by maxResult
+			       ADIOS_SELECTION* outputBoundry,
+			       ADIOS_SELECTION** queryResult)
+{
+
+	if (!isInitialized){ // if this is the very first time of calling the queries, we initialize the lookup tables
+		init_lookup();
+		isInitialized= 1;
+	}
+	const int absoluteTimestep = adios_get_actual_timestep(q, timestep);
+
+	ADIOS_ALAC_BITMAP* b;
+	if (q->onTimeStep != absoluteTimestep) { // if this is the first call to evaluate the query for a new timestep
+		b = adios_alac_process(q, timestep, false);
+		initLastConvRid(b);
+		q->maxResultsDesired =  calSetBitsNum(b);
+		q->resultsReadSoFar = 0;
+		q->onTimeStep = absoluteTimestep;
+	} else { //convert void* _internal to ADIOS_ALAC_BITMAP
+		b = (ADIOS_ALAC_BITMAP*)malloc(sizeof(ADIOS_ALAC_BITMAP));
+		convertMemstreamToALACBitmap(q->queryInternal, b);
+	}
+	uint64_t retrievalSize = q->maxResultsDesired - q->resultsReadSoFar;
+	if (retrievalSize <= 0) {
+		(*queryResult) = NULL;
+		FreeALACBITMAP(b);
+		//q->onTimeStep = NO_EVAL_BEFORE;
+		//printf(":: ==> no more results to fetch\n");
+		return 0;
+	}
+	if (retrievalSize > batchSize) {
+		retrievalSize = batchSize;
+	}
+
+	const int Corder = !futils_is_called_from_fortran(); // Use the dimension order of the caller; the common read layer will also mimic this order
+	adios_query_alac_build_results(retrievalSize, outputBoundry, b, q->varinfo, queryResult, Corder);
+	// b->lastConvRid is updated in the above func., so the bitmap serializing function has to wait until the above function is finished
+	q->queryInternal = convertALACBitmapTomemstream(b);
+
+	/*if (q->_maxResultDesired >= 0) {
+		FREE(b->bits); // these data is copied to q->_queryInternal
+	}
+	FREE(b); // NOTE: only free the structure*/
+	FreeALACBITMAP(b);
+	q->resultsReadSoFar += retrievalSize;
+
+	return q->resultsReadSoFar < q->maxResultsDesired;
+}
+
+int adios_query_alac_free_one_node(ADIOS_QUERY* query){
+	if (query == NULL) {
+		return 0;
+	}
+
+	// Currently, no ALAC-specific information to free...
+	// Note: the common layer frees non-plugin-specific stuff
+	// like query->predicateValue and query->dataSlice
+
+	return 1;
+}
+
+int adios_query_alac_free(ADIOS_QUERY* query) {
+
+	// free the tree in a bottom-to-up manner
+	if (query->left == NULL && query->right == NULL) {
+		return adios_query_alac_free_one_node(query);
+	}else if  (query->right){
+		return adios_query_alac_free(query->right);
+	}else if (query->left) {
+		return adios_query_alac_free(query->left);
+	}
+
+	return 1;
+}
+
+void adios_query_alac_finalize() { /* there is nothing to finalize */ }
+
+
+#endif
diff --git a/src/query/query_fastbit.c b/src/query/query_fastbit.c
new file mode 100644
index 0000000..40a24ba
--- /dev/null
+++ b/src/query/query_fastbit.c
@@ -0,0 +1,1582 @@
+#include "public/adios_query.h"
+   
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "core/common_read.h"
+#include "core/adios_logger.h"
+#include "fastbit_adios.h"
+#include <iapi.h>
+#include <math.h>
+
+
+typedef struct {
+  double* _keys; 
+  int64_t* _offsets; 
+  uint32_t* _bms;
+  char* _arrayName;
+  char* _bmsVarName;
+  //void* _rawData;
+  FastBitSelectionHandle _handle;
+  
+  ADIOS_FILE* _idxFile;
+} FASTBIT_INTERNAL;
+ 
+
+ADIOS_QUERY* getFirstLeaf(ADIOS_QUERY* q);
+void getHandle(int timeStep, int blockIdx, ADIOS_FILE* idxFile, ADIOS_QUERY* q);
+
+
+
+/** A simple reader to be used by FastBit for index reconstruction.  In
+    this simple case, the first argument is the whole array storing all the
+    serialized bitmaps.  This first argument can be used to point to a data
+    structure pointing to any complex object type necassary.
+*/
+//
+// this static function is from fastbit example/tiapi.c
+//
+static int adios_bmreader(void *ctx, uint64_t start,uint64_t count, uint32_t *buf)
+{
+#ifdef _READ_BMS_AS_NEEDED
+  FASTBIT_INTERNAL* itn = (FASTBIT_INTERNAL*)ctx;
+  // read bms from start to count:
+  ADIOS_VARINFO * bmsV = common_read_inq_var (itn->_idxFile, itn->_bmsVarName);
+  uint64_t bms_start[] = {start};
+  uint64_t bms_count[] = {count};
+
+  ADIOS_SELECTION* bmsSel = common_read_selection_boundingbox(bmsV->ndim, bms_start, bms_count);
+  // idx file has one timestep
+  common_read_schedule_read(itn->_idxFile, bmsSel, itn->_bmsVarName, 0, 1, NULL, buf);
+  common_read_perform_reads(itn->_idxFile,1);
+  common_read_free_varinfo(bmsV);
+  common_read_selection_delete(bmsSel);
+
+  return 0;
+#else
+  const uint32_t *bms = (uint32_t*)ctx + start;
+  unsigned j;
+  for (j = 0; j < count; ++ j) {
+    buf[j] = bms[j];
+  }
+  return 0;
+#endif
+}
+
+
+void create_fastbit_internal_idxFile (ADIOS_QUERY* q, ADIOS_FILE* idxFile) 
+{
+  if (q->queryInternal == NULL) {
+     FASTBIT_INTERNAL* internal = malloc(sizeof(FASTBIT_INTERNAL));
+     internal->_keys = NULL;
+     internal->_offsets = NULL;
+     internal->_bms = NULL;
+     internal->_arrayName = NULL;
+     internal->_bmsVarName = NULL;
+     internal->_handle = NULL;
+
+     internal->_idxFile = idxFile;
+     q->queryInternal = internal;
+  }
+  
+  if (q->left != NULL) {
+    create_fastbit_internal_idxFile(q->left, idxFile);
+  } 
+  if (q->right != NULL) {
+    create_fastbit_internal_idxFile(q->right, idxFile);
+  }
+}
+
+void create_fastbit_internal (ADIOS_QUERY* q) 
+{
+  if (q->queryInternal == NULL) {
+      ADIOS_QUERY* leaf = getFirstLeaf(q);
+      ADIOS_FILE* f = leaf->file;
+      const char* basefileName = f->path;
+
+      MPI_Comm comm_dummy = MPI_COMM_SELF;
+      ADIOS_FILE* idxFile = fastbit_adios_util_getFastbitIndexFileToRead(basefileName, comm_dummy);
+      create_fastbit_internal_idxFile (q, idxFile);
+  }
+}
+
+
+void clear_fastbit_internal(ADIOS_QUERY* query) 
+{
+  FASTBIT_INTERNAL* s = (FASTBIT_INTERNAL*)(query->queryInternal);
+
+  if (s == NULL) {
+    return;
+  }
+
+  if (s->_keys != NULL) {
+    free(s->_keys); 
+  }
+  if (s->_offsets != NULL) {
+    free(s->_offsets);     
+  }
+  if (s->_bms != NULL) {
+    free(s->_bms); 
+  }
+
+  if (s->_bmsVarName != NULL) {
+    free(s->_bmsVarName);
+    s->_bmsVarName = NULL;
+  }
+
+  s->_keys = NULL; s->_bms = NULL; s->_offsets = NULL;
+  
+  fastbit_iapi_free_array_by_addr(query->dataSlice);
+
+  if (s->_arrayName != NULL) {
+    fastbit_iapi_free_array(s->_arrayName);
+    free(s->_arrayName);
+    s->_arrayName = NULL;
+  }
+  
+  if (query->hasParent == 0) {
+    fastbit_selection_free(s->_handle); 
+  }   
+
+  //s = NULL;
+  //free(s);
+}
+
+
+void clear_fastbit_internal_recursive(ADIOS_QUERY* query) 
+{
+  clear_fastbit_internal(query);
+  if (query->hasParent != 0) {
+    fastbit_selection_free( ((FASTBIT_INTERNAL*)(query->queryInternal))->_handle); 
+  }
+ 
+  if (query->left != NULL) {
+    clear_fastbit_internal(query->left);
+  }
+  if (query->right != NULL) {
+    clear_fastbit_internal(query->right);
+  }
+}
+
+
+void assertValue(char* input, char* endptr) {
+  if (*endptr != '\0')  
+    if ((errno == ERANGE) || (errno != 0) || (endptr == input) || (*endptr != '\0')) {
+      //perror("strtol");
+        printf("FastbitQueryEvaluation Exit due to :invalid type value: %s\n", input);
+	exit(EXIT_FAILURE);
+    }
+}
+
+void assert(void* ptr, const char* notes) 
+{
+  if (ptr == NULL) {
+    printf("::Error allocating memory: %s\n", notes);
+    exit(EXIT_FAILURE);
+  }
+}
+
+void setQueryInternal(ADIOS_QUERY* q, FastBitCompareType compareOp, FastBitDataType dataType,   uint64_t dataSize, const char* arrayName) 
+{
+  /*
+  char* endptr;
+  
+  if (dataType == FastBitDataTypeDouble) {
+    double vv = strtod(q->_value, &endptr);
+    assertValue(q->_value, endptr);
+    q->_queryInternal = fastbit_selection_create(dataType, q->_dataSlice, dataSize, compareOp, &vv);
+  } else if ((dataType == FastBitDataTypeInt) || (dataType == FastBitDataTypeLong) || (dataType == FastBitDataTypeUInt) || (dataType == FastBitDataTypeULong)) {    
+    //long vv = strtol(q->_value, &endptr, 10);
+    float vv = strtof(q->_value, &endptr);
+    //so this is not a much to use a long value??
+    assertValue(q->_value, endptr);
+    q->_queryInternal = fastbit_selection_create(dataType, q->_dataSlice, dataSize, compareOp, &vv);
+  } else if (dataType == FastBitDataTypeFloat) {
+    float vv = strtof(q->_value, &endptr);
+    assertValue(q->_value, endptr);
+    q->_queryInternal = fastbit_selection_create(dataType, q->_dataSlice, dataSize, compareOp, &vv);
+  } else {
+    q->_queryInternal = NULL;
+  }
+  */
+
+ 
+  fastbit_iapi_free_array_by_addr(q->dataSlice);
+  fastbit_iapi_register_array(arrayName, dataType, q->dataSlice, dataSize);
+
+  char* endptr;
+  double vv = strtod(q->predicateValue, &endptr);
+  FastBitSelectionHandle h = fastbit_selection_osr(arrayName, compareOp, vv);
+  fastbit_adios_util_checkNotNull(h, arrayName);
+  ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle = h;
+  //fastbit_adios_util_checkNotNull(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle, arrayName);
+}
+
+
+
+
+void setCombinedQueryInternal(ADIOS_QUERY* q) {
+    ADIOS_QUERY* left = (ADIOS_QUERY*)(q->left);
+    ADIOS_QUERY* right = (ADIOS_QUERY*)(q->right);
+    
+    FASTBIT_INTERNAL* leftHandle = ((FASTBIT_INTERNAL*)left->queryInternal)->_handle;
+    FASTBIT_INTERNAL* rightHandle = ((FASTBIT_INTERNAL*)right->queryInternal)->_handle;
+
+    if ((leftHandle == NULL) && (rightHandle == NULL)) {
+      log_debug("both fastbit handles are null, do nothing\n");
+      // do nothing
+    } else if (rightHandle == NULL) {
+      log_debug("right fastbit handles are null\n");
+      if (q->combineOp == ADIOS_QUERY_OP_OR) {            
+	((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  leftHandle;
+      }
+    } else if (leftHandle == NULL) {
+      log_debug("left fastbit handles are null\n");
+      if (q->combineOp == ADIOS_QUERY_OP_OR) {            
+	((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  rightHandle;
+      }
+
+    } else {
+      if (q->combineOp == ADIOS_QUERY_OP_AND) {            
+	((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  fastbit_selection_combine(leftHandle, FastBitCombineAnd, rightHandle);
+      } else {
+	((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  fastbit_selection_combine(leftHandle, FastBitCombineOr, rightHandle);
+      }
+    }
+/*
+    if (q->combineOp == ADIOS_QUERY_OP_AND) {      
+      ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  fastbit_selection_combine(((FASTBIT_INTERNAL*)left->queryInternal)->_handle, FastBitCombineAnd, 
+										    ((FASTBIT_INTERNAL*)right->queryInternal)->_handle);
+    } else {
+      ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle =  fastbit_selection_combine(((FASTBIT_INTERNAL*)left->queryInternal)->_handle, FastBitCombineOr, 
+										    ((FASTBIT_INTERNAL*)right->queryInternal)->_handle);
+    }    
+*/
+}
+
+void getCoordinateFromPoints(uint64_t pos, const ADIOS_SELECTION_POINTS_STRUCT* sel, uint64_t* coordinates) 
+{
+  int i=0; 
+  for(i=0; i<sel->ndim; i++) {
+    (coordinates)[i] = sel->points[pos*(sel->ndim)+i];
+  }
+}
+
+
+void getCoordinateFromBlock(uint64_t pos, const ADIOS_VARBLOCK* sel, int n, uint64_t* coordinates, int blockDim) 
+{
+  int fortran_order = futils_is_called_from_fortran();
+  int dimToSlice = n-1;
+
+  if (fortran_order == 1) {
+    dimToSlice = blockDim  - n; // n is from 1-(bb->ndim)
+  }
+
+  //  log_debug("getCoordinateFromBlock: pos = %lld, n=%d, fortran_order? %d, dimToSlice %d\n", pos, n, fortran_order, dimToSlice);
+  if (n == 1) {
+      coordinates[n-1] = pos + sel->start[dimToSlice];
+      log_debug("     coordinate [%d]=%lld\n", n-1, coordinates[n-1]);
+      return ;
+  } 
+ 
+  uint64_t lastDimSize= sel->count[dimToSlice];     
+  uint64_t res  = pos % lastDimSize;
+
+  //log_debug("      lastDim = %lld, res=%d \n", lastDimSize, res);
+  coordinates[n-1] = res + sel->start[dimToSlice];
+  uint64_t stepUp = (pos - res)/lastDimSize;
+
+  log_debug("      coordinate [%d]=%lld\n", n-1, coordinates[n-1]);
+  getCoordinateFromBlock(stepUp, sel, n-1, coordinates, blockDim);  
+}
+
+//check point coordinates
+//offset in the bounding box needs to be taken account
+void getCoordinateFromBox(uint64_t pos, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT* sel, int n, uint64_t* coordinates) 
+{
+  int fortran_order = futils_is_called_from_fortran();
+  int dimToSlice = n-1;
+
+  if (fortran_order == 1) {
+    dimToSlice = sel->ndim  - n; // n is from 1-(bb->ndim)
+  }
+
+  //log_debug("pos = %lld, n=%d \n", pos, n);
+  if (n == 1) {
+      coordinates[n-1] = pos + sel->start[dimToSlice];
+      log_debug("                                       coordinate[%d]=%lld\n", n-1, coordinates[n-1]);
+      return ;
+  } 
+ 
+  uint64_t lastDimSize= sel->count[dimToSlice];     
+
+  uint64_t res  = pos % lastDimSize;
+  log_debug("       \t\t\t\t   pos = %lld lastDim = %lld, dimToSlice=%d n=%d res=%lld, start=%lld ", pos, lastDimSize, dimToSlice, n, res, sel->start[dimToSlice]);
+  //log_debug("      lastDim = %lld, res=%d \n", lastDimSize, res);
+  coordinates[n-1] = res + sel->start[dimToSlice];
+  uint64_t stepUp = (pos - res)/lastDimSize;
+
+  log_debug("      coordinate[%d]=%lld\n", n-1, coordinates[n-1]);
+
+  getCoordinateFromBox(stepUp, sel, n-1, coordinates);  
+}
+
+void getCoordinateFromVariable(uint64_t pos, const ADIOS_VARINFO* var, int n, uint64_t* coordinates) 
+{
+  if (n == 1) {
+      coordinates[n-1] = pos;
+      return ;
+  } 
+ 
+  uint64_t lastDimSize= var->dims[n-1];
+  uint64_t res  = pos % lastDimSize;
+
+  coordinates[n-1] = res;
+  uint64_t stepUp = (pos - res)/lastDimSize;
+
+  getCoordinateFromVariable(stepUp, var, n-1, coordinates);  
+}
+
+
+/* static ADIOS_VARINFO* getAdiosVariable(ADIOS_FILE* f, const char* varName)
+{
+  ADIOS_VARINFO * v = common_read_inq_var(f, varName);
+
+  if (v != NULL) {
+    log_debug("  found variable [%s] in file\n", varName);
+    return v;
+  } 
+
+  return NULL;
+}*/
+
+
+
+//
+// Initialization is private business, Finalize is called by ADIOS when read is finalized
+//
+static int is_method_initialized = 0;
+static void adios_query_fastbit_init() 
+{
+  const char* conffile = 0;
+#ifdef DEBUG
+  int msglvl = 200;
+#else
+  int msglvl = 0;
+#endif
+  if (!is_method_initialized) {
+      fastbit_init(conffile);
+      fastbit_set_verbose_level(msglvl);
+      log_debug("[fastbit has initialized with verbosity level = %d]\n", msglvl);
+      is_method_initialized = 1;
+  }
+}
+
+int adios_query_fastbit_finalize()
+{
+  if (is_method_initialized) {
+      fastbit_iapi_free_all();
+      fastbit_cleanup();
+      is_method_initialized = 0;
+  }
+  return 0;
+}
+
+ 
+
+int64_t getPosInBox(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT* sel, int n, uint64_t* spatialCoordinates) 
+{
+  if (sel->ndim <= 0) {
+    return -1;
+  }
+
+  int fortran_order = futils_is_called_from_fortran();
+
+  int i=0;
+  if (n == sel->ndim) { // check validation once
+    for (i=0; i<sel->ndim; i++) {
+      int matchingBoxDim = i;
+      if (fortran_order == 1) {
+	matchingBoxDim = sel->ndim - 1 - i;
+      }
+      uint64_t min = sel->start[matchingBoxDim];
+      uint64_t max = sel->count[matchingBoxDim] + min;
+      if (spatialCoordinates[i] >= max) {
+	return -1;
+      }
+      if (spatialCoordinates[i] < min) {
+	return -1;
+      } 
+    }
+  }
+
+  // spatial Coordinate is valid
+
+  if (fortran_order == 1) {
+    int matchingBoxDim = sel->ndim  - n;
+     if (n == 1) {
+       //log_debug("n=1, c[0]=%lld ,  start[%d]=%lld", spatialCoordinates[0], matchingBoxDim, sel->start[matchingBoxDim]);
+       return spatialCoordinates[0] - sel->start[matchingBoxDim];
+     }
+     //log_debug("n=%d, c[n-1]=%lld, start/count[%d]= %lld/%lld \n", n, spatialCoordinates[n-1], matchingBoxDim, sel->start[matchingBoxDim], sel->count[matchingBoxDim]);
+     return (spatialCoordinates[n-1]- sel->start[matchingBoxDim]) + sel->count[matchingBoxDim] * getPosInBox(sel, n-1, spatialCoordinates);
+  } else {
+     if (n == 1) {
+        return spatialCoordinates[0]-sel->start[0];    
+     }
+     return (spatialCoordinates[n-1]-sel->start[n-1]) + sel->count[n-1]*getPosInBox(sel, n-1, spatialCoordinates);
+  }
+}
+
+int64_t getPosInVariable(const ADIOS_VARINFO* v, int n, uint64_t* spatialCoordinates) 
+{
+  if (v->ndim <= 0) {
+    return -1;
+  }
+
+  // 
+  // no need for fortran order here. 
+  //
+  log_debug("getPosInVariables() v->dim[0]=%d sp[%d]=%lld\n", v->dims[0], n-1, spatialCoordinates[n-1]);
+
+  if (n == 1) {
+      return spatialCoordinates[0];
+    }
+
+  return  spatialCoordinates[n-1] + v->dims[n-1]*getPosInVariable(v, n-1, spatialCoordinates); 
+}
+
+
+int64_t getRelativeIdxInBoundingBox(uint64_t currPosInBlock, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT* bb, const ADIOS_VARBLOCK* blockSel)
+{
+    uint64_t spatialCoordinates[bb->ndim];
+    getCoordinateFromBlock(currPosInBlock, blockSel, bb->ndim, spatialCoordinates, bb->ndim);
+    return getPosInBox(bb, bb->ndim, spatialCoordinates);
+}
+
+int64_t getRelativeIdxInVariable(uint64_t currPosInBlock, const ADIOS_VARINFO* v, const ADIOS_VARBLOCK* blockSel)
+{
+    uint64_t spatialCoordinates[v->ndim];
+    getCoordinateFromBlock(currPosInBlock, blockSel, v->ndim, spatialCoordinates, v->ndim);
+    return getPosInVariable(v, v->ndim, spatialCoordinates);
+}
+
+int evaluateWithIdxOnBoundingBox(ADIOS_FILE* idxFile, ADIOS_QUERY* q, int timeStep)
+{  
+  ADIOS_SELECTION* sel = q->sel;
+  ADIOS_VARINFO* v = q->varinfo;
+
+  create_fastbit_internal(q);
+
+  if (v == NULL) {
+    ADIOS_QUERY* left = (ADIOS_QUERY*)(q->left);
+    ADIOS_QUERY* right = (ADIOS_QUERY*)(q->right);
+
+    if (evaluateWithIdxOnBoundingBox(idxFile, left, timeStep) < 0) {
+      return -1;
+    }
+    if (evaluateWithIdxOnBoundingBox(idxFile, right, timeStep) < 0) {
+      return -1;
+    }
+
+    setCombinedQueryInternal(q);
+  } else {
+    // is a leaf
+    if (q->rawDataSize == 0) {
+      return 0;
+    }
+
+    int blockStart=0; // relative
+    int blockEnd = 0; // relative
+    int i=0;
+
+    const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = NULL;
+    if (sel == NULL) {
+        blockStart=0;
+	if (v->nsteps == 1) { // could be streaming open
+	  blockEnd = v->nblocks[0]-1;
+	} else {
+	  blockEnd = v->nblocks[timeStep] -1;      
+	}
+	log_debug(" got blockStart = %d, blockEnd = %d\n", blockStart, blockEnd);
+    } else {
+        bb = &(sel->u.bb);      
+	if (v->blockinfo == NULL) {
+	  common_read_inq_var_blockinfo(q->file, v);
+	}
+	blockStart = fastbit_adios_util_getRelativeBlockNumForPoint(v,bb->start,timeStep);
+	uint64_t end[v->ndim];
+	for (i=0; i<v->ndim; i++) {
+	  end[i] = bb->start[i]+bb->count[i]-1;
+	}
+	blockEnd = fastbit_adios_util_getRelativeBlockNumForPoint(v, end, timeStep);
+	log_debug(" figured blockStart = %d, blockEnd = %d\n", blockStart, blockEnd);
+    }
+
+    if ((blockStart < 0) || (blockEnd < 0) || (blockStart > blockEnd)) {
+        adios_error (err_invalid_query_value, "Query processing failed. Unable to continue using index. vid=%d, dim[0]=%lld\n", v->varid, v->dims[0]);
+	return -1;
+    }
+    uint16_t* bitSlice = malloc((q->rawDataSize)* sizeof(uint16_t));
+
+    for (i=0; i<q->rawDataSize; i++) {
+      bitSlice[i] = 0;
+    }
+
+    uint64_t currBlockIdx = blockStart;
+
+    uint64_t sumBlocksBeforeThisTimeStep = 0;
+    if (v->nsteps > 1) { // non streaming case
+      for (i=0;i<timeStep; i++) {
+	sumBlocksBeforeThisTimeStep = v->nblocks[i];
+      }
+    }
+    uint64_t junk=0;
+    for (currBlockIdx=blockStart; currBlockIdx <= blockEnd; currBlockIdx++) {
+      getHandle(timeStep, currBlockIdx, idxFile, q);	      
+      if (((FASTBIT_INTERNAL*)(q->queryInternal))->_handle == 0) {
+	log_warn(" Unable to construct fastbit query with NULL. Use _no_o idx method \n");
+	return -1;
+      }
+      uint64_t count = fastbit_selection_evaluate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle); 
+      
+      junk += count;
+      log_debug("condition, %s, block: %lld hits = %lld, sum of hits so far: %lld\n", q->condition, currBlockIdx, count, junk);
+      //i = currBlockIdx-blockStart;
+      uint64_t  coordinateArray[count];
+      fastbit_selection_get_coordinates(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle, coordinateArray, count, 0);      
+
+      //fastbit_selection_free(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle);
+      ////fastbit_iapi_free_array_by_addr(q->_dataSlice); // if attached index    
+      //fastbit_iapi_free_array_by_addr(q->dataSlice); // if attached index       
+      clear_fastbit_internal_recursive(q);
+
+      int absBlockIdx = currBlockIdx+sumBlocksBeforeThisTimeStep;
+      int k=0;
+      for (k=0; k<count; k++) {
+	uint64_t currPosInBlock = coordinateArray[k];
+	int64_t currPos = 0;
+	if (bb != NULL) {
+	  currPos = getRelativeIdxInBoundingBox(currPosInBlock, bb, &(v->blockinfo[absBlockIdx]));
+	} else {
+	  currPos = getRelativeIdxInVariable(currPosInBlock, v,  &(v->blockinfo[absBlockIdx]));
+	}
+
+	log_debug("%lld th in block[%d],   =>  in actual box %lld  \n", currPosInBlock, absBlockIdx, currPos);
+	//log_warn("%lld th in block[%d],   =>  in actual %lld, limit: %lld \n", currPosInBlock, currBlockIdx, currPos, q->rawDataSize);
+	//if ((currPos >= 0) && (currPos < q->rawDataSize)) {
+	if (currPos >= 0) {
+	  bitSlice[currPos] = 1;
+	}
+      }
+
+      log_debug("----\n");
+    }
+
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);      
+
+    char bitsArrayName[50+strlen(q->condition)];
+    sprintf(bitsArrayName, "%ld-%d-%s-%d-%d", fastbit_adios_getCurrentTimeMillis(), v->varid, q->condition, timeStep, rank);
+    //return fastbit_selection_create(dataType, dataOfInterest, dataSize, compareOp, &vv);
+
+    free(q->dataSlice);
+    q->dataSlice = bitSlice;
+
+    fastbit_iapi_free_array_by_addr(q->dataSlice);
+    fastbit_iapi_register_array(bitsArrayName, FastBitDataTypeUShort, q->dataSlice, q->rawDataSize);
+
+    //printData(q->_dataSlice, adios_unsigned_short, q->_rawDataSize); 
+    //fastbit_selection_free(q->_queryInternal);
+    FastBitSelectionHandle h = fastbit_selection_osr(bitsArrayName, FastBitCompareGreater, 0.5);
+    fastbit_adios_util_checkNotNull(h, bitsArrayName);    
+    ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle = h;
+ 
+    //fastbit_adios_util_checkNotNull(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle, bitsArrayName);
+  }
+}
+
+FastBitSelectionHandle createHandle(ADIOS_QUERY* q, const char* registeredArrayName)
+{
+  FastBitDataType  dataType = fastbit_adios_util_getFastbitDataType(q->varinfo->type);
+  FastBitCompareType compareOp = fastbit_adios_util_getFastbitCompareType(q->predicateOp);
+
+  uint64_t dataSize = q->rawDataSize;
+
+  char* endptr;
+  double vv = strtod(q->predicateValue, &endptr);
+
+  if (dataType == FastBitDataTypeDouble) {
+    //double vv = strtod(q->predicateValue, &endptr);
+    assertValue(q->predicateValue, endptr);
+    return fastbit_selection_osr(registeredArrayName, compareOp, vv);
+  } else if ((dataType == FastBitDataTypeInt) || (dataType == FastBitDataTypeLong) || (dataType == FastBitDataTypeUInt) || (dataType == FastBitDataTypeULong)) {
+    //long vv = strtol(q->predicateValue, &endptr, 10);    
+    assertValue(q->predicateValue, endptr);
+    return fastbit_selection_osr(registeredArrayName, compareOp, (double)vv);
+  } else if (dataType == FastBitDataTypeFloat) {
+    //float vv = strtof(q->predicateValue, &endptr);
+    assertValue(q->predicateValue, endptr);
+    return fastbit_selection_osr(registeredArrayName, compareOp, (double)vv);
+  } else {
+    return  NULL;
+  }
+}
+
+
+void getHandleFromBlockAtLeafQuery(int timeStep, int blockIdx, ADIOS_FILE* idxFile, ADIOS_QUERY* q) 
+{
+  //double *keys = NULL; int64_t*offsets= NULL; uint32_t *bms = NULL;  
+    uint64_t nk, no, nb;
+    
+    ADIOS_VARINFO* v = q->varinfo;
+    
+    ADIOS_FILE* dataFile = q->file;
+
+    /*
+    // read data from dataFile
+    ADIOS_SELECTION* box = common_read_selection_writeblock(blockIdx);
+    common_read_inq_var_blockinfo(dataFile, v);
+    */
+    if (v->blockinfo == NULL) {
+      common_read_inq_var_blockinfo(dataFile, v);
+    }
+
+    uint64_t blockSize = 0;
+    if (q->file->is_streaming == 1) {
+        blockSize = fastbit_adios_util_getBlockSize(v, -1, blockIdx);
+    } else {
+        blockSize = fastbit_adios_util_getBlockSize(v, timeStep, blockIdx);
+    }
+
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);      
+
+    char blockDataName[40+strlen(q->condition)];
+    sprintf(blockDataName, "%d-%s-%d-%d-%ld-%d", v->varid, q->condition, timeStep, blockIdx, fastbit_adios_getCurrentTimeMillis(), rank);
+
+    FASTBIT_INTERNAL* itn = (FASTBIT_INTERNAL*)(q->queryInternal);
+#ifdef _READ_BMS_AS_NEEDED
+    log_debug("FastBit will get bms as needed, not at the same time as key/offsets\n");
+    if (fastbit_adios_util_readNoBMSFromIndexFile(idxFile, v, timeStep, blockIdx, &(itn->_keys), &nk, &(itn->_offsets), &no, &(itn->_bmsVarName)) < 0)     
+#else
+    if (fastbit_adios_util_readFromIndexFile(idxFile, v, timeStep, blockIdx, &(itn->_keys), &nk, &(itn->_offsets), &no, &(itn->_bms), &nb) < 0) 
+#endif
+    {
+      // no idx for this variable, read from file:
+      free(q->dataSlice);
+      q->dataSlice = malloc(common_read_type_size(v->type, v->value)*blockSize);
+      
+      ADIOS_SELECTION* box = common_read_selection_writeblock(blockIdx);   
+      common_read_inq_var_blockinfo(dataFile, v);        
+
+      int errorCode = 0;
+      if (dataFile->is_streaming == 1) {
+	errorCode = common_read_schedule_read_byid(dataFile, box, v->varid, 0, 1, NULL, q->dataSlice);
+      } else {
+	errorCode = common_read_schedule_read_byid(dataFile, box, v->varid, timeStep, 1, NULL, q->dataSlice);
+      }
+
+      if (errorCode != 0) {
+          log_error("      %s:%d  schedule read error code = %d adios_error=%d \n", __func__, __LINE__, errorCode, adios_errno);
+          //return errorCode;
+	  return;
+      }
+      common_read_perform_reads(dataFile,1);
+
+      FastBitDataType  dataType = fastbit_adios_util_getFastbitDataType(q->varinfo->type);
+      FastBitCompareType compareOp = fastbit_adios_util_getFastbitCompareType(q->predicateOp);
+
+      setQueryInternal(q, compareOp, dataType, blockSize, blockDataName);
+      common_read_selection_delete(box);
+      return;
+    }
+    
+    //int err = fastbit_iapi_register_array(blockDataName, fastbit_adios_util_getFastbitDataType(v->type), q->_dataSlice, blockSize);
+    uint64_t nv = blockSize;
+    itn->_arrayName = malloc(strlen(blockDataName)+2);
+    sprintf(itn->_arrayName, "%s", blockDataName);
+    
+    int ierr = fastbit_iapi_register_array_index_only(itn->_arrayName, fastbit_adios_util_getFastbitDataType(v->type), &nv, 1 , 
+#ifdef _READ_BMS_AS_NEEDED
+						      itn->_keys, nk, itn->_offsets, no, itn, adios_bmreader);
+#else
+						      itn->_keys, nk, itn->_offsets, no, itn->_bms, adios_bmreader);
+#endif
+      /*
+    if (ierr != 0) {
+      log_error(" registering array failed. fastbit err code = %lld\n", ierr);
+    }
+    //printData(bms, adios_unsigned_integer, nb);
+
+    ierr = fastbit_iapi_attach_index (blockDataName, keys, nk, offsets, no, bms, mybmreader);
+      */
+    if (ierr < 0) {
+      log_debug(" reattaching index failed. %s, fastbit err code = %d\n", blockDataName, ierr);
+      ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle = NULL;
+      //result = ierr;
+    } else {
+      FastBitSelectionHandle h = createHandle(q, blockDataName); //fastbit_selection_osr(blockDataName, getFastbitCompareType(q->_op), q->_value);
+      fastbit_adios_util_checkNotNull(h, blockDataName);
+      ((FASTBIT_INTERNAL*)(q->queryInternal))->_handle = h;      
+      //fastbit_adios_util_checkNotNull(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle, blockDataName);
+    }
+}
+
+
+
+void printQueryData(ADIOS_QUERY* q, FastBitDataType dataType, int timeStep) {
+  uint64_t dataSize = q->rawDataSize;
+  int j;
+  int batchSize = 31;
+  log_debug ("::\t %s At timestep: %d datasize=%llu \n\t\t   raw data:  [", q->condition, timeStep, dataSize);
+  for (j = 0; j < dataSize; j++) {
+    if ((j < batchSize) || ((dataSize -j) < batchSize)) {
+      if ((j % 10) == 0) {
+	log_debug(" \n\t\t           ");
+      }
+      if (dataType == FastBitDataTypeDouble) {
+	log_debug(" %lg ", ((double *)(q->dataSlice))[j]);
+      } else if (dataType == FastBitDataTypeFloat) {
+	log_debug(" %g ", ((float *)(q->dataSlice))[j]);
+      } else if (dataType == FastBitDataTypeUInt) {
+	log_debug("%d ", ((uint32_t  *)(q->dataSlice))[j]);
+      } else if (dataType == FastBitDataTypeULong) {
+	log_debug("%lld ", ((uint64_t  *)(q->dataSlice))[j]);
+      } else {
+	//log_debug("\t%g ", ((uint32_t *)(q->_dataSlice))[j]);
+	log_debug(" *  ");
+      }
+    } else {
+      if (j == batchSize) {
+	log_debug(" ... ");
+      }
+      continue;
+      //break;
+    }
+  }
+  log_debug ("]\n");
+}
+
+
+// q is a leaf
+int readWithTimeStepNoIdx(ADIOS_QUERY* q, int timeStep) {
+  if (q->rawDataSize == 0) {
+    return 0;
+  }
+  FastBitDataType  dataType = fastbit_adios_util_getFastbitDataType(q->varinfo->type);
+  FastBitCompareType compareOp = fastbit_adios_util_getFastbitCompareType(q->predicateOp);
+
+  int ts = timeStep;
+  if (q->file->is_streaming) 
+      ts = 0; // if file is opened as stream, the actual 'actual timestep' is always 0
+
+  int errorCode = common_read_schedule_read_byid (q->file, q->sel, q->varinfo->varid, 
+                                                  ts, 1, NULL,  q->dataSlice);
+  log_debug("      schedule read error code = %d adios_error=%d \n", errorCode, adios_errno);
+  if (errorCode != 0) {
+    return errorCode;
+  }
+
+  common_read_perform_reads (q->file, 1); // return 0 regardless whether data is valid, so donnt need to check return value     
+  log_debug("      perform read got error code = %d adios_errno=%d\n", errorCode, adios_errno);
+  if (adios_errno != 0) {
+    return -1;
+  }
+  
+  printQueryData(q, dataType, timeStep);
+  uint64_t dataSize = q->rawDataSize;
+  //common_free_varinfo(q->_var);
+
+  int rank;
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);      
+
+  char datasetName[strlen(q->condition) + 40];
+  sprintf(datasetName, "noidx-%s-%d-%ld-%d", q->condition, timeStep, fastbit_adios_getCurrentTimeMillis(),rank);  
+  setQueryInternal(q, compareOp, dataType, dataSize, datasetName);
+
+  return 0;
+}
+
+/*
+int readWithTimeStep(ADIOS_QUERY* q, int timeStep, ADIOS_FILE* idxFile) {
+  if (idxFile == NULL) {
+    return readWithTimeStepNoIdx(q, timeStep);
+  } else {
+    return readWithTimeStepWithIdx(q, timeStep, idxFile);
+  }
+}
+*/
+
+int prepareData(ADIOS_QUERY* q, int timeStep) 
+{
+  if (q->onTimeStep == timeStep) {
+    log_debug("::\t query data has been read for timestep: %d\n", timeStep);
+    return 0;
+  } 
+
+  if (q->varinfo != NULL) {
+    if (q->queryInternal != NULL) {
+      //fastbit_selection_free(q->queryInternal);
+      clear_fastbit_internal(q);
+    }
+    
+    if (q->queryInternal == NULL) {
+      q->queryInternal = malloc(sizeof(FASTBIT_INTERNAL));
+    }
+
+    int errorCode = readWithTimeStepNoIdx(q, timeStep);
+    if (errorCode != 0) {
+      return errorCode;
+    }
+  } else {
+    int errorCode1 = prepareData((ADIOS_QUERY*)(q->left), timeStep);
+    if (errorCode1 != 0) {
+      return errorCode1;
+    }
+
+    int errorCode2 = prepareData((ADIOS_QUERY*)(q->right), timeStep);
+    if (errorCode2 != 0) {
+      return errorCode2;
+    }
+
+    setCombinedQueryInternal(q);
+  }
+  q->onTimeStep = timeStep;
+  q->maxResultsDesired = 0;
+  q->resultsReadSoFar = 0;
+
+  return 0;
+}
+
+
+
+//
+// selections in q are all block(same or different)
+//
+/*
+FastBitSelectionHandle blockSelectionFastbitHandle(ADIOS_FILE* idxFile, ADIOS_QUERY* q, int timeStep)
+{
+  if (q->_var != NULL) {
+    const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(q->_sel->u.block);
+    //int absBlockCounter = query_utils_getGlobalWriteBlockId(wb->index, timeStep, q->_var);    
+    getHandleFromBlockAtLeafQuery(timeStep, wb->index, idxFile, q);
+  } else {
+    FastBitSelectionHandle left = blockSelectionFastbitHandle(idxFile, q->_left, timeStep);
+    FastBitSelectionHandle right = blockSelectionFastbitHandle(idxFile, q->_right, timeStep);
+
+    if (q->_leftToRightOp == ADIOS_QUERY_OP_AND) {
+      return fastbit_selection_combine(left, FastBitCombineAnd, right);
+    } else {
+      return fastbit_selection_combine(left, FastBitCombineOr, right);
+    }        
+  }
+}
+*/
+void blockSelectionFastbitHandle(ADIOS_FILE* idxFile, ADIOS_QUERY* q, int timeStep)
+{
+  if (q->queryInternal == NULL) {
+    q->queryInternal = malloc(sizeof(FASTBIT_INTERNAL));
+  }
+  
+  if (q->varinfo != NULL) {
+    const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(q->sel->u.block);
+    //int absBlockCounter = query_utils_getGlobalWriteBlockId(wb->index, timeStep, q->_var);    
+    getHandleFromBlockAtLeafQuery(timeStep, wb->index, idxFile, q);
+  } else {
+    blockSelectionFastbitHandle(idxFile, q->left, timeStep);
+    blockSelectionFastbitHandle(idxFile, q->right, timeStep);
+
+    setCombinedQueryInternal(q);
+  }
+}
+
+
+void getHandle(int timeStep, int blockIdx, ADIOS_FILE* idxFile, ADIOS_QUERY* q) 
+{
+  ADIOS_FILE* dataFile = q->file;
+  ADIOS_VARINFO* v = q->varinfo;
+
+  FastBitSelectionHandle result = NULL;
+  if (v == NULL) {
+    getHandle(timeStep, blockIdx, idxFile, q->left);
+    getHandle(timeStep, blockIdx, idxFile, q->right);
+
+    setCombinedQueryInternal(q);
+    /*
+    ADIOS_QUERY* left  = (ADIOS_QUERY*)(q->_left);
+    ADIOS_QUERY* right = (ADIOS_QUERY*)(q->_right);
+
+    if (q->_leftToRightOp == ADIOS_QUERY_OP_AND) {
+      q->_queryInternal = fastbit_selection_combine(left->_queryInternal, FastBitCombineAnd, right->_queryInternal);
+    } else {
+      q->_queryInternal = fastbit_selection_combine(left->_queryInternal, FastBitCombineOr, right->_queryInternal);
+      } */   
+  } else {
+    getHandleFromBlockAtLeafQuery(timeStep, blockIdx, idxFile, q);
+  }     
+}
+
+int64_t  applyIndexIfExists (ADIOS_QUERY* q, int timeStep) 
+{
+  if (q->onTimeStep == timeStep) {
+    //log_debug("::\t query index data has been read for timestep: %d\n", gCurrentTimeStep);
+    return 0;
+  } 
+
+  // call fastbit_estimate_num_hits(selection)
+  ADIOS_QUERY* leaf = getFirstLeaf(q);
+  ADIOS_FILE* f = leaf->file;
+  const char* basefileName = f->path;
+
+  int64_t result = -1;
+
+  ADIOS_FILE* idxFile = ((FASTBIT_INTERNAL*)(q->queryInternal))->_idxFile;
+
+  //MPI_Comm comm_dummy = MPI_COMM_SELF;
+  //ADIOS_FILE* idxFile = fastbit_adios_util_getFastbitIndexFileToRead(basefileName, comm_dummy);
+    
+  if (idxFile != NULL) {
+    //clear_fastbit_internal(q);
+      if ((leaf->sel == NULL) || (leaf->sel->type == ADIOS_SELECTION_BOUNDINGBOX)) {
+	  if (evaluateWithIdxOnBoundingBox(idxFile,  q, timeStep) >= 0) {
+	     result = fastbit_selection_estimate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle);	
+	  }
+      } else if (leaf->sel->type == ADIOS_SELECTION_WRITEBLOCK) {
+	  blockSelectionFastbitHandle(idxFile, q, timeStep);
+	  result= fastbit_selection_estimate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle);       	  
+      } 
+
+      log_debug("idx evaluated with result=%" PRId64 "\n", result);
+      if (result > -1) {
+	q->onTimeStep = timeStep;
+	q->maxResultsDesired = 0;
+	q->resultsReadSoFar = 0;
+
+	//return result;
+      } // otherwise, use no idx method
+      //common_read_close(idxFile);      
+  }
+  
+  
+  //free(idxFile); //causes crash
+  return result;
+}
+
+
+int adios_query_fastbit_can_evaluate(ADIOS_QUERY* q) 
+{
+    /* Return 1 if fastbit index file exists.
+       Even though Fastbit library works without index
+       we return 0 here, so that other query methods may pick up
+       this query.
+       If no method is found, the common layer may still call 
+       the fastbit method (as default) to evaluate the query.
+     */
+   ADIOS_QUERY* leaf = getFirstLeaf(q);
+   return fastbit_adios_util_FastbitIndexFileExists (leaf->file->path);
+ }
+
+/*
+int assertTimeStepValidWithQuery(ADIOS_QUERY* q)
+{
+  ADIOS_QUERY* leaf = getFirstLeaf(q);
+  if (leaf->varinfo == NULL) {
+    log_debug("No variable on query leaf. Can not continue. Exiting.\n");
+    return -1;
+  }
+
+  int timestep = gCurrentTimeStep;
+
+  if (leaf->file->is_streaming) {
+    int currentFileStep = leaf->file->current_step;
+    if (timestep != currentFileStep) {
+      adios_query_set_timestep(currentFileStep);
+    }
+    return 0;
+  }
+
+  if (leaf->varinfo->nsteps <= timestep) {
+    log_debug("timestep %d is more than variables limit: %d, can not evaluate.\n", timestep, leaf->varinfo->nsteps);
+    return -1;
+  }
+  return 0;
+}
+*/
+int64_t adios_query_fastbit_estimate(ADIOS_QUERY* q, int incomingTimestep) 
+{
+  if (q == NULL) {
+    return -1;
+  }
+
+  //int timeStep = gCurrentTimeStep;
+
+  adios_query_fastbit_init();
+  /*  if (assertTimeStepValidWithQuery(q) != 0) {
+    return -1;
+    }*/
+
+  create_fastbit_internal(q);
+
+  int timeStep = adios_get_actual_timestep(q, incomingTimestep);
+  int64_t estimate = applyIndexIfExists(q, timeStep);
+  if (estimate > 0) {
+    return estimate;
+  } else if (estimate == 0) { // estimated was called before
+    return fastbit_selection_estimate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle);
+  }
+
+  //
+  // no idx estimation
+  //
+  int errorCode = prepareData(q, timeStep);
+  if (errorCode != 0) {
+    return -1;
+  }
+  return fastbit_selection_estimate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle);
+}
+ 
+
+int64_t call_fastbit_evaluate(ADIOS_QUERY* q, int timeStep, uint64_t _maxResult) 
+{
+  create_fastbit_internal(q);
+  
+  log_debug("raw data size = %" PRId64 ", %s\n", q->rawDataSize, q->condition);
+    
+  int64_t estimate = applyIndexIfExists(q, timeStep);
+  if (estimate < 0) {   // use no idx
+    log_debug(" use no idx on timestep %d\n", timeStep);
+    int errorCode = prepareData(q, timeStep);
+    if (errorCode != 0) {
+      return -1;
+    }
+  }
+
+  if (q->maxResultsDesired > 0) { // evaluated already
+      if (_maxResult <= 0) { // stay put
+	  return q->maxResultsDesired;
+      } 
+
+      if (q->maxResultsDesired > _maxResult) {
+         q->maxResultsDesired = _maxResult;
+	 return q->maxResultsDesired;
+     }
+     log_debug(":: user required more results. will evaluate again. \n");
+  }
+
+  if ((q->queryInternal == 0) || (((FASTBIT_INTERNAL*)(q->queryInternal))->_handle == 0)) {
+    //log_error(">>  Unable to use fastbit to evaluate NULL query.\n"); 
+    log_debug("query is NULL, result is NULL.");
+    return 0;
+  }
+  int64_t numHits = fastbit_selection_evaluate(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle); 
+  log_debug(":: ==> fastbit_evaluate() num of hits found for [%s] = %lld, at timestep %d \n", q->condition, numHits, timeStep);  
+
+  if (numHits < 0) {
+    return 0;
+  }
+
+  if (numHits <= _maxResult) {
+    // take it as max
+    q->maxResultsDesired = numHits; 
+  } else if (_maxResult > 0)  {
+    q->maxResultsDesired = _maxResult;
+  } else {
+    q->maxResultsDesired = numHits; 
+  }
+
+  return q->maxResultsDesired;
+}
+
+
+void printOneSpatialCoordinate(int dim, uint64_t* spatialCoordinates)
+{
+      int k;
+      log_debug(" spatial = [");
+      for (k=0; k<dim; k++) {
+	log_debug("%lld ", spatialCoordinates[k]);
+      }
+      log_debug("]\n");
+
+}
+
+void fillUp(int dimSize, uint64_t* spatialCoordinates, uint64_t i, uint64_t* pointArray) 
+{
+  int k=0;
+
+  int fortran_order = futils_is_called_from_fortran();
+
+  for (k = 0; k < dimSize; k++) {	  
+    uint64_t idx = i * dimSize + k;
+    //log_debug(" points[%d] = %lld ", idx, spatialCoordinates[k]);
+
+    if (fortran_order == 1) {
+      pointArray[idx] = spatialCoordinates[dimSize-1-k];
+      //printf(" points[%lld] = %lld dimSize=%d k=%d sp=%lld", idx, pointArray[idx], dimSize, k, spatialCoordinates[k]); 
+    } else {
+      pointArray[idx] = spatialCoordinates[k];
+    }
+    
+
+    //printf("   points[%d] = %lld ", idx, spatialCoordinates[k]);
+    //pointArray[idx] = spatialCoordinates[k];
+  }	
+  log_debug("\n");
+}
+
+ADIOS_SELECTION* getSpatialCoordinatesDefault(ADIOS_VARINFO* var, uint64_t* coordinates, uint64_t retrivalSize, int timeStep)
+{
+  uint64_t arraySize = retrivalSize * (var->ndim);
+  uint64_t* pointArray = (uint64_t*) (malloc(arraySize  * sizeof(uint64_t)));
+
+  int i;
+  for (i=0; i<retrivalSize; i++) {
+    uint64_t spatialCoordinates[var->ndim];
+    getCoordinateFromVariable(coordinates[i], var, var->ndim, spatialCoordinates);
+    
+    fillUp(var->ndim, spatialCoordinates, i, pointArray);
+  }
+  ADIOS_SELECTION* result =  common_read_selection_points(var->ndim, retrivalSize, pointArray);
+  //free(pointArray); // user has to free this
+  return result;
+}
+
+ADIOS_SELECTION* getSpatialCoordinates(ADIOS_SELECTION* outputBoundary, uint64_t* coordinates, uint64_t retrivalSize, ADIOS_VARINFO* v, int timeStep)
+{
+  int k = 0;
+  uint64_t i=0;
+
+  switch (outputBoundary->type) {
+  case  ADIOS_SELECTION_BOUNDINGBOX:    
+    {
+      const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(outputBoundary->u.bb);
+
+      uint64_t arraySize = retrivalSize * (bb->ndim);
+      uint64_t* pointArray = (uint64_t*) (malloc(arraySize  * sizeof(uint64_t)));
+      
+      for (i=0; i<retrivalSize; i++) {
+	   uint64_t spatialCoordinates[bb->ndim];
+	   getCoordinateFromBox(coordinates[i], bb, bb->ndim, spatialCoordinates);
+
+	   fillUp(bb->ndim, spatialCoordinates, i, pointArray);
+      }
+      ADIOS_SELECTION* result =  common_read_selection_points(bb->ndim, retrivalSize, pointArray);    
+      //free(pointArray); // user has to free this
+      return result;
+      break;
+    }
+  case ADIOS_SELECTION_POINTS:
+    {
+      const ADIOS_SELECTION_POINTS_STRUCT *points = &(outputBoundary->u.points);	      
+
+      uint64_t arraySize = retrivalSize * (points->ndim);
+      uint64_t* pointArray = (uint64_t*) (malloc(arraySize  * sizeof(uint64_t)));
+      
+      for (i=0; i<retrivalSize; i++) {	
+	uint64_t spatialCoordinates[points->ndim];
+	getCoordinateFromPoints(coordinates[i], points, spatialCoordinates);
+	fillUp(points->ndim, spatialCoordinates, i, pointArray);
+      }
+      ADIOS_SELECTION* result = common_read_selection_points(points->ndim, retrivalSize, pointArray);	      
+      //free(pointArray); // user has to free this
+      return result;
+      //printOneSpatialCoordinate(points->ndim, spatialCoordinates);      
+      
+      break;
+    }
+    //  if it is blocks, should use bounding box to retrive the coordinates
+  case ADIOS_SELECTION_WRITEBLOCK:
+    {
+      const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(outputBoundary->u.block);
+      
+      uint64_t arraySize = retrivalSize * (v->ndim);
+      uint64_t* pointArray = (uint64_t*) (malloc(arraySize  * sizeof(uint64_t)));
+      
+      for (i=0; i<retrivalSize; i++) {
+	   uint64_t spatialCoordinates[v->ndim];
+	   //create bb from block;
+	   int absBlockCounter = query_utils_getGlobalWriteBlockId(wb->index, timeStep, v);
+	   getCoordinateFromBlock(coordinates[i], &(v->blockinfo[absBlockCounter]), v->ndim, spatialCoordinates, v->ndim);
+
+	   fillUp(v->ndim, spatialCoordinates, i, pointArray);
+      }
+      ADIOS_SELECTION* result = common_read_selection_points(v->ndim, retrivalSize, pointArray);
+      //free(pointArray); // user has to free this
+      return result;
+      break;      
+    }
+  default:
+    log_error("Error: Type of selection is not supported!\n\n");
+    return NULL;
+  }
+}
+
+ADIOS_QUERY* getFirstLeaf(ADIOS_QUERY* q) {
+  if (q == NULL) {
+    return NULL;
+  }
+
+  if ((q->left == NULL) && (q->right == NULL)) {
+    return q;
+  }
+  return getFirstLeaf(q->left);
+}
+
+int  adios_query_fastbit_evaluate(ADIOS_QUERY* q,
+				  int incomingTimestep,
+				  uint64_t batchSize, 
+				  ADIOS_SELECTION* outputBoundary, 
+				  ADIOS_SELECTION** result)
+{
+  /*
+  if (q->_onTimeStep < 0) {
+    log_error(":: Error: need to call evaluate first! Exit.\n");
+    return -1;
+  }
+  */
+  adios_query_fastbit_init();
+
+  /*if (assertTimeStepValidWithQuery(q) != 0) {
+    return -1;
+    }*/
+
+  if (batchSize == 0) {
+    log_debug(":: ==> will not fetch. batchsize=0\n");
+    return -1;
+  }
+
+  int timeStep = adios_get_actual_timestep(q, incomingTimestep);
+
+  call_fastbit_evaluate(q, timeStep, 0);
+  log_debug("::\t max=%llu  lastRead=%llu batchsize=\n", q->maxResultsDesired, q->resultsReadSoFar, batchSize);
+
+  uint64_t retrivalSize = q->maxResultsDesired - q->resultsReadSoFar;
+  if (retrivalSize == 0) {
+     log_debug(":: ==> no more results to fetch\n");
+     return 0;
+  }
+
+  if (retrivalSize > batchSize) {
+      retrivalSize = batchSize;
+  }
+
+  uint64_t coordinates[retrivalSize];
+
+  fastbit_selection_get_coordinates(((FASTBIT_INTERNAL*)(q->queryInternal))->_handle, coordinates, retrivalSize, q->resultsReadSoFar);
+    
+  q->resultsReadSoFar += retrivalSize;
+  
+  if (outputBoundary == 0) {
+    ADIOS_QUERY* firstLeaf = getFirstLeaf(q);
+    if ((firstLeaf == NULL) || (firstLeaf->varinfo == NULL)) {
+	log_error(":: Error: unable to get a valid first leaf! Exit. \n");
+	return -1;
+      }
+    if (firstLeaf->sel == NULL) {
+      *result = getSpatialCoordinatesDefault(firstLeaf->varinfo, coordinates, retrivalSize, timeStep);
+    } else {
+      *result = getSpatialCoordinates(firstLeaf->sel, coordinates, retrivalSize, firstLeaf->varinfo, timeStep);
+    }
+  } else {
+    //*result = getSpatialCoordinates(outputBoundary, coordinates, retrivalSize);
+    // variable needs to be in place to handle the block information
+    // not sure wheather this is well defined case of combined query?! but the first varibale will be used for block information calculation
+    *result = getSpatialCoordinates(outputBoundary, coordinates, retrivalSize, getFirstLeaf(q)->varinfo, timeStep);
+
+    if (*result == 0) {
+      return -1;
+    }
+  }
+  // print results
+  /*
+  int i=0; 
+  log_debug("\n:: coordinates: [\n");
+  for (i=0; i<retrivalSize; i++) {  
+    if (i<100) {
+      log_debug("%lld ", coordinates[i]);
+    } else {
+      break;
+    }
+  }
+  log_debug("]\n\n");
+  */
+  if (q->resultsReadSoFar == q->maxResultsDesired) {
+    return 0;
+  } else {
+    return 1;
+  }
+}
+
+//void adios_fastbit_free_query(ADIOS_QUERY* query) 
+void  adios_query_fastbit_free(ADIOS_QUERY* query) 
+{  
+  if (query == NULL) {
+    return;
+  }
+
+  /*
+  log_debug(":: free %s  has parent? %d\n", query->condition, query->hasParent);
+  
+  free(query->predicateValue);
+  free(query->condition);
+  
+  //adios_selection_delete(query->_sel);
+  common_read_free_varinfo(query->varinfo);
+
+  // can free _queryInternal only once
+  //if(query->hasParent == 0) {
+    //fastbit_selection_free(query->queryInternal);
+  clear_fastbit_internal(query);
+  free(query->queryInternal);
+    //}
+  free(query->dataSlice);
+  query->dataSlice = 0; 
+
+  free(query);
+  query = 0;
+  */
+
+  FASTBIT_INTERNAL* s = (FASTBIT_INTERNAL*)(query->queryInternal);  
+  if (query->hasParent == 0) {
+    if ((s!= NULL) && (s->_idxFile != NULL)) {
+      common_read_close(s->_idxFile);
+    }
+  }
+
+  clear_fastbit_internal(query);
+  free(query->queryInternal);
+
+}
+
+
+/*
+
+*/
+
+
+
+
+
+
+void getVarName(const char* sliceStr, char** varName, char** dimDef)
+{                                           
+  //char str[strlen(sliceStr)];
+  //strncpy(str, sliceStr, strlen(sliceStr));
+  char* str = strdup(sliceStr);
+  //str[strlen(sliceStr)]=0;                                                                                                                                                      
+  char* rest = strtok(str, "[");
+
+  *varName = strdup(rest);
+
+  rest = strtok(NULL, "]"); 
+
+  if (rest == NULL) {
+    //strcpy(dimDef, "");
+    *dimDef = NULL;
+  } else {
+    *dimDef = strdup(rest);
+  }
+
+  free(str);
+}
+
+
+
+/*
+*/
+
+//
+// dimDef is asusmed to be: start0 count0, start1 count1, .. , startN countN
+//
+void createBox(ADIOS_VARINFO* v, char* dimDef, uint64_t* start, uint64_t* count)
+{
+  // assigns default:
+  int i;
+
+  for (i=0 ; i<v->ndim; i++) {
+    start[i] = 0;
+    count[i] = v->dims[i];
+  }
+
+ if ((dimDef == NULL) || (strlen(dimDef) == 0)) {
+    log_debug("::\t There is no restriction on dimension.\n");
+    //use default 
+    return;
+  }
+  
+  const char* comma = ",";
+
+  // int column=-1, columnStarts=-1, columnEnds=0;
+
+  char *dimSpecStart, *end;
+
+  dimSpecStart = end = dimDef;
+  i = 0;
+
+  while (*end) {
+    switch (*end) {
+    case ',':
+      *end = '\0';      
+      //*column = atoi(dimSpecStart);
+      
+      count[i]=atol(dimSpecStart);
+      dimSpecStart = end+1;
+      *end = ',';
+      i++;
+      break;
+    case ':':
+      *end = '\0';
+      //*columnStarts=atoi(dimSpecStart);
+      start[i] = atol(dimSpecStart);      
+      *end = ':';
+      dimSpecStart = end+1;
+      //break;
+    }
+    end++;
+  }
+
+  count[i] = atol(dimSpecStart);
+
+  for (i=0; i<v->ndim; i++) {
+    if (count[i] <= 0) {
+      count[i] = v->dims[i] - start[i];
+    }
+  }
+  /*
+  if (*column ==-1) {
+    *column = atoi(dimSpecStart);
+  } else if (*columnStarts >= 0) {    
+    *columnEnds = atoi(dimSpecStart);
+  }
+  */
+
+}
+/*
+void createBox(ADIOS_VARINFO* v, char* dimDef, uint64_t* start, uint64_t* count)
+{
+  int column=-1, columnStarts=-1, columnEnds=0;
+  parseSlice(dimDef, &column, &columnStarts, &columnEnds);
+  log_debug(" column= %d, %d:%d \n\n", column, columnStarts, columnEnds);
+
+  int j;
+  for (j = 0; j < v->ndim; j++) {
+    if (column == -1) {
+      start[j] = 0;
+      count[j] = v->dims[j];
+    } else if (j == column) {
+      
+      if (columnStarts > 0) {
+	start[j] = columnStarts;
+      } else {
+	start[j] = 0;
+      }
+      if (columnEnds > 0) {
+	count[j] = columnEnds - start[j];
+      } else {
+	count[j] = v->dims[j] - start[j];
+      }
+      
+      //start[j] = column;
+      //count[j] = 1;
+    } else {// not the column
+      start[j] = 0;
+      count[j] = v->dims[j];
+    }
+  }
+  //start[v->ndim]=0;
+  //count[v->n dim]=0;
+}
+*/
+
+enum ADIOS_PREDICATE_MODE getOp(const char* opStr) 
+{
+  if ((strcmp(opStr, ">=") == 0) || (strcmp(opStr, "GE") == 0)) {
+    return ADIOS_GTEQ;
+  } else if ((strcmp(opStr, "<=") == 0) || (strcmp(opStr, "LE") == 0)) {
+    return ADIOS_LTEQ;
+  } else if ((strcmp(opStr, "<") == 0) || (strcmp(opStr, "LT") == 0)) {
+    return ADIOS_LT;
+  } else if ((strcmp(opStr, ">") == 0) || (strcmp(opStr, "GT") == 0)) {
+    return ADIOS_GT;
+  } else if ((strcmp(opStr, "=") == 0) || (strcmp(opStr, "EQ") == 0)) {
+    return ADIOS_EQ;
+  } else { // if (strcmp(opStr, "!=") == 0) {
+    return ADIOS_NE;
+  }
+}
+
+/*
+ADIOS_QUERY* getQuery(const char* condition, ADIOS_FILE* f) 
+{
+    
+    char* varStr;// = malloc(sizeof(char) * strlen(condition)); 
+
+    //char opStr[5];
+    char* opStr ;// = malloc(sizeof(char)*5);
+    //char value[strlen(condition)];
+    char* valueStr; // = malloc(sizeof(char)*strlen(condition));
+    
+    //parseVar(condition, &varStr, &opStr, &valueStr); // these values are ok in parseVar but just valueStr became null after this call!!!??
+
+    //char str[strlen(condition)];
+    //strncpy(str, condition, strlen(condition));
+    //str[strlen(condition)] = 0;
+    char* str = strdup(condition);
+   
+
+    char * pch;
+    pch = strtok (str," ");  
+
+
+    varStr = strdup(pch);
+    
+    
+    pch = strtok (NULL, " ");
+    opStr = strdup(pch);
+    
+    
+    pch = strtok (NULL, " ");
+    valueStr = strdup(pch);
+    
+    char* varName; //[strlen(varStr)];
+    char* dimDef; //[strlen(varStr)];
+    getVarName(varStr, &varName, &dimDef);
+
+
+    ADIOS_VARINFO* v = common_read_inq_var(f, varName);
+    //ADIOS_VARINFO* v = getAdiosVariable(f, varName);
+    
+    if (v == NULL) {
+      free(valueStr);free(opStr);free(varStr);free(varName);free(str);
+      if (dimDef != NULL) 
+	{free(dimDef);}
+      return NULL;
+    }
+
+    uint64_t* start = malloc(sizeof(uint64_t)*v->ndim);
+    uint64_t* count = malloc(sizeof(uint64_t)*v->ndim);
+
+    createBox(v, dimDef, start, count);
+
+    ADIOS_SELECTION* sel =adios_selection_boundingbox (v->ndim, start, count);
+    
+    common_read_free_varinfo(v);
+
+    ADIOS_QUERY* q = adios_query_create(f, varName, sel, getOp(opStr), valueStr);
+
+
+    free(valueStr);free(opStr);free(varStr);free(varName);free(str);
+    //free(start); free(count); // if deleted, then adios_sel values would be affected
+    if (dimDef != NULL) 
+      {free(dimDef);}
+
+    log_debug("::\t query created for: %s\n", condition);
+    return q;
+}
+*/
+
+
+
+
+
+
diff --git a/src/query/query_utils.c b/src/query/query_utils.c
new file mode 100644
index 0000000..11cb59c
--- /dev/null
+++ b/src/query/query_utils.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include "core/common_read.h"
+#include "core/adios_logger.h"
+
+int query_utils_getGlobalWriteBlockId(int idxRelativeToTimeStep, int timeStep, ADIOS_VARINFO* v) 
+{
+    int absBlockCounter = idxRelativeToTimeStep;
+    int i=0;
+    for (i=0; i<v->nsteps; i++)
+    {
+        int nBlocksAtStep = v->nblocks[i];
+        if (i < timeStep) {
+            absBlockCounter += nBlocksAtStep;
+        }
+    }
+
+    return absBlockCounter;
+}
+
+
+int query_utils_file_exists (char * path)
+{
+    struct stat sb;
+    int i = stat ( path, &sb );
+    if ( i == 0 )
+        /* File found */
+        return 1;
+    return 0;
+}
+
diff --git a/src/query/query_utils.h b/src/query/query_utils.h
new file mode 100644
index 0000000..39c534f
--- /dev/null
+++ b/src/query/query_utils.h
@@ -0,0 +1,27 @@
+#ifndef __QUERY_UTILS_H__
+#define __QUERY_UTILS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "public/adios_query.h"
+
+/* helper functions for all query methods */
+
+
+/* Return global writeblock ID (among all timesteps) of 
+   a writeblock relative to a given timestep */
+int query_utils_getGlobalWriteBlockId(int idxRelativeToTimeStep, int timeStep, ADIOS_VARINFO* v);
+
+
+/* Return 1 if path exists on the file system, 0 otherwise */
+int query_utils_file_exists (char * path);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __QUERY_UTILS_H__ */
diff --git a/src/read/read_bp.c b/src/read/read_bp.c
index 8b1bd1d..8cc57cb 100644
--- a/src/read/read_bp.c
+++ b/src/read/read_bp.c
@@ -27,6 +27,7 @@
 #include "core/adios_logger.h"
 
 #include "core/transforms/adios_transforms_transinfo.h"
+#include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -39,9 +40,8 @@ static int show_hidden_attrs = 0; // don't show hidden attr by default
 static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE * fp, read_request * r);
 static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r);
 
-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);
+static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int step_offset);
 
 // NCSU - For custom memory allocation
 #define CALLOC(var, num, sz, comment)\
@@ -240,7 +240,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r);
 /* 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;
+    BP_PROC * p = GET_BP_PROC ((const ADIOS_FILE *)fp);
 
     if (p->varid_mapping)
     {
@@ -321,7 +321,7 @@ void build_ADIOS_FILE_struct (ADIOS_FILE * fp, BP_FILE * fh)
 
     MPI_Comm_rank (fh->comm, &rank);
 
-    p = (struct BP_PROC *) malloc (sizeof (struct BP_PROC));
+    p = (BP_PROC *) malloc (sizeof (BP_PROC));
     assert (p);
     p->fh = fh;
     p->streaming = 1;
@@ -419,8 +419,9 @@ static int get_new_step (ADIOS_FILE * fp, const char * fname, MPI_Comm comm, int
 */
 static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
 {
-    BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     int size_of_type;
     struct adios_index_var_struct_v1 * v;
     uint64_t i;
@@ -430,9 +431,6 @@ 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;
-
     v = bp_find_var_byid (fh, r->varid);
 
     switch (sel->type)
@@ -512,8 +510,9 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
  */
 static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
 {
-    BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     ADIOS_SELECTION * sel;
     struct adios_index_var_struct_v1 * v;
     int i, j, t, time, nsteps;
@@ -532,8 +531,6 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
     //struct adios_var_payload_struct_v1 var_payload;
 
 //    log_debug ("read_var_bb()\n");
-    p = (BP_PROC *) fp->fh;
-    fh = (BP_FILE *) p->fh;
     file_is_fortran = is_fortran_file (fh);
     has_subfile = has_subfiles (fh);
 
@@ -548,7 +545,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
     /* 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);
+    bp_get_and_swap_dimensions (fp, v, file_is_fortran, &ndim, &dims, &nsteps, file_is_fortran);
 
     assert (ndim == sel->u.bb.ndim);
     ndim = sel->u.bb.ndim;
@@ -1061,7 +1058,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
                         MPI_Comm comm, float timeout_sec)
 {
     int rank;
-    struct BP_PROC * p;
+    BP_PROC * p;
     BP_FILE * fh;
     int stay_in_poll_loop = 1;
     int file_ok = 0;
@@ -1154,7 +1151,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
 
-    p = (struct BP_PROC *) malloc (sizeof (struct BP_PROC));
+    p = (BP_PROC *) malloc (sizeof (BP_PROC));
     assert (p);
     p->fh = fh;
     p->streaming = 1;
@@ -1204,7 +1201,7 @@ ADIOS_FILE * adios_read_bp_open (const char * fname, MPI_Comm comm, enum ADIOS_L
 ADIOS_FILE * adios_read_bp_open_file (const char * fname, MPI_Comm comm)
 {
     int rank;
-    struct BP_PROC * p;
+    BP_PROC * p;
     BP_FILE * fh;
     ADIOS_FILE * fp;
 
@@ -1226,7 +1223,7 @@ ADIOS_FILE * adios_read_bp_open_file (const char * fname, MPI_Comm comm)
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
 
-    p = (struct BP_PROC *) malloc (sizeof (struct BP_PROC));
+    p = (BP_PROC *) malloc (sizeof (BP_PROC));
     assert (p);
     p->fh = fh;
     p->streaming = 0;
@@ -1296,18 +1293,8 @@ typedef struct {
 
 int adios_read_bp_close (ADIOS_FILE * fp)
 {
-    struct BP_PROC * p;
-    BP_FILE * fh;
-
-    if (!fp)
-    {
-        return 0;
-    }
-
-    p = (struct BP_PROC *) fp->fh;
-    assert (p);
-
-    fh = p->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
 
     if (p->fh)
     {
@@ -1369,8 +1356,8 @@ int adios_read_bp_close (ADIOS_FILE * fp)
  */
 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;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     int last_tidx;
     MPI_Comm comm;
     char * fname;
@@ -1513,8 +1500,9 @@ typedef struct {
     int i, j, c, count = 1, timestep;
     int size, sum_size, nsteps, prev_timestep;
     int nb; // total number of blocks (varinfo->sum_nblocks)
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     ADIOS_VARSTAT * vs;
     struct adios_index_var_struct_v1 * var_root;
 
@@ -1948,15 +1936,23 @@ typedef struct {
                 for (i = 0; i < var_root->characteristics_count; i++)
                 {
                     MALLOC(vs->blocks->avgs[i], count * sum_size, "average per writeblock")
-                    for (c = 0; c < count; c ++)
-                        vs->blocks->avgs[i][c] = bsums[i][c] / bcnts[i];
-
                     MALLOC(vs->blocks->std_devs[i], count * sum_size, "standard deviation per writeblock")
-                    for (c = 0; c < count; c ++)
-                        vs->blocks->std_devs[i][c] = 
-                            sqrt((bsum_squares[i][c] / bcnts[i]) - 
-                            (vs->blocks->avgs[i][c] * vs->blocks->avgs[i][c]));
 
+                    if(bcnts[i]) {
+                        for (c = 0; c < count; c ++)
+                            vs->blocks->avgs[i][c] = bsums[i][c] / bcnts[i];
+
+                        for (c = 0; c < count; c ++)
+                            vs->blocks->std_devs[i][c] = 
+                                sqrt((bsum_squares[i][c] / bcnts[i]) - 
+                                        (vs->blocks->avgs[i][c] * vs->blocks->avgs[i][c]));
+                    } else {
+                        // this block is an empty block (0 size) in file
+                        for (c = 0; c < count; c ++) {
+                            vs->blocks->avgs[i][c] = 0.0;
+                            vs->blocks->std_devs[i][c] = 0.0;
+                        }
+                    }
                     free (bsums[i]);
                     free (bsum_squares[i]);
                 }
@@ -2195,11 +2191,20 @@ typedef struct {
                 for(timestep = 0; timestep < nsteps; timestep ++)
                 {
                     MALLOC(vs->steps->avgs[timestep], sum_size, "average per timestep")
-                    *(vs->steps->avgs[timestep]) = *(sums[timestep]) / cnts[timestep];
+                    if(cnts[timestep]) {
+                        *(vs->steps->avgs[timestep]) = *(sums[timestep]) / cnts[timestep];
+                    } else {
+                        // no summation for this timestep (e.g. constant NAN array)
+                        *(vs->steps->avgs[timestep]) = 0.0;
+                    }
 
                     MALLOC(vs->steps->std_devs[timestep], sum_size, "standard deviation per timestep")
-                    *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep]
+                    if(cnts[timestep]) {
+                        *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep]
                                 - ((*(vs->steps->avgs[timestep]) * (*(vs->steps->avgs[timestep])))));
+                    } else {
+                        *(vs->steps->std_devs[timestep]) = 0.0;
+                    }
 
                     free (sums[timestep]);
                     free (sum_squares[timestep]);
@@ -2214,11 +2219,17 @@ typedef struct {
                 for (i = 0; i < var_root->characteristics_count; i++)
                 {
                     MALLOC(vs->blocks->avgs[i], sum_size, "average per writeblock")
-                    *(vs->blocks->avgs[i]) = *(bsums[i]) / bcnts[i];
-
                     MALLOC(vs->blocks->std_devs[i], sum_size, "standard deviation per writeblock")
-                    *(vs->blocks->std_devs[i]) = sqrt(*(bsum_squares[i]) / bcnts[i]
-                                - ((*(vs->blocks->avgs[i]) * (*(vs->blocks->avgs[i])))));
+                    if(bcnts[i]) {
+                        *(vs->blocks->avgs[i]) = *(bsums[i]) / bcnts[i];
+
+                        *(vs->blocks->std_devs[i]) = sqrt(*(bsum_squares[i]) / bcnts[i]
+                                    - ((*(vs->blocks->avgs[i]) * (*(vs->blocks->avgs[i])))));
+                    } else {
+                        // this block is an empty block (0 size) in file
+                        *(vs->blocks->avgs[i]) = 0.0;
+                        *(vs->blocks->std_devs[i]) = 0.0;
+                    }
 
                     free (bsums[i]);
                     free (bsum_squares[i]);
@@ -2267,36 +2278,42 @@ typedef struct {
     if (bsum_squares) free (bsum_squares);
     if (gsum_square) free (gsum_square);
 
+    if (cnts) free (cnts);
+    if (bcnts) free (bcnts);
+
     return 0;
 }
 
 // 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;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+    int i, j, file_is_fortran, nblks, time;
     uint64_t * ldims, * gdims, * offsets;
-    BP_FILE * fh;
+    int dummy = -1;
     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);
+    // For file mode: return all blocks info;
+    // For streaming mode: return all blocks within the current step
+    // 08/14/2014 Q. Liu
+    nblks = (p->streaming ? varinfo->nblocks[0] : varinfo->sum_nblocks);
 
     // 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));
+    blockinfo = (ADIOS_VARBLOCK *) malloc (nblks * sizeof (ADIOS_VARBLOCK));
     assert (blockinfo);
 
-    if (use_pretransform_dimensions)
-        assert(var_root->characteristics[0].transform.transform_type != adios_transform_none);
+    const struct adios_index_characteristic_struct_v1 *root_characteristic = &var_root->characteristics[0];
 
     // NCSU ALACRITY-ADIOS - Use pre-transform dimensions if instructed to do so
     int dimcount;
-    if (use_pretransform_dimensions) {
+    if (use_pretransform_dimensions && root_characteristic->transform.transform_type != adios_transform_none) {
         dimcount = var_root->characteristics[0].transform.pre_transform_dimensions.count;
     } else {
         dimcount = var_root->characteristics[0].dims.count;
@@ -2307,23 +2324,70 @@ static ADIOS_VARBLOCK * inq_var_blockinfo(const ADIOS_FILE * fp, const ADIOS_VAR
     offsets = (uint64_t *) malloc (dimcount * 8);
     assert (ldims && gdims && offsets);
 
-    for (i = 0; i < varinfo->sum_nblocks; i++)
+    time = adios_step_to_time (fp, varinfo->varid, 0);
+
+    j = 0; 
+    for (i = 0; i < nblks; i++)
     {
         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_generic_notime (use_pretransform_dimensions ?
-                                            &var_root->characteristics[i].transform.pre_transform_dimensions :
-                                            &var_root->characteristics[i].dims,
-                                         ldims, gdims, offsets, file_is_fortran
-                                         );
+        if (!p->streaming)
+        {
+            // NCSU ALACRITY-ADIOS
+            const struct adios_index_characteristic_struct_v1 *blk_characteristic = &var_root->characteristics[i];
+        	// Only use pre-transform dimensions if A) pre-transform dimensions were
+        	// requested, and B) this varblock is actually transformed. Use normal
+        	// dimensions otherwise
+            const struct adios_index_characteristic_dims_struct_v1 *blk_dims =
+            		use_pretransform_dimensions && blk_characteristic->transform.transform_type != adios_transform_none ?
+            				&blk_characteristic->transform.pre_transform_dimensions :
+            				&blk_characteristic->dims;
+
+            bp_get_dimension_generic_notime(blk_dims, ldims, gdims, offsets, file_is_fortran);
+        }
+        else
+        {
+            while (j < var_root->characteristics_count && var_root->characteristics[j].time_index != time)
+            {
+                j++;
+            }
+
+            if (j < var_root->characteristics_count)
+            {
+                // NCSU ALACRITY-ADIOS
+                const struct adios_index_characteristic_struct_v1 *blk_characteristic = &var_root->characteristics[j];
+                // Only use pre-transform dimensions if A) pre-transform dimensions were
+            	// requested, and B) this varblock is actually transformed. Use normal
+            	// dimensions otherwise
+                const struct adios_index_characteristic_dims_struct_v1 *blk_dims =
+                		use_pretransform_dimensions && blk_characteristic->transform.transform_type != adios_transform_none ?
+                				&blk_characteristic->transform.pre_transform_dimensions :
+                				&blk_characteristic->dims;
+
+                bp_get_dimension_generic_notime(blk_dims, ldims, gdims, offsets, file_is_fortran);
+                j++;
+            }
+            else
+            {
+                // shoudn't be here.
+            }
+        }
 
         // NCSU ALACRITY-ADIOS - If a time dimension was removed above, update
         // dimcount so that dimension copy/swapping works below
-        if (ldims[dimcount - 1] == 0)
+        if (dimcount > 0 && ldims[dimcount - 1] == 0)
             dimcount--;
 
+        /*Fix: the function above swaps the dimensions to C order in any case. 
+         * For Fortran callers, we have to swap it back here */
+        if (futils_is_called_from_fortran ())
+        {
+            swap_order (dimcount, ldims, &dummy);
+            swap_order (dimcount, offsets, &dummy);
+        }
+
         memcpy (blockinfo[i].start, offsets, dimcount * 8);
         memcpy (blockinfo[i].count, ldims, dimcount * 8);
 
@@ -2352,14 +2416,13 @@ int adios_read_bp_inq_var_blockinfo (const ADIOS_FILE * fp, ADIOS_VARINFO * vari
 
 // 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;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     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
@@ -2376,7 +2439,7 @@ ADIOS_TRANSINFO * adios_read_bp_inq_var_transinfo(const ADIOS_FILE *fp, const AD
         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,
+        bp_get_and_swap_dimensions_generic (fp, var_root, file_is_fortran,
                                             &transinfo->orig_ndim, &transinfo->orig_dims,
                                             &dummy,
                                             file_is_fortran != futils_is_called_from_fortran(),
@@ -2397,14 +2460,55 @@ ADIOS_TRANSINFO * adios_read_bp_inq_var_transinfo(const ADIOS_FILE *fp, const AD
         transinfo->should_free_transform_metadata = 0;
     }
     transinfo->orig_blockinfo = 0;
+    transinfo->transform_metadatas = 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) 
-{
+int adios_read_bp_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+	assert(fp);
+	assert(vi);
+	assert(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;
+    int i;
+
+    // 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);
+
     ti->orig_blockinfo = inq_var_blockinfo(fp, vi, 1); // 1 -> use original, pretransform dimensions
+    assert(ti->orig_blockinfo);
+
+    // In streaming mode, we need to offset the transform metadata and length
+    // arrays to start at the current timestep. For file mode, no such translation
+    // is needed.
+    int streaming_block_offset;
+    if (p->streaming) {
+    	int time = _adios_step_to_time(fp, var_root, 0);
+    	streaming_block_offset = get_var_start_index(var_root, time);
+    } else {
+    	streaming_block_offset = 0;
+    }
+
+    assert(streaming_block_offset < var_root->characteristics_count);
+    assert(streaming_block_offset + vi->sum_nblocks <= var_root->characteristics_count);
+
+    // Allocate and fill the transform_metadatas array
+    ti->transform_metadatas = (ADIOS_TRANSFORM_METADATA*)malloc(vi->sum_nblocks * sizeof(ADIOS_TRANSFORM_METADATA));
+    assert(ti->transform_metadatas);
+    for (i = 0; i < vi->sum_nblocks; i++) {
+    	const struct adios_index_characteristic_transform_struct *transform_char = &var_root->characteristics[streaming_block_offset + i].transform;
+
+    	ti->transform_metadatas[i] = (ADIOS_TRANSFORM_METADATA){
+    		.length = transform_char->transform_metadata_len,
+    		.content = transform_char->transform_metadata,
+    	};
+    }
+
     return 0;
 }
 
@@ -2429,6 +2533,7 @@ uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios
     ADIOS_SELECTION * sel = r->sel;
     uint64_t datasize = bp_get_type_size (v->type, "");
     int i, pgidx, ndims;
+    const struct BP_PROC * p = (struct BP_PROC *) fp->fh;
 
     if (sel->type == ADIOS_SELECTION_BOUNDINGBOX)
     {
@@ -2444,10 +2549,12 @@ 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);
-        // NCSU ALACRITY-ADIOS: Adding absoluet PG indexing
-        pgidx = sel->u.block.is_absolute_index ?
+        // NCSU ALACRITY-ADIOS: Adding absolute PG indexing, but *only* in non-streaming
+    	// mode (absolute writeblocks are interpreted as timestep-relative when in
+    	// streaming mode)
+        pgidx = sel->u.block.is_absolute_index && !p->streaming ?
                     sel->u.block.index :
-                adios_wbidx_to_pgidx (fp, r);
+                    adios_wbidx_to_pgidx (fp, r, 0);
         // NCSU ALACRITY-ADIOS: Adding sub-PG writeblock read support
         if (sel->u.block.is_sub_pg_selection) {
             datasize = sel->u.block.nelements;
@@ -2493,19 +2600,15 @@ uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios
 int adios_read_bp_schedule_read_byid (const ADIOS_FILE * fp, const ADIOS_SELECTION * sel,
                                       int varid, int from_steps, int nsteps, void * data)
 {
-    BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     read_request * r;
     ADIOS_SELECTION * nullsel = 0;
     struct adios_index_var_struct_v1 * v;
     int i, ndim, ns, file_is_fortran, mapped_varid;
     uint64_t * dims = 0;
 
-    assert (fp);
-
-    p = (BP_PROC *) fp->fh;
-    fh = (BP_FILE *) p->fh;
-
     mapped_varid = p->varid_mapping[varid];
     v = bp_find_var_byid (fh, mapped_varid);
     file_is_fortran = is_fortran_file (fh);
@@ -2515,7 +2618,7 @@ int adios_read_bp_schedule_read_byid (const ADIOS_FILE * fp, const ADIOS_SELECTI
 
     if (!sel)
     {
-        bp_get_and_swap_dimensions (fh, v, file_is_fortran,
+        bp_get_and_swap_dimensions (fp, v, file_is_fortran,
                                     &ndim, &dims,
                                     &ns,
                                     file_is_fortran != futils_is_called_from_fortran()
@@ -2567,12 +2670,10 @@ int adios_read_bp_schedule_read_byid (const ADIOS_FILE * fp, const ADIOS_SELECTI
 
 int adios_read_bp_perform_reads (const ADIOS_FILE *fp, int blocking)
 {
-    struct BP_PROC * p;
+    BP_PROC * p = GET_BP_PROC (fp);
     read_request * r;
     ADIOS_VARCHUNK * chunk;
 
-    p = (struct BP_PROC *) fp->fh;
-
     /* 1. prepare all reads */
     // check if all user memory is provided for blocking read
     if (blocking)
@@ -2605,7 +2706,7 @@ int adios_read_bp_perform_reads (const ADIOS_FILE *fp, int blocking)
         // remove head from list
         r = p->local_read_request_list;
         p->local_read_request_list = p->local_read_request_list->next;
-        common_read_selection_delete (r->sel);
+        free_selection (r->sel); //common_read_selection_delete (r->sel);
         r->sel = NULL;
         free(r);
 
@@ -2620,8 +2721,9 @@ int adios_read_bp_perform_reads (const ADIOS_FILE *fp, int blocking)
  */
 static read_request * split_req (const ADIOS_FILE * fp, const read_request * r, int buffer_size)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     read_request * h = 0;
     ADIOS_SELECTION * sel = r->sel;
     struct adios_index_var_struct_v1 * v;
@@ -2839,7 +2941,9 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
 
 int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
 {
-    BP_PROC * p;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     read_request * r;
     ADIOS_VARCHUNK * varchunk;
 /*
@@ -2849,7 +2953,6 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
  *                  <0 on error, sets adios_errno too
  */
     log_debug ("adios_read_bp_check_reads()\n");
-    p = (struct BP_PROC *) fp->fh;
 
     if (!p->local_read_request_list)
     {
@@ -2867,6 +2970,8 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
             // remove head from list
             r = p->local_read_request_list;
             p->local_read_request_list = p->local_read_request_list->next;
+            free_selection (r->sel); //common_read_selection_delete (r->sel);
+            r->sel = NULL;
             free(r);
 
             * chunk = varchunk;
@@ -2896,6 +3001,8 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
                 // remove head from list
                 r = p->local_read_request_list;
                 p->local_read_request_list = p->local_read_request_list->next;
+                free_selection (r->sel); //common_read_selection_delete (r->sel);
+                r->sel = NULL;
                 free(r);
 
                 * chunk = varchunk;
@@ -2916,6 +3023,8 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
             // remove head from list
             r = p->local_read_request_list;
             p->local_read_request_list = p->local_read_request_list->next;
+            free_selection (r->sel); //common_read_selection_delete (r->sel);
+            r->sel = NULL;
             free(r);
 
             r = subreqs;
@@ -2937,6 +3046,8 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
                 // remove head from list
                 r = p->local_read_request_list;
                 p->local_read_request_list = p->local_read_request_list->next;
+                free_selection (r->sel); //common_read_selection_delete (r->sel);
+                r->sel = NULL;
                 free(r);
 
                 * chunk = varchunk;
@@ -2955,8 +3066,8 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
 int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_DATATYPES * type, int * size, void ** data)
 {
     int i;
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     struct adios_index_attribute_struct_v1 * attr_root;
     struct adios_index_var_struct_v1 * var_root, * v1;
     int file_is_fortran, last_step = fp->last_step, show_hidden_attrs;
@@ -3239,10 +3350,16 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
     return 0;
 }
 
+int  adios_read_bp_get_dimension_order (const ADIOS_FILE *fp)
+{
+    BP_FILE * fh = GET_BP_FILE (fp);
+    return is_fortran_file (fh);
+}
+
 void adios_read_bp_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *)(p->fh);
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     struct bp_index_pg_struct_v1 ** root = &(fh->pgs_root);
     struct bp_minifooter * mh = &(fh->mfooter);
     uint64_t i;
@@ -3256,13 +3373,10 @@ void adios_read_bp_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 
 void adios_read_bp_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, uint32_t **nvars_per_group, uint32_t **nattrs_per_group)
 {
-    BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
     int i, j, offset;
 
-    p = (BP_PROC *) fp->fh;
-    fh = (BP_FILE *) p->fh;
-
     * ngroups = fh->gvar_h->group_count;
 
     *group_namelist = (char **) malloc (sizeof (char *) * fh->gvar_h->group_count);
@@ -3314,16 +3428,14 @@ void adios_read_bp_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***gr
  */
 int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
 {
-    BP_PROC * p;
-    BP_FILE * fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     struct adios_index_var_struct_v1 * v;
     //struct adios_index_characteristic_struct_v1 ch;
     int retval = 0, ndim, k;
     uint64_t gdims[32];
 
-    p = (BP_PROC *) fp->fh;
-    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
@@ -3372,40 +3484,9 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
     return retval;
 }
 
-/* Since ADIOS internal use "time" instead of step, this
- * routine convers a step to time.
- */
-static int adios_step_to_time (const ADIOS_FILE * fp, int varid, int from_steps)
-{
-    BP_PROC * p;
-    BP_FILE * fh;
-    struct adios_index_var_struct_v1 * v;
-    int mapped_varid, time, t;
-
-    adios_errno = 0;
-
-    p = (BP_PROC *)fp->fh;
-    fh = (BP_FILE *)p->fh;
-
-    mapped_varid = p->varid_mapping[varid];
-    v = bp_find_var_byid (fh, mapped_varid);
-
-    t = fp->current_step + from_steps;
-    if (!p->streaming)
-    {
-        time = get_time (v, t);
-    }
-    else
-    {
-        time = t + 1;
-    }
-
-    return time;
-}
-
 static int map_req_varid (const ADIOS_FILE * fp, int varid)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
 
     return p->varid_mapping[varid];
 }
@@ -3413,10 +3494,11 @@ 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.
  */
-static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r)
+static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int step_offset)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     int time, start_idx, stop_idx, c, idx;
     int mapped_varid, ridx;
     struct adios_index_var_struct_v1* v;
@@ -3426,7 +3508,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r)
         return -1;
     }
 
-    time = adios_step_to_time (fp, r->varid, r->from_steps);
+    time = adios_step_to_time (fp, r->varid, r->from_steps + step_offset);
     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);
 
@@ -3473,10 +3555,11 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r)
  */
 static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
 {
-    BP_PROC * p = (BP_PROC *)fp->fh;
-    BP_FILE * fh = (BP_FILE *)p->fh;;
+    BP_PROC * p = GET_BP_PROC (fp);
+    BP_FILE * fh = GET_BP_FILE (fp);
+
     struct adios_index_var_struct_v1 * v;
-    int j, varid, start_idx, idx;
+    int i, j, varid, start_idx, idx;
     int ndim, has_subfile;
     uint64_t ldims[32], gdims[32], offsets[32];
     int size_of_type;
@@ -3499,102 +3582,112 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * 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;
-    size_of_type = bp_get_type_size (v->type, v->characteristics [idx].value);
-
-    if (ndim == 0)
+    for (i = 0; i < r->nsteps; i++)
     {
-        r->datasize = size_of_type;
-        slice_size = size_of_type;
-        start_idx = 0; // OPS macros below need it
+        // NCSU ALACRITY-ADIOS: Adding absolute PG indexing, but *only* in non-streaming
+    	// mode (absolute writeblocks are interpreted as timestep-relative when in
+    	// streaming mode)
+        idx = wb->is_absolute_index && !p->streaming ?
+                  wb->index :
+                  adios_wbidx_to_pgidx (fp, r, i);
+        //if (!wb->is_absolute_index) printf("Timestep-relative writeblock index used!\n");
+        assert (idx >= 0);
 
-        if (v->type == adios_string)
-        {
-            size_of_type--;
-        }
-
-        slice_offset = v->characteristics[idx].payload_offset;
+        ndim = v->characteristics [idx].dims.count;
+        size_of_type = bp_get_type_size (v->type, v->characteristics [idx].value);
 
-        if (!has_subfile)
-        {
-            MPI_FILE_READ_OPS1
-        }
-        else
+        if (ndim == 0)
         {
-            MPI_FILE_READ_OPS2
-        }
+            r->datasize = size_of_type;
+            slice_size = size_of_type;
+            start_idx = 0; // OPS macros below need it
 
-        memcpy((char *)data, fh->b->buff + fh->b->offset, size_of_type);
+            if (v->type == adios_string)
+            {
+                size_of_type--;
+            }
 
-        if (fh->mfooter.change_endianness == adios_flag_yes)
-        {
-            change_endianness ((char *)data,
-                               size_of_type,
-                               v->type
-                              );
-        }
+            slice_offset = v->characteristics[idx].payload_offset;
 
-        if (v->type == adios_string)
-        {
-            ((char*)data)[size_of_type] = '\0';
-        }
-    }
-    else
-    {
-        // 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;
+            if (!has_subfile)
+            {
+                MPI_FILE_READ_OPS1
+            }
+            else
+            {
+                MPI_FILE_READ_OPS2
+            }
 
-            /* To get ldims for the chunk and then calculate payload size */
-            bp_get_dimension_characteristics(&(v->characteristics[idx]),
-                                             ldims, gdims, offsets);
+            memcpy((char *)data, fh->b->buff + fh->b->offset, size_of_type);
 
-            for (j = 0; j < ndim; j++)
+            if (fh->mfooter.change_endianness == adios_flag_yes)
             {
-                slice_size *= ldims [j];
+                 change_endianness ((char *)data,
+                                    size_of_type,
+                                    v->type
+                                   );
             }
-        }
-
-        r->datasize = slice_size;
-        /* Note: MPI_FILE_READ_OPS1 - for reading single BP file.
-         *       MPI_FILE_READ_OPS2 - for reading those with subfiles.
-         * Whenever to use OPS macro, start_idx and idx variable needs to be
-         * properly set.
-         */
-        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 (v->type == adios_string)
+            {
+                ((char*)data)[size_of_type] = '\0';
+            }
 
-        if (!has_subfile)
-        {
-            MPI_FILE_READ_OPS1_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
+            data = (char *) data + size_of_type;
         }
         else
         {
-            MPI_FILE_READ_OPS2_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
-        }
+            // 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);
 
-        // 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);
+                for (j = 0; j < ndim; j++)
+                {
+                    slice_size *= ldims [j];
+                }
+            }
+
+            r->datasize = slice_size;
+            /* Note: MPI_FILE_READ_OPS1 - for reading single BP file.
+             *       MPI_FILE_READ_OPS2 - for reading those with subfiles.
+             * Whenever to use OPS macro, start_idx and idx variable needs to be
+             * properly set.
+             */
+            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_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
+            }
+            else
+            {
+                MPI_FILE_READ_OPS2_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
+            }
+
+            // 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);
+            }
         }
     }
 
diff --git a/src/read/read_bp_staged.c b/src/read/read_bp_staged.c
index 11d207c..f5f8c6e 100644
--- a/src/read/read_bp_staged.c
+++ b/src/read/read_bp_staged.c
@@ -220,7 +220,7 @@ static void get_data_addr (const ADIOS_FILE * fp, int varid,
     v = bp_find_var_byid (fh, varid);
 
     /* Get dimensions and flip if caller != writer language */
-    bp_get_and_swap_dimensions (fh, v, file_is_fortran,
+    bp_get_and_swap_dimensions (fp, v, file_is_fortran,
                                 &ndim, &dims, &nsteps,
                                 file_is_fortran);
 
@@ -644,7 +644,7 @@ static read_request * split_read_requests (const ADIOS_FILE * fp, read_request *
     file_is_fortran = is_fortran_file (fh);
     v = bp_find_var_byid (fh, varid);
 
-    bp_get_and_swap_dimensions (fh, v, file_is_fortran,
+    bp_get_and_swap_dimensions (fp, v, file_is_fortran,
                                 &ndim, &dims, &nsteps,
                                 file_is_fortran);
 
@@ -2132,7 +2132,7 @@ static void init_read (BP_PROC * p)
 ADIOS_FILE * adios_read_bp_staged_open_file (const char * fname, MPI_Comm comm)
 {
     int rank;
-    struct BP_PROC * p;
+    BP_PROC * p;
     BP_FILE * fh;
     ADIOS_FILE * fp;
     bp_proc_pvt_struct * pvt;
@@ -2156,7 +2156,7 @@ ADIOS_FILE * adios_read_bp_staged_open_file (const char * fname, MPI_Comm comm)
     assert (fh->b);
     adios_buffer_struct_init (fh->b);
 
-    p = (struct BP_PROC *) malloc (sizeof (struct BP_PROC));
+    p = (BP_PROC *) malloc (sizeof (BP_PROC));
     assert (p);
     p->fh = fh;
     p->streaming = 0;
@@ -2462,6 +2462,12 @@ int adios_read_bp_staged_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum
     return 0;
 }
 
+int  adios_read_bp_staged_get_dimension_order (const ADIOS_FILE *fp)
+{
+    BP_FILE * fh = GET_BP_FILE (fp);
+    return is_fortran_file (fh);
+}
+
 void adios_read_bp_staged_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
     adios_read_bp_reset_dimension_order (fp, is_fortran);
diff --git a/src/read/read_bp_staged1.c b/src/read/read_bp_staged1.c
index 9b55047..4609e53 100644
--- a/src/read/read_bp_staged1.c
+++ b/src/read/read_bp_staged1.c
@@ -105,6 +105,11 @@ int adios_read_bp_staged1_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum
     return 0;
 }
 
+int  adios_read_bp_staged1_get_dimension_order (const ADIOS_FILE *fp)
+{
+    return 0;
+}
+
 void adios_read_bp_staged1_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
 
@@ -244,9 +249,9 @@ static void copy_buffer (ADIOS_GROUP * gp
                         ,candidate_reader * parent
                         ,candidate_reader * child
                         );
-static ADIOS_VARINFO * _inq_var_byid (struct BP_FILE * fh, int varid);
+static ADIOS_VARINFO * _inq_var_byid (BP_FILE * fh, int varid);
 void adios_read_bp_staged1_free_varinfo (ADIOS_VARINFO *vp);
-static int get_num_subfiles (struct BP_FILE * fh);
+static int get_num_subfiles (BP_FILE * fh);
 static candidate_reader * parse_buffer (struct proc_struct * p, void * b, int len);
 
 static void split_read_request (ADIOS_GROUP * gp
@@ -1906,7 +1911,7 @@ static void split_read_request (ADIOS_GROUP * gp
                                )
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     int i, j, k, idx, t, varid;
     int start_time, stop_time, start_idx, stop_idx, f_idx;
@@ -2443,7 +2448,7 @@ c++;
 //    printf ("[%3d] count = %d\n", p->rank, c);
 }
 
-int get_num_subfiles (struct BP_FILE * fh)
+int get_num_subfiles (BP_FILE * fh)
 {
     struct adios_bp_buffer_struct_v1 * b = fh->b;
     struct adios_index_var_struct_v1 ** vars_root = &(fh->vars_root);
@@ -2470,7 +2475,7 @@ int get_num_subfiles (struct BP_FILE * fh)
 int is_fortran_file (ADIOS_GROUP * gp)
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
 
     gh = (struct BP_GROUP *) gp->gh;
     fh = gh->fh;
@@ -2481,7 +2486,7 @@ int is_fortran_file (ADIOS_GROUP * gp)
 int has_subfiles (ADIOS_GROUP * gp)
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
 
     gh = (struct BP_GROUP *) gp->gh;
     fh = gh->fh;
@@ -2698,7 +2703,7 @@ void adios_read_bp_staged1_read_buffer (ADIOS_GROUP * gp
                                       )
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     uint64_t * r_start, * r_count, * s_start, * s_count; 
     int i, j, k, idx, t;
@@ -3178,7 +3183,7 @@ while (1);
 void adios_read_bp_staged1_read_chunk (ADIOS_GROUP * gp, int file_idx, uint64_t chunk_offset, uint64_t size)
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     MPI_File * sfh;
     MPI_Status status;
     int has_subfile;
@@ -3493,7 +3498,7 @@ static void free_proc_struct (struct proc_struct * p)
     }
 }
 
-static void init_read (struct BP_FILE * fh)
+static void init_read (BP_FILE * fh)
 {
     int thread_level, i, remain;
     int color1, color2;
@@ -3690,7 +3695,7 @@ static int getNumSubfiles (const char * fname)
 int adios_read_bp_staged1_init (MPI_Comm comm) { return 0; }
 int adios_read_bp_staged1_finalize () { return 0; }
 
-static void broadcast_fh_buffer (struct BP_FILE * fh)
+static void broadcast_fh_buffer (BP_FILE * fh)
 {
     struct bp_index_pg_struct_v1 * pgs_root = fh->pgs_root, * pg;
     struct adios_index_var_struct_v1 * vars_root = fh->vars_root, * v;
@@ -4048,7 +4053,7 @@ fprintf (stderr, "bc 1 v->id = %d, bo 1 = %llu, bo 2 = %llu, v->var_name = %s\n"
 ADIOS_FILE * adios_read_bp_staged1_fopen (const char * fname, MPI_Comm comm)
 {
     int i, rank, remain;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     ADIOS_FILE * fp;
     uint64_t header_size;
     struct proc_struct * p;
@@ -4056,7 +4061,7 @@ ADIOS_FILE * adios_read_bp_staged1_fopen (const char * fname, MPI_Comm comm)
 
     adios_errno = 0;
 
-    fh = (struct BP_FILE *) malloc (sizeof (struct BP_FILE));
+    fh = (BP_FILE *) malloc (sizeof (BP_FILE));
     assert (fh);
 
     fh->fname = (fname ? strdup (fname) : 0L);
@@ -4182,7 +4187,7 @@ ADIOS_FILE * adios_read_bp_staged1_fopen (const char * fname, MPI_Comm comm)
 */   
 void adios_read_bp_staged1_reset_dimension_order (ADIOS_FILE *fp, int is_fortran)
 {
-    struct BP_FILE * fh = (struct BP_FILE *)(fp->fh);
+    BP_FILE * fh = (BP_FILE *)(fp->fh);
     struct bp_index_pg_struct_v1 ** root = &(fh->pgs_root);
     struct bp_minifooter * mh = &(fh->mfooter);
     uint64_t i;
@@ -4196,7 +4201,7 @@ void adios_read_bp_staged1_reset_dimension_order (ADIOS_FILE *fp, int is_fortran
 
 int adios_read_bp_staged1_fclose (ADIOS_FILE *fp) 
 {
-    struct BP_FILE * fh = (struct BP_FILE *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) fp->fh;
     struct BP_GROUP_VAR * gh = fh->gvar_h;
     struct BP_GROUP_ATTR * ah = fh->gattr_h;
     struct adios_index_var_struct_v1 * vars_root = fh->vars_root, *vr;
@@ -4393,7 +4398,7 @@ int adios_read_bp_staged1_fclose (ADIOS_FILE *fp)
 
 ADIOS_GROUP * adios_read_bp_staged1_gopen (ADIOS_FILE *fp, const char * grpname)
 {
-    struct BP_FILE * fh = (struct BP_FILE *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) fp->fh;
     int grpid, rank, nproc; 
     ADIOS_GROUP * gp;
     struct proc_struct * p = (struct proc_struct *) fh->priv;
@@ -4418,7 +4423,7 @@ ADIOS_GROUP * adios_read_bp_staged1_gopen (ADIOS_FILE *fp, const char * grpname)
 
 ADIOS_GROUP * adios_read_bp_staged1_gopen_byid (ADIOS_FILE *fp, int grpid)
 {
-    struct BP_FILE * fh = (struct BP_FILE *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) fp->fh;
     struct BP_GROUP * gh;
     ADIOS_GROUP * gp;
     int i, offset;
@@ -4510,7 +4515,7 @@ ADIOS_GROUP * adios_read_bp_staged1_gopen_byid (ADIOS_FILE *fp, int grpid)
 int adios_read_bp_staged1_gclose (ADIOS_GROUP * gp)
 {
     struct BP_GROUP * gh = (struct BP_GROUP *) gp->gh;
-    struct BP_FILE * fh = gh->fh;
+    BP_FILE * fh = gh->fh;
     struct proc_struct * p = (struct proc_struct *) fh->priv;
     candidate_reader * h = p->local_read_request_list, * t = 0;
     int i, type, count, varid, ndims, total_size, size = calc_data_size (p);
@@ -4725,7 +4730,7 @@ int adios_read_bp_staged1_get_attr_byid (ADIOS_GROUP * gp, int attrid,
 {
     int    i, offset, count;
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     struct adios_index_attribute_struct_v1 * attr_root;
     struct adios_index_var_struct_v1 * var_root;
     int    file_is_fortran;
@@ -5603,7 +5608,7 @@ ADIOS_VARINFO * adios_read_bp_staged1_inq_var (ADIOS_GROUP *gp, const char * var
     return adios_read_bp_staged1_inq_var_byid(gp, varid);
 }
 
-static ADIOS_VARINFO * _inq_var_byid (struct BP_FILE * fh, int varid)
+static ADIOS_VARINFO * _inq_var_byid (BP_FILE * fh, int varid)
 {
     ADIOS_VARINFO * vi;
     int file_is_fortran;
@@ -5661,7 +5666,7 @@ static ADIOS_VARINFO * _inq_var_byid (struct BP_FILE * fh, int varid)
 ADIOS_VARINFO * adios_read_bp_staged1_inq_var_byid (ADIOS_GROUP *gp, int varid)
 {
     struct BP_GROUP      * gh;
-    struct BP_FILE       * fh;
+    BP_FILE       * fh;
     ADIOS_VARINFO * vi;
     int file_is_fortran;
     struct adios_index_var_struct_v1 * var_root;
@@ -5916,7 +5921,7 @@ static void getReadInfo (ADIOS_GROUP * gp
                         )
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     int i, j, k, idx, t;
     int start_idx, stop_idx, f_idx;
@@ -6021,7 +6026,7 @@ static void getDataAddress (ADIOS_GROUP * gp, int varid
                            )
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     int i, j, k, idx, t;
     int start_time, stop_time, start_idx, stop_idx, f_idx;
@@ -6212,7 +6217,7 @@ int64_t adios_read_bp_staged1_read_var (ADIOS_GROUP * gp
                                        )
 {
     struct BP_GROUP * gh;
-    struct BP_FILE * fh;
+    BP_FILE * fh;
     int i, varid, has_subfile, rank, nproc;
     uint64_t ds, payload_size;
     struct proc_struct * p;
@@ -6289,7 +6294,7 @@ int64_t adios_read_bp_staged1_read_local_var (ADIOS_GROUP * gp, const char * var
                                       const uint64_t * count, void * data)
 {
     struct BP_GROUP      * gh;
-    struct BP_FILE       * fh;
+    BP_FILE       * fh;
     struct adios_index_var_struct_v1 * var_root;
     struct adios_var_header_struct_v1 var_header;
     struct adios_var_payload_struct_v1 var_payload;
@@ -6660,7 +6665,7 @@ int64_t adios_read_bp_staged1_read_var_byid1 (ADIOS_GROUP    * gp,
                              void           * data)
 {
     struct BP_GROUP      * gh;
-    struct BP_FILE       * fh;
+    BP_FILE       * fh;
     int file_is_fortran;
     struct adios_index_var_struct_v1 * var_root;
     struct adios_var_header_struct_v1 var_header;
@@ -7279,7 +7284,7 @@ int64_t adios_read_bp_staged1_read_var_byid2 (ADIOS_GROUP    * gp,
                                       void           * data)
 {
     struct BP_GROUP      * gh;
-    struct BP_FILE       * fh;
+    BP_FILE       * fh;
     struct adios_index_var_struct_v1 * var_root;
     struct adios_var_header_struct_v1 var_header;
     struct adios_var_payload_struct_v1 var_payload;
@@ -7735,7 +7740,7 @@ int64_t adios_read_bp_staged1_read_var_byid (ADIOS_GROUP    * gp,
                                      void            * data)
 {
     struct BP_GROUP      * gh;
-    struct BP_FILE       * fh;
+    BP_FILE       * fh;
     int has_time_index_characteristic;
 
     adios_errno = 0;
diff --git a/src/read/read_dataspaces.c b/src/read/read_dataspaces.c
index f198979..8cb2dde 100644
--- a/src/read/read_dataspaces.c
+++ b/src/read/read_dataspaces.c
@@ -10,7 +10,7 @@
 /* Read method for DATASPACES memory-to-memory coupling */
 /**************************************************/
 
-#include "../config.h"
+#include "config.h"
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>  /* errno */
@@ -26,6 +26,8 @@
 #include "core/ds_metadata.h"
 #include "core/common_read.h" // common_read_selection_* functions
 
+#include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
+
 #include "dataspaces.h"
 
 #ifdef DMALLOC
@@ -735,16 +737,16 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
                     "Data of '%s' does not exist in DataSpaces\n", fp->path);
             break;
     case STEP_STREAMTERMINATED:
-            adios_error (err_end_of_stream, 
-                    "Stream '%s' has been terminated. No more steps available\n", fp->path);
+            adios_errno = err_end_of_stream; // not an error that has to be printed
+            log_debug ("Stream '%s' has been terminated. No more steps available\n", fp->path);
             break;
     case STEP_STEPNOTREADY:
-            adios_error (err_step_notready, 
-                    "Step %d in stream '%s' is not yet available\n", step, fp->path);
+            adios_errno = err_step_notready; 
+            log_debug ("Step %d in stream '%s' is not yet available\n", step, fp->path);
             break;
     case STEP_STEPDISAPPEARED:
-            adios_error (err_step_disappeared, 
-                    "Step %d in stream '%s' is not available anymore\n", step, fp->path);
+            adios_errno = err_step_disappeared; 
+            log_debug ("Step %d in stream '%s' is not available anymore\n", step, fp->path);
             break;
     default:
             adios_errno = err_no_error; // clear temporary error during polling
@@ -943,12 +945,12 @@ int adios_read_dataspaces_peek_ahead (ADIOS_FILE *fp)
             // we have no more new steps
             if (terminated) {
                 // stream is gone, we read everything 
-                adios_error (err_end_of_stream, 
-                        "Stream '%s' has been terminated. No more steps available\n", fp->path);
+                adios_errno = err_end_of_stream;
+                log_debug ("Stream '%s' has been terminated. No more steps available\n", fp->path);
             } else {
                 // a next step may come 
-                adios_error (err_step_notready, 
-                        "No new step in stream '%s' is not yet available\n", fp->path);
+                adios_errno = err_step_notready;
+                log_debug ("No new step in stream '%s' is not yet available\n", fp->path);
             }
         }
     }
@@ -1191,11 +1193,10 @@ static int adios_read_dataspaces_get_meta(const char * varname, enum ADIOS_DATAT
         return err_no_memory;
     } 
     else*/ if (err) {
-        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
-        return err_corrupted_variable;
+        log_debug ("DATASPACES failed to read metadata variable %s.\n", varname);
     }
 
-    return 0;
+    return err;
 }
 
 static int adios_read_dataspaces_get_meta_collective(const char * varname,
@@ -1237,6 +1238,7 @@ static int adios_read_dataspaces_get_meta_collective(const char * varname,
     if (rank == root) {
         dspaces_define_gdim(varname, ndims, gdims);
         err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data);
+        if (err) log_debug ("DATASPACES failed to read metadata variable %s.\n", varname);
 
         // set pad to indicate if root rank successfully fetch the meta data
         pad = (int*)buf;
@@ -1257,13 +1259,7 @@ static int adios_read_dataspaces_get_meta_collective(const char * varname,
     }
 
     free(buf);
-
-    if (err) {
-        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
-        return err_corrupted_variable;
-    }
-
-    return 0;
+    return err;
 }
 
 int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp, 
@@ -1695,6 +1691,13 @@ int adios_read_dataspaces_get_attr_byid (const ADIOS_FILE * fp, int attrid,
     return 0; 
 }
 
+
+int adios_read_dataspaces_get_dimension_order (const ADIOS_FILE *fp)
+{
+    return 0;
+}
+
+
 void adios_read_dataspaces_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
     /* not implemented */
diff --git a/src/read/read_datatap.c b/src/read/read_datatap.c
index 87cbe41..d5d8993 100644
--- a/src/read/read_datatap.c
+++ b/src/read/read_datatap.c
@@ -2286,6 +2286,11 @@ fprintf(stderr, "im here %s:%d\n",__FILE__,__LINE__);
 
 }
 
+int adios_read_datatap_get_dimension_order (const ADIOS_FILE *fp)
+{
+    return 0;
+}
+
 void adios_read_datatap_reset_dimension_order (ADIOS_FILE *fp, int is_fortran)
 {
     // TODO
diff --git a/src/read/read_dimes.c b/src/read/read_dimes.c
index dd8a72c..62f2f89 100644
--- a/src/read/read_dimes.c
+++ b/src/read/read_dimes.c
@@ -10,7 +10,7 @@
 /* Read method for DIMES memory-to-memory coupling */
 /**************************************************/
 
-#include "../config.h"
+#include "config.h"
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>  /* errno */
@@ -26,6 +26,8 @@
 #include "core/ds_metadata.h"
 #include "core/common_read.h" // common_read_selection_* functions
 
+#include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
+
 #include "dataspaces.h"
 
 #ifdef DMALLOC
@@ -761,16 +763,16 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
                     "Data of '%s' does not exist in DIMES\n", fp->path);
             break;
     case STEP_STREAMTERMINATED:
-            adios_error (err_end_of_stream, 
-                    "Stream '%s' has been terminated. No more steps available\n", fp->path);
+            adios_errno = err_end_of_stream; // not an error that has to be printed
+            log_debug ("Stream '%s' has been terminated. No more steps available\n", fp->path);
             break;
     case STEP_STEPNOTREADY:
-            adios_error (err_step_notready, 
-                    "Step %d in stream '%s' is not yet available\n", step, fp->path);
+            adios_errno = err_step_notready;
+            log_debug ("Step %d in stream '%s' is not yet available\n", step, fp->path);
             break;
     case STEP_STEPDISAPPEARED:
-            adios_error (err_step_disappeared, 
-                    "Step %d in stream '%s' is not available anymore\n", step, fp->path);
+            adios_errno = err_step_disappeared;
+            log_debug ("Step %d in stream '%s' is not available anymore\n", step, fp->path);
             break;
     case STEP_OTHERERROR:
             // These were handled at their places
@@ -972,12 +974,12 @@ int adios_read_dimes_peek_ahead (ADIOS_FILE *fp)
             // we have no more new steps
             if (terminated) {
                 // stream is gone, we read everything 
-                adios_error (err_end_of_stream, 
-                        "Stream '%s' has been terminated. No more steps available\n", fp->path);
+                adios_errno = err_end_of_stream;
+                log_debug ("Stream '%s' has been terminated. No more steps available\n", fp->path);
             } else {
                 // a next step may come 
-                adios_error (err_step_notready, 
-                        "No new step in stream '%s' is not yet available\n", fp->path);
+                adios_errno = err_step_notready;
+                log_debug ("No new step in stream '%s' is not yet available\n", fp->path);
             }
         }
     }
@@ -1220,11 +1222,10 @@ static int adios_read_dimes_get_meta(const char * varname, enum ADIOS_DATATYPES
         return err_no_memory;
     } 
     else*/ if (err) {
-        adios_error (err_corrupted_variable, "DIMES failed to read variable %s.\n", varname);  
-        return err_corrupted_variable;
+        log_debug ("DIMES failed to read variable %s.\n", varname);  
     }
 
-    return 0;
+    return err;
 }
 
 static int adios_read_dimes_get_meta_collective(const char * varname,
@@ -1267,6 +1268,8 @@ static int adios_read_dimes_get_meta_collective(const char * varname,
     if (rank == root) {
         dspaces_define_gdim(varname, ndims, gdims);
         err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data);
+        if (err)
+            log_debug ("DIMES failed to read variable %s.\n", varname);  
 
         // set pad to indicate if root rank successfully fetch the meta data
         pad = (int*)buf;
@@ -1287,13 +1290,7 @@ static int adios_read_dimes_get_meta_collective(const char * varname,
     }
 
     free(buf);
-
-    if (err) {
-        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
-        return err_corrupted_variable;
-    }
-
-    return 0;
+    return err;
 }
 
 int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp, 
@@ -1724,6 +1721,13 @@ int adios_read_dimes_get_attr_byid (const ADIOS_FILE * fp, int attrid,
     return 0; 
 }
 
+
+int adios_read_dimes_get_dimension_order (const ADIOS_FILE *fp)
+{
+    return 0;
+}
+
+
 void adios_read_dimes_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 {
     /* not implemented */
diff --git a/src/read/read_flexpath.c b/src/read/read_flexpath.c
index 787bbc7..3b6496f 100644
--- a/src/read/read_flexpath.c
+++ b/src/read/read_flexpath.c
@@ -43,24 +43,14 @@
 #include "public/adios_error.h"
 #include "core/flexpath.h"
 
+#include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
+
 // conditional libraries
 #ifdef DMALLOC
 #include "dmalloc.h"
 #endif
 
-#define FP_BATCH_SIZE 32
-
-/*
- * Contains start & counts for each dimension for a writer_rank.
- */
-typedef struct _array_displ
-{
-    int writer_rank;
-    int ndims;
-    uint64_t pos;
-    uint64_t *start;
-    uint64_t *count;    
-}array_displacements;
+#define FP_BATCH_SIZE 1
 
 typedef struct _bridge_info
 {
@@ -76,6 +66,13 @@ typedef struct _bridge_info
     int scheduled;
 }bridge_info;
 
+typedef struct _flexpath_read_request
+{
+    int num_pending;
+    int num_completed;
+    int condition;
+}flexpath_read_request;
+
 typedef struct _flexpath_var_chunk
 {
     int has_data;
@@ -84,6 +81,18 @@ typedef struct _flexpath_var_chunk
     void *user_buf;
 } flexpath_var_chunk;
 
+/*
+ * Contains start & counts for each dimension for a writer_rank.
+ */
+typedef struct _array_displ
+{
+    int writer_rank;
+    int ndims;
+    uint64_t pos;
+    uint64_t *start;
+    uint64_t *count;    
+}array_displacements;
+
 typedef struct _flexpath_var
 {
     int id;
@@ -115,34 +124,31 @@ typedef struct _flexpath_reader_file
 {
     char *file_name;
     char *group_name; // assuming one group per file right now.
+    int host_language;
 
     EVstone stone;
 
     MPI_Comm comm;
     int rank;
     int size;
-    int valid;
 
     int num_bridges;
     bridge_info *bridges;
     int writer_coordinator;
 
     int num_vars;
-    flexpath_var * var_list;
-    int num_gp; 
-    evgroup * gp;
+    flexpath_var *var_list;
+    evgroup *gp;
 
     int writer_finalized;
     int last_writer_step;
     int mystep;
     int num_sendees;
     int *sendees;
-    int ackCondition;    
 
-    int pending_requests;
-    int completed_requests;
     uint64_t data_read; // for perf measurements.
     double time_in; // for perf measurements.
+    flexpath_read_request req;
     pthread_mutex_t data_mutex;
     pthread_cond_t data_condition;
 } flexpath_reader_file;
@@ -150,13 +156,12 @@ typedef struct _flexpath_reader_file
 typedef struct _local_read_data
 {
     // MPI stuff
-    MPI_Comm fp_comm;
-    int fp_comm_rank;
-    int fp_comm_size;
+    MPI_Comm comm;
+    int rank;
+    int size;
 
     // EVPath stuff
-    CManager fp_cm;
-    EVstone stone;
+    CManager cm;
     atom_t CM_TRANSPORT;
 } flexpath_read_data;
 
@@ -164,27 +169,40 @@ flexpath_read_data* fp_read_data = NULL;
 
 /********** Helper functions. **********/
 
+static void 
+reverse_dims(uint64_t *dims, int len)
+{
+    int i;
+    for (i = 0; i<(len/2); i++) {
+        uint64_t tmp = dims[i];
+        int end = len-1-i;
+        //printf("%d %d\n", dims[i], dims[end]);
+        dims[i] = dims[end];
+        dims[end] = tmp;
+    }
+}
+
 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,
+	    EVcreate_bridge_action(fp_read_data->cm,
 				   contact_list,
 				   (EVstone)bridge->their_num);
 
 	bridge->flush_source =
-	    EVcreate_submit_handle(fp_read_data->fp_cm,
+	    EVcreate_submit_handle(fp_read_data->cm,
 				   bridge->bridge_stone,
 				   flush_format_list);
 
 	bridge->var_source =
-	    EVcreate_submit_handle(fp_read_data->fp_cm,
+	    EVcreate_submit_handle(fp_read_data->cm,
 				   bridge->bridge_stone,
 				   var_format_list);
 
 	bridge->op_source =
-	    EVcreate_submit_handle(fp_read_data->fp_cm,
+	    EVcreate_submit_handle(fp_read_data->cm,
 				   bridge->bridge_stone,
 				   op_format_list);
 
@@ -208,7 +226,7 @@ free_displacements(array_displacements *displ, int num)
 void
 free_evgroup(evgroup *gp)
 {
-    EVreturn_event_buffer(fp_read_data->fp_cm, gp);
+    EVreturn_event_buffer(fp_read_data->cm, gp);
 }
 
 flexpath_var*
@@ -233,16 +251,15 @@ new_flexpath_var(const char *varname, int id, uint64_t type_size)
 flexpath_reader_file*
 new_flexpath_reader_file(const char *fname)
 {
-    flexpath_reader_file * fp = malloc(sizeof(flexpath_reader_file));
+    flexpath_reader_file *fp = calloc(1, sizeof(*fp));
     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->writer_coordinator = -1;
     fp->last_writer_step = -1;
-
+    fp->req = (flexpath_read_request){.num_pending = 0, .num_completed = 0, .condition = -1};
     pthread_mutex_init(&fp->data_mutex, NULL);
     pthread_cond_init(&fp->data_condition, NULL);
     return fp;        
@@ -274,6 +291,10 @@ ffs_type_to_adios_type(const char *ffs_type)
 	return adios_double;
     else if(!strcmp("char", filtered_type))
 	return adios_byte;
+    else if(!strcmp("complex", filtered_type))
+	return adios_complex;
+    else if(!strcmp("double_complex", filtered_type))
+        return adios_double_complex;
     else
 	return adios_unknown;
 }
@@ -441,49 +462,6 @@ find_displacement(array_displacements *list, int rank, int num_displ)
     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;
-}
-
-
-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)
-{
-    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;
-    }
-}
 
 array_displacements*
 get_writer_displacements(
@@ -640,11 +618,11 @@ send_open_msg(flexpath_reader_file *fp, int destination)
     msg.file_name = fp->file_name;
     msg.step = fp->mystep;
     msg.type = OPEN_MSG;
-    int cond = CMCondition_get(fp_read_data->fp_cm, NULL);
+    int cond = CMCondition_get(fp_read_data->cm, NULL);
     msg.condition = cond;
 
     EVsubmit(fp->bridges[destination].op_source, &msg, NULL);    
-    CMCondition_wait(fp_read_data->fp_cm, cond);
+    CMCondition_wait(fp_read_data->cm, cond);
     fp->bridges[destination].opened = 1;
 }
 
@@ -660,10 +638,10 @@ send_close_msg(flexpath_reader_file *fp, int destination)
     msg.step = fp->mystep;
     msg.type = CLOSE_MSG;
     //msg.condition = -1;
-    int cond = CMCondition_get(fp_read_data->fp_cm, NULL);
+    int cond = CMCondition_get(fp_read_data->cm, NULL);
     msg.condition = cond;
     EVsubmit(fp->bridges[destination].op_source, &msg, NULL);  
-    CMCondition_wait(fp_read_data->fp_cm, cond);  
+    CMCondition_wait(fp_read_data->cm, cond);  
     fp->bridges[destination].opened = 0;
 }
 
@@ -676,13 +654,13 @@ send_flush_msg(flexpath_reader_file *fp, int destination, Flush_type type, int u
     msg.id = fp->mystep;
 
     if(use_condition)
-	msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
+	msg.condition = CMCondition_get(fp_read_data->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);
+	CMCondition_wait(fp_read_data->cm, msg.condition);
     }
 }
 
@@ -731,7 +709,7 @@ update_step_msg_handler(
     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);
+    CMCondition_signal(fp_read_data->cm, msg->condition);
     return 0;
 }
 
@@ -742,13 +720,13 @@ op_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
     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);
+	    CMCondition_signal(fp_read_data->cm, msg->condition);
 	}
-        //ackCondition = CMCondition_get(fp_read_data->fp_cm, NULL);
+        //ackCondition = CMCondition_get(fp_read_data->cm, NULL);
     }
     if(msg->type == EOS_MSG){	
 	adios_errno = err_end_of_stream;
-	CMCondition_signal(fp_read_data->fp_cm, msg->condition);
+	CMCondition_signal(fp_read_data->cm, msg->condition);
     }       
     return 0;
 }
@@ -756,7 +734,7 @@ op_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
 static int
 group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
 {
-    EVtake_event_buffer(fp_read_data->fp_cm, vevent);
+    EVtake_event_buffer(fp_read_data->cm, vevent);
     evgroup *msg = (evgroup*)vevent;
     ADIOS_FILE *adiosfile = client_data;
     flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
@@ -768,7 +746,7 @@ group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
     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){
+	if (fpvar) {
 	    offset_struct *offset = &gblvar->offsets[0];
 	    uint64_t *local_dimensions = offset->local_dimensions;
 	    uint64_t *local_offsets = offset->local_offsets;
@@ -784,23 +762,123 @@ group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
 	    return err_corrupted_variable;
 	}
     }
-    CMCondition_signal(fp_read_data->fp_cm, msg->condition);    
+    CMCondition_signal(fp_read_data->cm, msg->condition);    
+    return 0;
+}
+
+
+
+int
+increment_index(int64_t ndim, uint64_t *dimen_array, uint64_t *index_array)
+{
+    ndim--;
+    while (ndim >= 0) {
+	index_array[ndim]++;
+	if (index_array[ndim] < dimen_array[ndim]) {
+	    return 1;
+	}
+	index_array[ndim] = 0;
+	ndim--;
+    }
     return 0;
 }
 
+void
+map_local_to_global_index(uint64_t ndim, uint64_t *local_index, uint64_t *local_offsets, uint64_t *global_index)
+{
+    int i;
+    for (i=0; i < ndim; i++) {
+	global_index[i] = local_index[i] + local_offsets[i];
+    }
+}
+
+void
+map_global_to_local_index(uint64_t ndim, uint64_t *global_index, uint64_t *local_offsets, uint64_t *local_index)
+{
+    int i;
+    for (i=0; i < ndim; i++) {
+	local_index[i] = global_index[i] - local_offsets[i];
+    }
+}
+
+int
+index_in_selection(uint64_t ndim, uint64_t *global_index, uint64_t *selection_offsets, uint64_t *selection_counts)
+{
+    int i;
+    for (i=0; i < ndim; i++) {
+	if ((global_index[i] < selection_offsets[i]) || 
+	    (global_index[i] >= selection_offsets[i] + selection_counts[i])) {
+	    return 0;
+	}
+    }
+    return 1;
+}
+
+int 
+find_offset(uint64_t ndim, uint64_t *size, uint64_t *index)
+{
+    int offset = 0;
+    int i;
+    for (i=0; i< ndim; i++) {
+	offset = index[i] + (size[i] * offset);
+    }
+    return offset;
+}
+
+/*
+ *  element_size is the byte size of the array elements
+ *  ndim is the number of dimensions in the variable
+ *  global_dimens is an array, ndim long, giving the size of each dimension
+ *  partial_offsets is an array, ndim long, giving the starting offsets per dimension
+ *      of this data block in the global array
+ *  partial_counts is an array, ndim long, giving the size per dimension
+ *      of this data block in the global array
+ *  selection_offsets is an array, ndim long, giving the starting offsets in the global array 
+ *      of the output selection.
+ *  selection_counts is an array, ndim long, giving the size per dimension
+ *      of the output selection.
+ *  data is the input, a slab of the global array
+ *  selection is the output, to be filled with the selection array.
+ */
+void
+extract_selection_from_partial(int element_size, int ndim, uint64_t *global_dimens, 
+			       uint64_t *partial_offsets, uint64_t *partial_counts,
+			       uint64_t *selection_offsets, uint64_t *selection_counts,
+			       char *data, char *selection)
+{
+    uint64_t *partial_index = malloc(ndim * sizeof(partial_index[0]));
+    uint64_t *global_index = malloc(ndim * sizeof(global_index[0]));
+    uint64_t *selection_index = malloc(ndim * sizeof(selection_index[0]));
+    memset(partial_index, 0, ndim * sizeof(partial_index[0]));
+    memset(selection_index, 0, ndim * sizeof(selection_index[0]));
+    do {
+	/* walk through incoming (partial) element by element, keeping partial_index up to date */
+	map_local_to_global_index(ndim, partial_index, partial_offsets, global_index);
+	/* find the global index for the incoming one */
+	if (index_in_selection(ndim, global_index, selection_offsets, selection_counts)) {
+	    int offset;
+	    /* if it's in the selection, map it to the local index of the selection */
+	    map_global_to_local_index(ndim, global_index, selection_offsets, selection_index);
+	    /* find location in selection*/
+	    offset = find_offset(ndim, selection_counts, selection_index);
+	    memcpy(selection + offset * element_size, data, element_size);
+	}
+	data += element_size;
+    } while (increment_index(ndim, partial_counts, partial_index));
+    free(partial_index);
+    free(global_index);
+    free(selection_index);
+}
 
 static int
 raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list attrs)
 {
     ADIOS_FILE *adiosfile = client_data;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-
-    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);
 
@@ -918,28 +996,26 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 								  var->num_displ);
 		    if (disp) { // does this writer hold a chunk we've asked for
 
-		      //print_displacement(disp, fp->rank);
+			//print_displacement(disp, fp->rank);
 
+			uint64_t *global_sel_start = var->sel->u.bb.start;
+			uint64_t *global_sel_count = var->sel->u.bb.count;
 			uint64_t *temp = gv->offsets[0].local_dimensions;
+			uint64_t *temp2 = gv->offsets[0].local_offsets;
+			uint64_t *global_dimensions = gv->offsets[0].global_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;
+			uint64_t *writer_offsets = &temp2[offsets_per_rank * writer_rank];
 	
 			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);
+
+			extract_selection_from_partial(f->field_size, disp->ndims, global_dimensions,
+						       writer_offsets, writer_sizes,
+						       global_sel_start, global_sel_count,
+						       writer_array, reader_array);
 		    }
 		}
 	    }
@@ -958,17 +1034,12 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
         f++;
     }
  
-    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);
+    
+    fp->req.num_completed++;
+    if(fp->req.num_completed == fp->req.num_pending){
+        CMCondition_signal(fp_read_data->cm, fp->req.condition);
     }
+    
 
     free_fmstructdesclist(struct_list);
     return 0; 
@@ -996,25 +1067,25 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
     transport = getenv("CMTransport");
 
     // setup MPI stuffs
-    fp_read_data->fp_comm = comm;
-    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));
+    fp_read_data->comm = comm;
+    MPI_Comm_size(fp_read_data->comm, &(fp_read_data->size));
+    MPI_Comm_rank(fp_read_data->comm, &(fp_read_data->rank));
 
-    fp_read_data->fp_cm = CManager_create();
+    fp_read_data->cm = CManager_create();
     if(transport == NULL){
-	if(CMlisten(fp_read_data->fp_cm) == 0) {
+	if(CMlisten(fp_read_data->cm) == 0) {
 	    fprintf(stderr, "Flexpath ERROR: reader %d unable to initialize connection manager.\n",
-		fp_read_data->fp_comm_rank);
+		fp_read_data->rank);
 	}
     }else{
 	listen_list = create_attr_list();
 	add_attr(listen_list, fp_read_data->CM_TRANSPORT, Attr_String, 
 		 (attr_value)strdup(transport));
-	CMlisten_specific(fp_read_data->fp_cm, listen_list);
+	CMlisten_specific(fp_read_data->cm, listen_list);
     }
-    int forked = CMfork_comm_thread(fp_read_data->fp_cm);
+    int forked = CMfork_comm_thread(fp_read_data->cm);
     if(!forked) {
-	fprintf(stderr, "reader %d failed to fork comm_thread.\n", fp_read_data->fp_comm_rank);
+	fprintf(stderr, "reader %d failed to fork comm_thread.\n", fp_read_data->rank);
 	/*log_debug( "forked\n");*/
     }
     return 0;
@@ -1047,7 +1118,6 @@ adios_read_flexpath_open(const char * fname,
 			 enum ADIOS_LOCKMODE lock_mode,
 			 float timeout_sec)
 {
-    //printf("fortran? %d\n", futils_is_called_from_fortran());
     fp_log("FUNC", "entering flexpath_open\n");
     ADIOS_FILE *adiosfile = malloc(sizeof(ADIOS_FILE));        
     if(!adiosfile){
@@ -1057,34 +1127,34 @@ adios_read_flexpath_open(const char * fname,
     }    
     
     flexpath_reader_file *fp = new_flexpath_reader_file(fname);
-	
+    fp->host_language = futils_is_called_from_fortran();
     adios_errno = 0;
-    fp->stone = EValloc_stone(fp_read_data->fp_cm);	
+    fp->stone = EValloc_stone(fp_read_data->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,
+    EVassoc_terminal_action(fp_read_data->cm,
 			    fp->stone,
 			    op_format_list,
 			    op_msg_handler,
 			    adiosfile);       
 
-    EVassoc_terminal_action(fp_read_data->fp_cm,
+    EVassoc_terminal_action(fp_read_data->cm,
 			    fp->stone,
 			    update_step_msg_format_list,
 			    update_step_msg_handler,
 			    adiosfile);       
 
 
-    EVassoc_terminal_action(fp_read_data->fp_cm,
+    EVassoc_terminal_action(fp_read_data->cm,
 			    fp->stone,
 			    evgroup_format_list,
 			    group_msg_handler,
 			    adiosfile);
 
-    EVassoc_raw_terminal_action(fp_read_data->fp_cm,
+    EVassoc_raw_terminal_action(fp_read_data->cm,
 				fp->stone,
 				raw_handler,
 				adiosfile);
@@ -1104,7 +1174,7 @@ adios_read_flexpath_open(const char * fname,
 	
     char *string_list;
     char data_contact_info[CONTACT_LENGTH];
-    string_list = attr_list_to_string(CMget_contact_list(fp_read_data->fp_cm));
+    string_list = attr_list_to_string(CMget_contact_list(fp_read_data->cm));
     sprintf(&data_contact_info[0], "%d:%s", fp->stone, string_list);
     free(string_list);
 
@@ -1139,14 +1209,14 @@ adios_read_flexpath_open(const char * fname,
 
     FILE * fp_in = fopen(writer_ready_filename,"r");
     while(!fp_in) {
-	//CMsleep(fp_read_data->fp_cm, 1);
+	//CMsleep(fp_read_data->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->cm, 1);
 	fp_in = fopen(writer_info_filename, "r");
     }
 
@@ -1203,7 +1273,11 @@ adios_read_flexpath_open(const char * fname,
     
 
     fp->data_read = 0;
-    send_flush_msg(fp, fp->writer_coordinator, DATA, 1);
+    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
+    fp->req.num_pending = 1;
+    fp->req.num_completed = 0;
+    send_flush_msg(fp, fp->writer_coordinator, DATA, 0);
+    CMCondition_wait(fp_read_data->cm, fp->req.condition);
 
     send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
     fp->data_read = 0;
@@ -1236,6 +1310,7 @@ int adios_read_flexpath_finalize_method ()
 void adios_read_flexpath_release_step(ADIOS_FILE *adiosfile) {
     int i;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    MPI_Barrier(fp->comm);
     for(i=0; i<fp->num_bridges; i++) {
         if(fp->bridges[i].created && !fp->bridges[i].opened) {
 	    send_open_msg(fp, i);
@@ -1288,7 +1363,7 @@ adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_
 	    adios_errno = err_end_of_stream;
 	    return err_end_of_stream;
 	}
-	CMsleep(fp_read_data->fp_cm, 1);
+	CMsleep(fp_read_data->cm, 1);
 	send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
     }
 
@@ -1312,8 +1387,11 @@ adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_
         }
     }   
     // need to remove selectors from each var now.
-    send_flush_msg(fp, fp->writer_coordinator, DATA, 1);
-      
+    fp->req.num_completed = 0;
+    fp->req.num_pending = 1;
+    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
+    send_flush_msg(fp, fp->writer_coordinator, DATA, 0);
+    CMCondition_wait(fp_read_data->cm, fp->req.condition);
     // should only happen if there are more steps available.
     // writer should have advanced.
     send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
@@ -1383,25 +1461,31 @@ 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)
 {
     fp_log("FUNC", "entering perform_reads.\n");
-    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
     fp->data_read = 0;
-    int i,j;
+    int i;
+    int batchcount = 0;
     int num_sendees = fp->num_sendees;
     int total_sent = 0;
     fp->time_in = 0.00;
-    for(i = 0; i<num_sendees; i++){
-	pthread_mutex_lock(&fp->data_mutex);
-	int sendee = fp->sendees[i];	
-	fp->pending_requests++;
+    fp->req.num_completed = 0;
+    fp->req.num_pending = FP_BATCH_SIZE;
+    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
+
+    for(i = 0; i<num_sendees; i++){	
+	int sendee = fp->sendees[i];
+        batchcount++;
 	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;
+	if ((total_sent % FP_BATCH_SIZE == 0) || (total_sent == num_sendees)) {
+            fp->req.num_pending = batchcount;
+            CMCondition_wait(fp_read_data->cm, fp->req.condition);
+	    fp->req.num_completed = 0;
+	    fp->req.num_pending = 0;
 	    total_sent = 0;
+            batchcount = 0;
+            fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
 	}
 
     }
@@ -1514,6 +1598,10 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
         if (fpvar->ndims == 0) {                        
             memcpy(data, chunk->data, fpvar->type_size);
         } else {
+            if (fp->host_language == FP_FORTRAN_MODE) {
+                reverse_dims(sel->u.bb.start, sel->u.bb.ndim);
+                reverse_dims(sel->u.bb.count, sel->u.bb.ndim);
+            }
             chunk->user_buf = data;
             fpvar->start_position = 0;
             free_displacements(fpvar->displ, fpvar->num_displ);
@@ -1674,6 +1762,12 @@ adios_read_flexpath_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_VA
     return (int64_t)0;
 }
 
+int  adios_read_flexpath_get_dimension_order (const ADIOS_FILE *adiosfile)
+{
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    return (fp->host_language == FP_FORTRAN_MODE);
+}
+
 void 
 adios_read_flexpath_reset_dimension_order (const ADIOS_FILE *adiosfile, int is_fortran)
 {
diff --git a/src/read/read_icee.c b/src/read/read_icee.c
new file mode 100644
index 0000000..1e5fb72
--- /dev/null
+++ b/src/read/read_icee.c
@@ -0,0 +1,1476 @@
+/*
+  read_icee.c       
+  Goal: to create evpath io connection layer in conjunction with 
+  write/adios_icee.c
+*/
+// system libraries
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/times.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <assert.h>
+
+// evpath libraries
+#include <ffs.h>
+#include <atl.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"
+#include "public/adios_error.h"
+#include "core/transforms/adios_transforms_common.h"
+//#include "core/adios_icee.h"
+
+// conditional libraries
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define MALLOC0(type_t, var) var = malloc(sizeof(type_t)); memset(var, '\0', sizeof(type_t));
+#define MYALLOC(var, nbyte)                         \
+    if (nbyte) {                                    \
+        var = malloc(nbyte);                        \
+        assert((var != NULL) && "malloc failure");  \
+        memset(var, '\0', nbyte);                   \
+    } else                                          \
+        var = NULL;
+
+#define MYFREE(var) free(var); var = NULL;
+
+#define MYMIN(a,b)                              \
+    ({ __typeof__ (a) _a = (a);                 \
+        __typeof__ (b) _b = (b);                \
+        _a < _b ? _a : _b; })
+
+#define MYMAX(a,b)                              \
+    ({ __typeof__ (a) _a = (a);                 \
+        __typeof__ (b) _b = (b);                \
+        _a > _b ? _a : _b; })
+
+///////////////////////////
+// Global Variables
+///////////////////////////
+#include "core/globals.h"
+
+#define DUMP(fmt, ...) fprintf(stderr, ">>> "fmt"\n", ## __VA_ARGS__); 
+
+
+/* Data Structure
+   + fileinfo 1.1 - fileinfo 1.2 - ...
+   |    + var 1.1      + var 1.2 
+   |    + var 2.1      + var 2.2
+   |    + ...          + ...
+   + fileinfo 2.1 - fileinfo 2.2 - ...
+
+   x.y (x=filename, y=version)
+*/
+
+typedef struct icee_llist
+{
+    void*             item;
+    struct icee_llist* next;
+} icee_llist_t, *icee_llist_ptr_t;
+
+int (*icee_llist_fp)(const void*, const void*);
+
+icee_llist_ptr_t
+icee_llist_create(void* item)
+{
+    icee_llist_ptr_t node = malloc(sizeof(icee_llist_t));
+    node->item = item;
+    node->next = NULL;
+    
+    return node;
+}
+
+icee_llist_ptr_t
+icee_llist_append(const icee_llist_ptr_t root, void* item)
+{
+    assert(root != NULL);
+        
+    icee_llist_ptr_t p = root;
+    
+    while (p->next != NULL)
+        p = p->next;
+
+    icee_llist_ptr_t node = malloc(sizeof(icee_llist_t));
+    node->item = item;
+    node->next = NULL;
+    
+    p->next = node;
+
+    return node;
+}
+
+icee_llist_ptr_t
+icee_llist_search(const icee_llist_ptr_t root, int (*fp)(const void*, const void*), const void* arg)
+{
+    icee_llist_ptr_t p = root;
+    
+    while (p != NULL)
+    {
+        if ((*fp)(p->item, arg)) break;
+        p = p->next;
+    }
+
+    return p;
+}
+
+void
+icee_llist_map(const icee_llist_ptr_t root, void (*fp)(const void*))
+{
+    icee_llist_ptr_t p = root;
+    
+    while (p != NULL)
+    {
+        (*fp)(p->item);
+        p = p->next;
+    }
+}
+
+int icee_fileinfo_checkname(const void* item, const void* fname)
+{
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t) item;
+    if (strcmp(fp->fname, (char *)fname) == 0)
+        return 1;
+    else
+        return 0;
+}
+
+icee_llist_ptr_t icee_filelist = NULL;
+pthread_mutex_t fileinfo_lock;
+
+void icee_fileinfo_append(const icee_fileinfo_rec_ptr_t root, icee_fileinfo_rec_ptr_t fp)
+{
+    assert(root != NULL);
+    
+    icee_fileinfo_rec_ptr_t p = root;
+
+    while ((p->timestep != fp->timestep) && (p->next != NULL))
+    {
+        p = p->next; 
+    }
+
+    if (p->timestep == fp->timestep)
+    {
+        icee_varinfo_rec_ptr_t v = p->varinfo;
+        
+        while (v->next != NULL)
+            v = v->next;
+
+        v->next = fp->varinfo;
+        p->merge_count++;
+
+        free(fp);
+    }
+    else
+    {
+        p->next = fp;
+    }
+
+    /*
+      while (p->next != NULL)
+      {
+      p = p->next;
+      }
+
+      p->next = fp;
+    */
+}
+
+void icee_fileinfo_copy(icee_fileinfo_rec_ptr_t dest, const icee_fileinfo_rec_ptr_t src)
+{
+    memcpy(dest, src, sizeof(icee_fileinfo_rec_t));
+
+    dest->fname = strdup(src->fname);
+    dest->next = NULL;
+}
+
+void icee_fileinfo_free(icee_fileinfo_rec_ptr_t fp)
+{
+    icee_varinfo_rec_ptr_t vp = fp->varinfo;
+
+    while (vp != NULL)
+    {
+        free(vp->varname);
+        free(vp->gdims);
+        free(vp->ldims);
+        free(vp->offsets);
+        free(vp->data);
+
+        icee_varinfo_rec_ptr_t prev = vp;
+        vp = vp->next;
+
+        free(prev);
+    }
+
+    free(fp);
+    fp = NULL;    
+}
+
+icee_varinfo_rec_ptr_t
+icee_varinfo_search_byname(icee_varinfo_rec_ptr_t head, const char* name)
+{
+    icee_varinfo_rec_ptr_t vp = head;
+
+    while (vp != NULL)
+    {
+        if (strcmp(vp->varname, name) == 0)
+            break;
+        vp = vp->next;
+    }
+
+    return vp;
+}
+
+void icee_varinfo_copy(icee_varinfo_rec_ptr_t dest, const icee_varinfo_rec_ptr_t src)
+{
+    memcpy(dest, src, sizeof(icee_varinfo_rec_t));
+
+    dest->varname = strdup(src->varname);
+
+    uint64_t dimsize = src->ndims * sizeof(uint64_t);
+    dest->gdims = malloc(dimsize);
+    dest->ldims = malloc(dimsize);
+    dest->offsets = malloc(dimsize);
+
+    memcpy(dest->gdims, src->gdims, dimsize);
+    memcpy(dest->ldims, src->ldims, dimsize);
+    memcpy(dest->offsets, src->offsets, dimsize);
+    
+    dest->data = malloc(src->varlen);
+    memcpy(dest->data, src->data, src->varlen);
+
+    dest->next = NULL;
+}
+
+void icee_sel_bb_print(const ADIOS_SELECTION *sel)
+{
+    fprintf(stderr, "===== selection (%p) =====\n", sel);
+
+    if (sel)
+    {
+        switch(sel->type)
+        {
+        case ADIOS_SELECTION_WRITEBLOCK:
+            fprintf(stderr, "%10s : %s\n", "type", "writeblock");
+            break;
+        case ADIOS_SELECTION_BOUNDINGBOX:
+            fprintf(stderr, "%10s : %s\n", "type", "boundingbox");
+            fprintf(stderr, "%10s : %d\n", "ndims", sel->u.bb.ndim);
+            icee_dims_print("start", sel->u.bb.ndim, sel->u.bb.start);
+            icee_dims_print("count", sel->u.bb.ndim, sel->u.bb.count);
+            break;
+        case ADIOS_SELECTION_AUTO:
+            fprintf(stderr, "%10s : %s\n", "type", "auto");
+            break;
+        case ADIOS_SELECTION_POINTS:
+            fprintf(stderr, "%10s : %s\n", "type", "points");
+            break;
+        default:
+            fprintf(stderr, "%10s : %s\n", "type", "undefined");
+            break;
+        }
+    }
+    else
+    {
+        fprintf(stderr, "selection is invalid\n");
+    }
+}
+
+static int
+icee_fileinfo_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
+{
+    icee_fileinfo_rec_ptr_t event = vevent;
+    log_debug("%s (%s)\n", __FUNCTION__, event->fname);
+
+    icee_fileinfo_rec_ptr_t lfp = malloc(sizeof(icee_fileinfo_rec_t));
+    icee_fileinfo_copy(lfp, event);
+    lfp->merge_count = 1;
+
+    icee_varinfo_rec_ptr_t eventvp = event->varinfo;
+    icee_varinfo_rec_ptr_t *lvpp = &lfp->varinfo;
+
+    while (eventvp != NULL)
+    {
+        *lvpp = malloc(sizeof(icee_varinfo_rec_t));
+        icee_varinfo_copy(*lvpp, eventvp);
+        if (adios_verbose_level > 5) DUMP("id,name = %d,%s", (*lvpp)->varid, (*lvpp)->varname);
+        
+        lvpp = &(*lvpp)->next;
+        eventvp = eventvp->next;
+    }
+
+    pthread_mutex_lock (&fileinfo_lock);
+    if (icee_filelist == NULL)
+        icee_filelist = icee_llist_create((void *)lfp);
+    else
+    {
+        icee_llist_ptr_t head;
+        head = icee_llist_search(icee_filelist, icee_fileinfo_checkname, (const void*) lfp->fname);
+
+        if (head == NULL)
+            icee_llist_append(icee_filelist, (void*) lfp);
+        else
+            icee_fileinfo_append((icee_fileinfo_rec_ptr_t)head->item, lfp);
+    }
+    pthread_mutex_unlock (&fileinfo_lock);
+
+    if (adios_verbose_level > 5)
+        icee_llist_map(icee_filelist, icee_fileinfo_print);
+
+    return 1;
+}
+
+void on_icee_passivecheckin_reply (CManager cm, CMConnection conn, icee_passivecheckin_rec_t *m)
+{
+    log_debug("%s\n", __FUNCTION__);
+}
+
+void on_icee_fileinfo_recv (CManager cm, CMConnection conn, icee_fileinfo_rec_t *m)
+{
+    log_debug("%s\n", __FUNCTION__);
+    icee_fileinfo_handler(cm, (void *)m, NULL, NULL);
+}
+
+static int adios_read_icee_initialized = 0;
+
+//CManager icee_read_cm;
+CManager icee_read_cm[ICEE_MAX_PARALLEL];
+static int icee_read_num_parallel = 1;
+
+static int is_read_cm_passive = 0;
+static int num_remote_server = 0;
+CManager pcm[ICEE_MAX_REMOTE];
+
+/* Row-ordered matrix representatin */
+typedef struct {
+    int      typesize;
+    int      ndims;
+    uint64_t dims[10];
+    uint64_t accumdims[10];
+    void*    data;
+} icee_matrix_t;
+
+/* View (subset) representation */
+typedef struct {
+    uint64_t vdims[10];
+    uint64_t offsets[10];
+    int      leastcontiguousdim;
+    icee_matrix_t* mat;
+} icee_matrix_view_t;
+
+void 
+mat_init (icee_matrix_t *m, 
+          int typesize,
+          int ndims,
+          const uint64_t *dims,
+          void *data)
+{
+    assert(ndims <= 10);
+    m->typesize = typesize;
+    m->ndims = ndims;
+    memcpy(m->dims, dims, ndims * sizeof(uint64_t));
+
+    int i;
+    uint64_t p = 1;
+    for (i=ndims-1; i>=0; i--)
+    {
+        m->accumdims[i] = p;
+        p *= dims[i];
+    }
+
+    m->data = data;
+}
+
+void 
+view_init (icee_matrix_view_t *v,
+           icee_matrix_t *m,
+           const int64_t *vdims,
+           const uint64_t *offsets)
+{
+    v->mat = m;
+    memcpy(v->vdims, vdims, m->ndims * sizeof(uint64_t));
+    memcpy(v->offsets, offsets, m->ndims * sizeof(uint64_t));
+
+    int i;
+    for (i=m->ndims-1; i>=0; i--)
+    {
+        v->leastcontiguousdim = i;
+        if ((offsets[i] != 0) || (vdims[i] != m->dims[i]))
+            break;
+    }
+}
+
+/* Copy data between two views. Dimension and size should match */
+void
+view_copy (icee_matrix_view_t *dest, icee_matrix_view_t *src)
+{
+    assert(dest->mat->ndims == src->mat->ndims);
+    
+    int i;
+    for (i=0; i<dest->mat->ndims; i++)
+        assert(dest->vdims[i] == src->vdims[i]);
+
+    // Contiguous merging
+    if ((dest->leastcontiguousdim == 0) && (src->leastcontiguousdim == 0))
+    {
+        int s, d;
+        d = dest->offsets[0] * dest->mat->accumdims[0];
+        s = src->offsets[0] * src->mat->accumdims[0];
+        memcpy(dest->mat->data + d * dest->mat->typesize, 
+               src->mat->data + s * dest->mat->typesize, 
+               dest->vdims[0] * dest->mat->accumdims[0] * dest->mat->typesize);
+
+        return;
+    }
+    
+    // Non-contiguous merging
+    switch (dest->mat->ndims)
+    {
+    case 1:
+    {
+        int s, d;
+        d = dest->offsets[0];
+        s = src->offsets[0];
+        memcpy(dest->mat->data + d * dest->mat->typesize, 
+               src->mat->data + s * dest->mat->typesize, 
+               dest->vdims[0] * dest->mat->typesize);
+        break;
+    }
+    case 2:
+    {
+        int i, s, d;
+        for (i=0; i<dest->vdims[0]; i++)
+        {
+            d = (i + dest->offsets[0]) * dest->mat->accumdims[0] 
+                + dest->offsets[1];
+            s = (i + src->offsets[0]) * src->mat->accumdims[0] 
+                + src->offsets[1];
+            memcpy(dest->mat->data + d * dest->mat->typesize, 
+                   src->mat->data + s * dest->mat->typesize, 
+                   dest->vdims[1] * dest->mat->typesize);
+        }
+        break;
+    }
+    case 3:
+    {
+        int i, j, s, d;
+        for (i=0; i<dest->vdims[0]; i++)
+        {
+            for (j=0; j<dest->vdims[1]; j++)
+            {
+                d = (i + dest->offsets[0]) * dest->mat->accumdims[0] 
+                    + (j + dest->offsets[1]) * dest->mat->accumdims[1]
+                    + dest->offsets[2];
+                s = (i + src->offsets[0]) * src->mat->accumdims[0] 
+                    + (j + src->offsets[1]) * src->mat->accumdims[1] 
+                    + src->offsets[2];
+                memcpy(dest->mat->data + d * dest->mat->typesize, 
+                       src->mat->data + s * dest->mat->typesize, 
+                       dest->vdims[2] * dest->mat->typesize);
+            }
+        }
+        break;
+    }
+    default:
+        adios_error(err_expected_read_size_mismatch,
+                    "The variable dimension is out of the range. ",
+                    "Not yet supported by ICEE\n");
+        break;
+    }
+}
+
+void 
+set_contact_list (attr_list contact_list, 
+                  const icee_transport_t icee_transport, 
+                  char *host, int port)
+{
+    switch (icee_transport)
+    {
+    case ENET:
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("CM_TRANSPORT"), 
+                        "enet");
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("CM_ENET_HOST"), 
+                        host);
+        add_int_attr(contact_list, 
+                     attr_atom_from_string("CM_ENET_PORT"), 
+                     port);
+        break;
+    case NNTI:
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("CM_TRANSPORT"), 
+                        "nnti");
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("IP_HOST"), 
+                        host);
+        add_int_attr(contact_list, 
+                     attr_atom_from_string("NNTI_PORT"), 
+                     port);
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("CM_NNTI_TRANSPORT"), 
+                        "ib");
+        break;
+    case IB:
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("CM_TRANSPORT"), 
+                        "ib");
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("IP_HOST"), 
+                        host);
+        add_int_attr(contact_list, 
+                     attr_atom_from_string("IP_PORT"), 
+                     port);
+        break;
+    default:
+        add_string_attr(contact_list, 
+                        attr_atom_from_string("IP_HOST"), 
+                        host);
+        add_int_attr(contact_list, 
+                     attr_atom_from_string("IP_PORT"), 
+                     port);
+        break;
+            
+    }
+}
+
+/********** Core ADIOS Read functions. **********/
+
+int
+adios_read_icee_init_method (MPI_Comm comm, PairStruct* params)
+{   
+    log_debug ("%s\n", __FUNCTION__);
+
+    int cm_port = 59997;
+    char *cm_host = "localhost";
+    int cm_remote_port = 59999;
+    char *cm_remote_host = "localhost";
+    char *cm_attr = NULL;
+    //attr_list contact_list;
+    icee_transport_t icee_transport_init = TCP;
+    icee_transport_t icee_transport = TCP;
+
+    icee_contactinfo_rec_t *remote_contact = NULL;
+    int i;
+
+    int use_single_remote_server = 1;
+    char *remote_list_str = NULL;
+    char *attr_list_str = NULL;
+
+    int use_native_contact = 0;
+
+    PairStruct * p = params;
+
+    while (p)
+    {
+        if (!strcasecmp (p->name, "cm_attr"))
+        {
+            cm_attr = p->value;
+        }
+        else if (!strcasecmp (p->name, "cm_host"))
+        {
+            cm_host = p->value;
+        }
+        else if (!strcasecmp (p->name, "cm_port"))
+        {
+            cm_port = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "cm_remote_host"))
+        {
+            cm_remote_host = p->value;
+        }
+        else if (!strcasecmp (p->name, "cm_remote_port"))
+        {
+            cm_remote_port = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "remote_list"))
+        {
+            use_single_remote_server = 0;
+            if (p->value)
+                remote_list_str = strdup(p->value);
+        }
+        else if (!strcasecmp (p->name, "attr_list"))
+        {
+            use_single_remote_server = 0;
+            if (p->value)
+                attr_list_str = strdup(p->value);
+        }
+        else if (!strcasecmp (p->name, "transport"))
+        {
+            if (strcasecmp(p->value, "TCP") == 0)
+                icee_transport = TCP;
+            else if (strcasecmp(p->value, "ENET") == 0)
+                icee_transport = ENET;
+            else if (strcasecmp(p->value, "NNTI") == 0)
+                icee_transport = NNTI;
+            else if (strcasecmp(p->value, "IB") == 0)
+                icee_transport = IB;
+            else
+                log_error ("No support: %s\n", p->value);
+        }
+        else if (!strcasecmp (p->name, "transport_init"))
+        {
+            if (strcasecmp(p->value, "TCP") == 0)
+                icee_transport_init = TCP;
+            else if (strcasecmp(p->value, "ENET") == 0)
+                icee_transport_init = ENET;
+            else if (strcasecmp(p->value, "NNTI") == 0)
+                icee_transport_init = NNTI;
+            else if (strcasecmp(p->value, "IB") == 0)
+                icee_transport_init = IB;
+            else
+                log_error ("No support: %s\n", p->value);
+        }
+        else if (!strcasecmp (p->name, "num_parallel"))
+        {
+            icee_read_num_parallel = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "is_passive"))
+        {
+            is_read_cm_passive = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "use_native_contact"))
+        {
+            use_native_contact = atoi(p->value);
+        }
+
+        p = p->next;
+    }
+
+    pthread_mutex_init(&fileinfo_lock, NULL);
+
+    if (use_single_remote_server)
+    {
+        num_remote_server = 1;
+
+        attr_list contact_list = create_attr_list();
+        set_contact_list(contact_list, icee_transport_init, cm_remote_host, cm_remote_port);
+
+        icee_contactinfo_rec_t *p;
+        p = malloc(sizeof(icee_contactinfo_rec_t));
+        char *contact_string = attr_list_to_string(contact_list);
+        p->contact_string = contact_string;
+        p->stone_id = 0; // we assume. it can be wrong.
+        p->next = NULL;
+
+        remote_contact = p;
+    }
+    else
+    {
+        num_remote_server = 0;
+
+        icee_contactinfo_rec_t *p;
+        icee_contactinfo_rec_t *prev;
+
+        char* token = strtok(remote_list_str, ",");
+        while (token)
+        {
+            char host[256];
+            int port = 0;
+
+            if (token[0] == ':')
+            {
+                strcpy(host, cm_remote_host);
+                port = atoi(token+1);
+            }
+            else
+            {
+                char *pch = strchr(token, ':');
+                if (pch != NULL)
+                {
+                    strncpy(host, token, pch - token);
+                    host[pch-token] = '\0';
+                    port = atoi(pch+1);
+                }
+                else
+                {
+                    int len = strlen(token);
+                    strncpy(host, token, len);
+                    assert(len < 256);
+                    host[len] = '\0';
+                    port = cm_remote_port;
+                }
+            }
+            log_debug("Remote server list: (%d) %s:%d\n", num_remote_server, host, port);
+
+            p = malloc(sizeof(icee_contactinfo_rec_t));
+            attr_list contact_list;
+            
+            contact_list = create_attr_list();
+            set_contact_list(contact_list, icee_transport_init, host, port);
+            p->contact_string = attr_list_to_string(contact_list);
+            p->stone_id = 0; // we assume. it can be wrong.
+            p->next = NULL;
+
+            if (num_remote_server == 0)
+                remote_contact = p;
+            else
+                prev->next = p;
+
+            prev = p;
+            num_remote_server++;
+            token = strtok(NULL, ",");
+        }
+    }
+
+    if (attr_list_str != NULL)
+    {
+        num_remote_server = 0;
+
+        icee_contactinfo_rec_t *p;
+        icee_contactinfo_rec_t *prev;
+
+        char* token = strtok(attr_list_str, ",");
+        while (token)
+        {
+            int remote_stone = 0;
+            char string_list[256];
+
+            sscanf(token, "%d:%s", &remote_stone, &string_list[0]);
+
+            p = malloc(sizeof(icee_contactinfo_rec_t));
+            attr_list contact_list;
+            
+            p->stone_id = remote_stone;
+            p->contact_string = strdup(string_list);
+            p->next = NULL;
+
+            if (num_remote_server == 0)
+                remote_contact = p;
+            else
+                prev->next = p;
+
+            prev = p;
+            num_remote_server++;
+            token = strtok(NULL, ",");
+        }
+    }
+
+    if (icee_read_num_parallel > ICEE_MAX_PARALLEL)
+    {
+        icee_read_num_parallel = ICEE_MAX_PARALLEL;
+        log_info ("Max. number of threads is set to %d\n", icee_read_num_parallel);
+    }
+
+    log_debug ("transport : %s\n", icee_transport_name[icee_transport]);
+
+    /*
+      log_info ("cm_host : %s\n", cm_host);
+      log_info ("cm_port : %d\n", cm_port);
+
+      for (i = 0; i < num_remote_server; i++) 
+      {
+      log_info ("remote_list : %s:%d\n", remote_server[i].client_host, remote_server[i].client_port);
+      }
+    */
+
+    if (!adios_read_icee_initialized)
+    {
+        if (is_read_cm_passive)
+        {
+            icee_contactinfo_rec_t *prev;
+            for (i = 0; i < num_remote_server; i++)
+            {
+                attr_list contact_list;
+                icee_contactinfo_rec_t *p = (i == 0)? remote_contact : prev->next;
+
+                pcm[i] = CManager_create();
+
+                if (!CMfork_comm_thread(pcm[i]))
+                    printf("Fork of communication thread[%d] failed.\n", i);
+
+                contact_list = attr_list_from_string(p->contact_string);
+
+                log_debug("Passive remote contact: \"%s\"\n", attr_list_to_string(contact_list));
+                if (adios_verbose_level > 5) dump_attr_list(contact_list);
+
+                /*
+                  attr_list contact_list  = create_attr_list();
+                  add_string_attr(contact_list, attr_atom_from_string("IP_HOST"),
+                  remote_server[i].client_host);
+                  add_int_attr(contact_list, attr_atom_from_string("IP_PORT"),
+                  remote_server[i].client_port);
+                */
+
+                CMConnection conn = CMinitiate_conn(pcm[i], contact_list);
+
+                int n = 0;
+                while (conn == NULL)
+                {
+                    log_error ("Passive connection failed (%d). Try again ...\n", i);
+                    dump_attr_list(contact_list);
+
+                    sleep(2);
+                    conn = CMinitiate_conn(pcm[i], contact_list);
+                    
+                    if (n > 5) break;
+                    n++;
+                }
+
+                if (conn == NULL)
+                {
+                    log_error ("Initializing passive connection failed (%d)\n", i);
+                    
+                }
+
+                CMFormat fm_checkin, fm_fileinfo;
+                fm_checkin = CMregister_format(pcm[i], icee_passivecheckin_format_list);
+
+                CMregister_handler(fm_checkin, icee_passivecheckin_reply_handler, on_icee_passivecheckin_reply);
+
+                fm_fileinfo = CMregister_format(pcm[i], icee_fileinfo_format_list);
+                CMregister_handler(fm_fileinfo, icee_fileinfo_recv_handler, on_icee_fileinfo_recv);
+
+                icee_passivecheckin_rec_t m;
+
+                int condition = CMCondition_get(pcm[i], conn);
+                CMCondition_set_client_data(pcm[i], condition, NULL);
+                m.condition = condition;
+
+                if (CMwrite(conn, fm_checkin, (void*)&m) != 1)
+                    log_error ("Passive check-in failed (%d)\n", i);
+
+                prev = p;
+            }
+            log_debug("Passive connection established");
+            goto done;
+        }
+
+        EVstone   stone[ICEE_MAX_PARALLEL], remote_stone;
+        EVsource  source;
+        attr_list contact[ICEE_MAX_PARALLEL];
+
+        icee_contactinfo_rec_t contact_msg[ICEE_MAX_PARALLEL];
+
+        for (i=0; i<icee_read_num_parallel; i++)
+        {
+            icee_read_cm[i] = CManager_create();
+
+            contact[i] = create_attr_list();
+            set_contact_list(contact[i], icee_transport, cm_host, cm_port+i);
+
+            if (CMlisten_specific(icee_read_cm[i], contact[i]) == 0)
+                printf("Error: unable to initialize connection manager[%d].\n", i);
+            
+            if (!CMfork_comm_thread(icee_read_cm[i])) 
+                printf("Fork of communication thread[%d] failed.\n", i);
+
+            stone[i] = EValloc_stone(icee_read_cm[i]);
+            if (adios_verbose_level > 5) 
+            {
+                log_debug("Reader contact: \"%d:%s\"\n", stone[i], attr_list_to_string(CMget_contact_list(icee_read_cm[i])));
+                dump_attr_list(CMget_contact_list(icee_read_cm[i]));
+            }
+
+            EVassoc_terminal_action(icee_read_cm[i], stone[i], icee_fileinfo_format_list, icee_fileinfo_handler, NULL);
+
+            contact_msg[i].stone_id = stone[i];
+            attr_list contact_list;
+            if (use_native_contact)
+                contact_list = CMget_contact_list(icee_read_cm[i]);
+            else
+                contact_list = contact[i];
+                
+            contact_msg[i].contact_string = attr_list_to_string(contact_list);
+            contact_msg[i].next = NULL;
+
+            if (i>0)
+                contact_msg[i-1].next = &contact_msg[i];
+        }
+        
+        EVstone split_stone;
+        EVaction split_action;
+
+        split_stone = EValloc_stone(icee_read_cm[0]);
+        split_action = EVassoc_split_action(icee_read_cm[0], split_stone, NULL);
+        icee_contactinfo_rec_t *prev;
+        for (i = 0; i < num_remote_server; i++) 
+        {
+            attr_list contact_list;
+            EVstone remote_stone, output_stone;
+            output_stone = EValloc_stone(icee_read_cm[0]);
+            icee_contactinfo_rec_t *p = (i == 0)? remote_contact : prev->next;
+            
+            remote_stone = p->stone_id;
+            contact_list = attr_list_from_string(p->contact_string);
+
+            EVaction action;
+            action = EVassoc_bridge_action(icee_read_cm[0], output_stone, contact_list, remote_stone);
+
+            int n = 0;
+            while (action == -1)
+            {
+                log_error ("Connection failed (%d). Try again ...\n", i);
+                dump_attr_list(contact_list);
+                
+                sleep(2);
+                action = EVassoc_bridge_action(icee_read_cm[0], output_stone, contact_list, remote_stone);
+                
+                if (n > 5) break;
+                n++;
+            }
+
+            EVaction_add_split_target(icee_read_cm[0], split_stone, split_action, output_stone);
+
+            prev = p;
+
+            log_debug("Remote contact: \"%d:%s\"\n", remote_stone, attr_list_to_string(contact_list));
+            if (adios_verbose_level > 5) dump_attr_list(contact_list);
+
+        }
+
+        source = EVcreate_submit_handle(icee_read_cm[0], split_stone, icee_contactinfo_format_list);
+        
+        //if (adios_verbose_level > 5) icee_contactinfo_print(contact_msg);
+        
+        EVsubmit(source, contact_msg, NULL);
+
+    done:
+        adios_read_icee_initialized = 1;
+    }
+
+    return 0;
+}
+
+ADIOS_FILE*
+adios_read_icee_open_file(const char * fname, MPI_Comm comm)
+{
+    adios_error (err_operation_not_supported,
+                 "ICEE staging method does not support file mode for reading. "
+                 "Use adios_read_open() to open a staged dataset.\n");
+    return NULL;
+}
+
+ADIOS_FILE*
+adios_read_icee_open(const char * fname,
+                     MPI_Comm comm,
+                     enum ADIOS_LOCKMODE lock_mode,
+                     float timeout_sec)
+{
+    log_debug("%s\n", __FUNCTION__);
+
+    icee_llist_ptr_t head = NULL;
+
+    float waited_sec = 0.0;    
+    while (waited_sec <= timeout_sec)
+    {
+        head = icee_llist_search(icee_filelist, icee_fileinfo_checkname, 
+                                 (const void*) fname);
+        if (head != NULL)
+            break;
+
+        usleep(0.1*1E6);
+        waited_sec += 0.1;
+    }
+    
+    if (head == NULL)
+    {
+        log_error ("No data yet\n");
+        return NULL;
+    }
+    
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t)head->item;
+    
+    while (fp->merge_count != fp->nchunks)
+    {
+        log_debug("Waiting the rest of blocks (%d/%d)\n", fp->merge_count, fp->nchunks);
+        
+        usleep(0.1*1E6);
+    }
+
+    ADIOS_FILE *adiosfile = malloc(sizeof(ADIOS_FILE));
+
+    adiosfile->fh = (uint64_t)fp;
+
+#if 0
+    int hashsize = 10;
+    qhashtbl_t *tbl = qhashtbl(hashsize);
+    
+    icee_varinfo_rec_ptr_t vp = fp->varinfo;
+    while (vp != NULL)
+    {
+        tbl->put(tbl, vp->varname, NULL);
+        vp = vp->next;
+    }
+
+    adiosfile->nvars = tbl->size(tbl);
+    adiosfile->var_namelist = malloc(tbl->num * sizeof(char *));
+
+    int i;
+    size_t idx = 0;
+    for (i=0; i<hashsize; i++)
+    {
+        qhnobj_t *qhobj = tbl->slots[i].head;
+        while (qhobj != NULL)
+        {
+            //DUMP("%lu:%s", idx, qhobj->key);
+            adiosfile->var_namelist[idx] = strdup(qhobj->key);
+            qhobj->value = (void*) idx;
+            idx++;
+            qhobj = qhobj->next;
+        }
+    }
+
+    /*
+    // Update back to varinfo
+    vp = fp->varinfo;
+    while (vp != NULL)
+    {
+    vp->varid = (int) tbl->get(tbl, vp->varname);
+    vp = vp->next;
+    }
+    */
+
+    tbl->free(tbl);
+#endif
+
+    adiosfile->nvars = fp->nvars;
+    adiosfile->var_namelist = malloc(fp->nvars * sizeof(char *));
+
+    icee_varinfo_rec_ptr_t vp = fp->varinfo;
+
+    int i;
+    for (i = 0; i < fp->nvars; i++)
+    {
+        adiosfile->var_namelist[i] = strdup(vp->varname);
+        vp = vp->next;
+    }
+
+    adiosfile->nattrs = 0;
+    adiosfile->attr_namelist = NULL;
+
+    adiosfile->current_step = 0;
+    adiosfile->last_step = 1;
+
+    adiosfile->path = strdup(fname);
+
+    adiosfile->version = -1;
+    adiosfile->file_size = 0;
+    adios_errno = err_no_error;        
+
+    return adiosfile;
+}
+
+int 
+adios_read_icee_finalize_method ()
+{
+    log_debug("%s\n", __FUNCTION__);
+
+    if (adios_read_icee_initialized)
+    {
+        int i;
+        if (is_read_cm_passive == 1)
+            for (i = 0; i < num_remote_server; i++) 
+                CManager_close(pcm[i]);
+        else
+            for (i=0; i<icee_read_num_parallel; i++)
+                CManager_close(icee_read_cm[i]);
+
+        adios_read_icee_initialized = 0;
+    }
+
+    return 0;
+}
+
+void 
+adios_read_icee_release_step(ADIOS_FILE *adiosfile) 
+{
+    log_debug("%s\n", __FUNCTION__);
+}
+
+int 
+adios_read_icee_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_sec) 
+{
+    log_debug("%s\n", __FUNCTION__);
+    adios_errno = 0;
+
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t) adiosfile->fh;
+    icee_fileinfo_rec_ptr_t next = NULL;
+
+    float waited_sec = 0.0;
+    while (waited_sec <= timeout_sec)
+    {
+        next = fp->next;
+
+        if (next != NULL)
+            break;
+
+        usleep(0.1*1E6);
+        waited_sec += 0.1;
+    }
+    
+    if (next != NULL)
+    {
+        icee_llist_ptr_t head = NULL;
+        head = icee_llist_search(icee_filelist, icee_fileinfo_checkname, 
+                                 (const void*) fp->fname);
+        assert(head != NULL);
+
+        head->item = next;
+        adiosfile->fh = (uint64_t) next;
+
+        icee_fileinfo_free(fp);
+    }
+    else
+        adios_error (err_step_notready, 
+                     "No more data yet\n");
+
+    return adios_errno;
+}
+
+int 
+adios_read_icee_close(ADIOS_FILE * fp)
+{
+    log_debug("%s\n", __FUNCTION__);
+
+    return 0;
+}
+
+ADIOS_FILE *
+adios_read_icee_fopen(const char *fname, MPI_Comm comm) 
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return NULL;
+}
+
+int 
+adios_read_icee_is_var_timed(const ADIOS_FILE* fp, int varid) 
+{  
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0; 
+}
+
+void 
+adios_read_icee_get_groupinfo(const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, uint32_t **nvars_per_group, uint32_t **nattrs_per_group) 
+{
+    log_debug("%s\n", __FUNCTION__);
+
+    icee_fileinfo_rec_ptr_t p = (icee_fileinfo_rec_ptr_t) fp->fh;
+
+    if (p)
+    {
+        *ngroups = 1;
+        *group_namelist = (char **) malloc (sizeof (char*));
+        *group_namelist[0] = strdup ("noname");
+    }
+    
+    return;
+}
+
+int 
+adios_read_icee_check_reads(const ADIOS_FILE* fp, ADIOS_VARCHUNK** chunk) 
+{ 
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0; 
+}
+
+int adios_read_icee_perform_reads(const ADIOS_FILE *adiosfile, int blocking)
+{
+    log_debug("%s\n", __FUNCTION__);
+    return 0;
+}
+
+int
+adios_read_icee_inq_var_blockinfo(const ADIOS_FILE* fp,
+                                  ADIOS_VARINFO* varinfo)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0; 
+}
+
+int
+adios_read_icee_inq_var_stat(const ADIOS_FILE* fp,
+                             ADIOS_VARINFO* varinfo,
+                             int per_step_stat,
+                             int per_block_stat)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0; 
+}
+
+
+int 
+adios_read_icee_schedule_read_byid(const ADIOS_FILE *adiosfile,
+                                   const ADIOS_SELECTION *sel,
+                                   int varid,
+                                   int from_steps,
+                                   int nsteps,
+                                   void *data)
+{   
+    int i;
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t) adiosfile->fh;
+    log_debug("%s (%d:%s)\n", __FUNCTION__, varid, fp->fname);
+    //assert((varid < fp->nvars) || (fp->nvars == 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);
+        return err_invalid_timestep;
+    }
+    
+    icee_varinfo_rec_ptr_t vp = NULL;
+    vp = icee_varinfo_search_byname(fp->varinfo, adiosfile->var_namelist[varid]);
+    if (adios_verbose_level > 5) icee_varinfo_print(vp);
+
+    if (!vp)
+    {
+        adios_error(err_invalid_varid, "Invalid variable id: %d\n", varid);
+        return adios_errno;
+    }
+
+    while (fp->merge_count != fp->nchunks)
+    {
+        log_debug("Waiting the rest of blocks (%d/%d)\n", fp->merge_count, fp->nchunks);
+        
+        usleep(0.1*1E6);
+    }
+
+    if (sel==0)
+        memcpy(data, vp->data, vp->varlen);
+    else
+        switch(sel->type)
+        {
+        case ADIOS_SELECTION_WRITEBLOCK:
+        {
+            //DUMP("fp->rank: %d", fp->rank);
+            //DUMP("u.block.index: %d", sel->u.block.index);
+
+            if (fp->comm_rank != sel->u.block.index)
+                adios_error(err_unspecified,
+                            "Block id missmatch. "
+                            "Not yet supported by ICEE\n");
+
+            // Possible memory overwrite
+            memcpy(data, vp->data, vp->varlen);
+            break;
+        }
+        case ADIOS_SELECTION_BOUNDINGBOX:
+        {
+            if (vp->ndims != sel->u.bb.ndim)
+                adios_error(err_invalid_dimension,
+                            "Dimension mismatch\n");
+
+            log_debug("Merging operation (total nvars: %d).\n", fp->nchunks);
+            if (adios_verbose_level > 5) icee_sel_bb_print(sel);
+
+            while (vp != NULL)
+            {
+                icee_matrix_t m_sel;
+                icee_matrix_t m_var;
+                icee_matrix_view_t v_sel;
+                icee_matrix_view_t v_var;
+                uint64_t start[10];
+                int64_t count[10]; // should be signed to check validity
+                uint64_t s_offsets[10], v_offsets[10];
+                int i;
+
+                if (adios_verbose_level > 5) icee_varinfo_print(vp);
+                    
+                mat_init(&m_sel, vp->typesize, vp->ndims, sel->u.bb.count, data);
+                mat_init(&m_var, vp->typesize, vp->ndims, vp->ldims, vp->data);
+
+                for (i=0; i<vp->ndims; i++)
+                    start[i] = MYMAX(sel->u.bb.start[i], vp->offsets[i]);
+
+                for (i=0; i<vp->ndims; i++)
+                {
+                    count[i] = 
+                        MYMIN(sel->u.bb.start[i]+sel->u.bb.count[i],
+                              vp->offsets[i]+vp->ldims[i]) - start[i];
+                }
+                    
+                for (i=0; i<vp->ndims; i++)
+                {
+                    if (count[i] <= 0)
+                    {
+                        log_debug("No ROI. Skip\n");
+                        goto next;
+                    }
+                }
+
+                for (i=0; i<vp->ndims; i++)
+                    s_offsets[i] = start[i] - sel->u.bb.start[i];
+
+                for (i=0; i<vp->ndims; i++)
+                    v_offsets[i] = start[i] - vp->offsets[i];
+
+                view_init (&v_sel, &m_sel, count, s_offsets);
+                view_init (&v_var, &m_var, count, v_offsets);
+                view_copy (&v_sel, &v_var);
+                    
+            next:
+                vp = icee_varinfo_search_byname(vp->next, adiosfile->var_namelist[varid]);
+            }
+            break;
+        }
+        case ADIOS_SELECTION_AUTO:
+        {
+            // Possible memory overwrite
+            memcpy(data, vp->data, vp->varlen);
+            break;
+        }
+        case ADIOS_SELECTION_POINTS:
+        {
+            adios_error(err_operation_not_supported,
+                        "ADIOS_SELECTION_POINTS not yet supported by ICEE.\n");
+            break;
+        }
+        }
+
+    return adios_errno;
+}
+
+int 
+adios_read_icee_schedule_read(const ADIOS_FILE *adiosfile,
+                              const ADIOS_SELECTION * sel,
+                              const char * varname,
+                              int from_steps,
+                              int nsteps,
+                              void * data)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0;
+}
+
+int 
+adios_read_icee_get_attr (int *gp, const char *attrname,
+                          enum ADIOS_DATATYPES *type,
+                          int *size, void **data)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0;
+}
+
+int 
+adios_read_icee_get_attr_byid (const ADIOS_FILE *adiosfile, int attrid,
+                               enum ADIOS_DATATYPES *type,
+                               int *size, void **data)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0;
+}
+
+ADIOS_VARINFO* 
+adios_read_icee_inq_var(const ADIOS_FILE * adiosfile, const char* varname)
+{
+    log_debug("%s (%s)\n", __FUNCTION__, varname);
+
+    return NULL;
+}
+
+ADIOS_VARINFO* 
+adios_read_icee_inq_var_byid (const ADIOS_FILE * adiosfile, int varid)
+{
+    log_debug("%s (%d)\n", __FUNCTION__, varid);
+
+    icee_fileinfo_rec_ptr_t fp = (icee_fileinfo_rec_ptr_t) adiosfile->fh;
+    //assert((varid < fp->nvars) || (fp->nvars == 0));
+
+    ADIOS_VARINFO *a = calloc(1, sizeof(ADIOS_VARINFO));
+    
+    icee_varinfo_rec_ptr_t vp = NULL;
+    vp = icee_varinfo_search_byname(fp->varinfo, adiosfile->var_namelist[varid]);
+    //icee_varinfo_print(vp);
+
+    if (vp)
+    {
+        a->varid = vp->varid;
+        a->type = vp->type;
+        a->ndim = vp->ndims;
+
+        if (vp->ndims == 0)
+        {
+            a->value = malloc(vp->typesize);
+            memcpy(a->value, vp->data, vp->typesize);
+        }
+        else
+        {
+            uint64_t dimsize = vp->ndims * sizeof(uint64_t);
+            a->dims = malloc(dimsize);
+            memcpy(a->dims, vp->gdims, dimsize);
+            a->global = 1;
+            
+            if (a->dims[0] == 0)
+            {
+                a->global = 0;
+                memcpy(a->dims, vp->ldims, dimsize);
+            }
+            
+            a->value = NULL;
+        }
+    }
+
+    return a;
+}
+
+void 
+adios_read_icee_free_varinfo (ADIOS_VARINFO *adiosvar)
+{
+    log_debug("%s\n", __FUNCTION__);
+    free(adiosvar);
+    return;
+}
+
+
+ADIOS_TRANSINFO* 
+adios_read_icee_inq_var_transinfo(const ADIOS_FILE *gp, 
+                                  const ADIOS_VARINFO *vi)
+{    
+    log_debug("%s\n", __FUNCTION__);
+    ADIOS_TRANSINFO *trans = malloc(sizeof(ADIOS_TRANSINFO));
+    memset(trans, 0, sizeof(ADIOS_TRANSINFO));
+    trans->transform_type = adios_transform_none;
+    return trans;
+}
+
+
+int 
+adios_read_icee_inq_var_trans_blockinfo(const ADIOS_FILE *gp, 
+                                        const ADIOS_VARINFO *vi, 
+                                        ADIOS_TRANSINFO *ti)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0;
+}
+
+int
+adios_read_icee_get_dimension_order (const ADIOS_FILE *adiosfile)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return 0; // Stub method: always return false (C order)
+}
+
+void
+adios_read_icee_reset_dimension_order (const ADIOS_FILE *adiosfile, 
+                                       int is_fortran)
+{
+    log_error("No support yet: %s\n", __FUNCTION__);
+    return;
+}
diff --git a/src/read/read_nssi.c b/src/read/read_nssi.c
index 78975c3..b4df65f 100644
--- a/src/read/read_nssi.c
+++ b/src/read/read_nssi.c
@@ -399,6 +399,12 @@ int adios_read_nssi_fclose (ADIOS_FILE *fp)
     return 0;
 }
 
+
+int adios_read_nssi_get_dimension_order (const ADIOS_FILE *fp)
+{
+    return 0;
+}
+
 /* This function can be called if user places
    the wrong sequences of dims for a var
 */
diff --git a/src/transforms/adios_transform_alacrity_common.h b/src/transforms/adios_transform_alacrity_common.h
new file mode 100644
index 0000000..afcbf3f
--- /dev/null
+++ b/src/transforms/adios_transform_alacrity_common.h
@@ -0,0 +1,92 @@
+/*
+ * adios_transform_alacrity_common.h
+ *
+ *  Created on: Oct 9, 2014
+ *      Author: David A. Boyuka II
+ */
+#ifndef ADIOS_TRANSFORM_ALACRITY_COMMON_H_
+#define ADIOS_TRANSFORM_ALACRITY_COMMON_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <public/adios_error.h>
+//#include <assert.h>
+
+#include <memstream.h> // From ALACRITY, helps with (de)serialization of metadata
+
+typedef struct {
+	// Loaded from transform metadata buffer
+	uint64_t meta_size, index_size, lob_size, origdata_size;
+
+	// Computed
+	uint64_t meta_offset, index_offset, lob_offset, origdata_offset;
+	int has_lob, has_origdata;
+} adios_transform_alacrity_metadata;
+
+static const int ALACRITY_TRANSFORM_METADATA_LEN = sizeof(uint8_t) + 4 * sizeof(uint64_t);
+
+inline static int read_alacrity_transform_metadata(int16_t transform_metadata_len, const void *transform_metadata, adios_transform_alacrity_metadata *alac_metadata) {
+	assert(alac_metadata && transform_metadata);
+	if (transform_metadata_len != ALACRITY_TRANSFORM_METADATA_LEN) {
+		adios_error(err_unspecified,
+				    "Unexpected transform metadata size for ALACRITY transform "
+				    "(is %hu, expected %hu). File may be corrupt, or may have "
+				    "been written using an old version of the ALACRITY data "
+				    "transform plugin.\n", transform_metadata_len, ALACRITY_TRANSFORM_METADATA_LEN);
+		return 0;
+	}
+
+	int ret = 1;
+	memstream_t meta_ms = memstreamInitReturn((void*)transform_metadata);
+
+	const int version = memstreamReadChar(&meta_ms);
+	if (version == 0) {
+		alac_metadata->meta_size = memstreamReadUint64(&meta_ms);
+		alac_metadata->index_size = memstreamReadUint64(&meta_ms);
+		alac_metadata->lob_size = memstreamReadUint64(&meta_ms);
+		alac_metadata->origdata_size = memstreamReadUint64(&meta_ms);
+
+		alac_metadata->meta_offset = 0;
+		alac_metadata->index_offset = alac_metadata->meta_offset + alac_metadata->meta_size;
+		alac_metadata->lob_offset = alac_metadata->index_offset + alac_metadata->index_size;
+		alac_metadata->origdata_offset = alac_metadata->lob_offset + alac_metadata->lob_size;
+
+		alac_metadata->has_lob = (alac_metadata->lob_size != 0);
+		alac_metadata->has_origdata = (alac_metadata->origdata_size != 0);
+	} else {
+		adios_error(err_unspecified,
+				    "Unknown ALACRITY transform metadata version %d. "
+				    "File may be corrupt, or this build of ADIOS may not be up-to-date.\n",
+				    version);
+		ret = 0;
+	}
+
+	memstreamDestroy(&meta_ms, false);
+	return ret;
+}
+
+inline static int write_alacrity_transform_metadata(int16_t transform_metadata_len,
+		void *transform_metadata, const adios_transform_alacrity_metadata *alac_metadata) {
+	static const int ALAC_VERSION = 0;
+
+	assert(alac_metadata && transform_metadata);
+	if (transform_metadata_len != ALACRITY_TRANSFORM_METADATA_LEN) {
+		adios_error(err_unspecified,
+				    "Internal error: ALACRITY transform metadata was not allocated with "
+				    "the correct size (is %hu, expected %hu)\n",
+				    transform_metadata_len, ALACRITY_TRANSFORM_METADATA_LEN);
+		return 0;
+	}
+
+	memstream_t meta_ms = memstreamInitReturn(transform_metadata);
+	memstreamAppendChar(&meta_ms, ALAC_VERSION);
+	memstreamAppendUint64(&meta_ms, alac_metadata->meta_size);
+	memstreamAppendUint64(&meta_ms, alac_metadata->index_size);
+	memstreamAppendUint64(&meta_ms, alac_metadata->lob_size);
+	memstreamAppendUint64(&meta_ms, alac_metadata->origdata_size);
+	memstreamDestroy(&meta_ms, false);
+	return 1;
+}
+
+#endif /* ADIOS_TRANSFORM_ALACRITY_COMMON_H_ */
diff --git a/src/transforms/adios_transform_alacrity_read.c b/src/transforms/adios_transform_alacrity_read.c
index 9b83c3b..3f26bc9 100644
--- a/src/transforms/adios_transform_alacrity_read.c
+++ b/src/transforms/adios_transform_alacrity_read.c
@@ -3,23 +3,74 @@
 #include <stdio.h>
 #include <assert.h>
 
-#include "util.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/util.h"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "public/adios_error.h"
 
 #ifdef ALACRITY
 
 #include "alacrity.h"
 
+#include "adios_transform_alacrity_common.h"
+#include "adios_transform_identity_read.h" // used to read original data
+
 int adios_transform_alacrity_is_implemented (void) {return 1;}
 
+typedef struct {
+	adios_transform_alacrity_metadata alac_meta;
+	void *identity_internal;
+} alac_pg_read_req_info;
+
 int adios_transform_alacrity_generate_read_subrequests(adios_transform_read_request *reqgroup,
-                                                    adios_transform_pg_read_request *pg_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;
+	uint64_t read_buffer_size;
+	alac_pg_read_req_info *pg_internal = (alac_pg_read_req_info*)malloc(sizeof(alac_pg_read_req_info));
+
+	const int metagood =
+		read_alacrity_transform_metadata(
+			pg_reqgroup->transform_metadata_len,
+			pg_reqgroup->transform_metadata,
+			&pg_internal->alac_meta);
+	if (!metagood) {
+		log_warn("Invalid ALACRITY transform metadata found for PG %d; input file "
+				 "is likely corrupt or written using an old version of ALACRITY\n",
+				 pg_reqgroup->blockidx);
+		free(pg_internal);
+		return 1;
+	}
+
+	// Based on the format of the ALACRITY partition, schedule the required read requests
+	if (pg_internal->alac_meta.has_origdata) {
+		// Original data is available, use identity transform read
+		// Use the Identity method for doing this, since it's just reading original data
+	    adios_transform_generate_read_subrequests_over_original_data(
+	    	pg_internal->alac_meta.origdata_offset,
+			1, // sieve points
+			reqgroup,
+			pg_reqgroup
+	    );
+
+	    // Wrap the identity-specific internal information so we can reproduce it later
+		pg_internal->identity_internal = pg_reqgroup->transform_internal;
+	} else if (pg_internal->alac_meta.has_lob) {
+		// No original data, but low-order bytes are available, so we can decode the partition
+		// Read the whole partition to do this
+	    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);
+	} else {
+		// No original data or low-order bytes, must use approximate index decoding
+		adios_error(err_unspecified, "Attempt to read from ALACRITY-transformed data with "
+				                     "no original data and no low-order bytes encoded. This "
+				                     "function is currently unimplemented.\n");
+	    return 1;
+	}
+
+	pg_reqgroup->transform_internal = pg_internal; // Store necessary information for interpreting the read
+	return 0;
 }
 
 // Do nothing for individual subrequest
@@ -30,41 +81,79 @@ adios_datablock * adios_transform_alacrity_subrequest_completed(adios_transform_
     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);
+	alac_pg_read_req_info *pg_internal = (alac_pg_read_req_info*)completed_pg_reqgroup->transform_internal;
+
+	if (pg_internal->alac_meta.has_origdata) {
+		// If this is an original data read, we delegate to the Identity implementation
+
+		// Temporarily restore the pg_reqgroup->transform_internal to what the Identity implementation is expecting
+		completed_pg_reqgroup->transform_internal = pg_internal->identity_internal;
+
+		// Invoke the Identity read implementation
+		adios_datablock *ret = adios_transform_pg_reqgroup_completed_over_original_data(reqgroup, completed_pg_reqgroup);
+
+		// Revert to our internal info, so it will be free'd by the Transform framework
+		completed_pg_reqgroup->transform_internal = pg_internal;
+
+		// Return
+		return ret;
+	} else if (pg_internal->alac_meta.has_lob) {
+		// If this is a LOB data read, decode the partition
+
+		// Get the buffer with the transformed data that was read (it's in the
+		// single child raw read request)
+		void *raw_buff = completed_pg_reqgroup->subreqs->data;
+
+		// Compute the size of the original data so we can allocate a buffer
+		uint64_t orig_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+		int d;
+		for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+			orig_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+
+		// Allocate a buffer to decode into
+		void* orig_data_buff = malloc(orig_size);
+
+		ALPartitionData output_partition;
+		uint64_t numElements = 0;
+
+		// Deserialize the ALACRITY partition from the read buffer into a struct
+		memstream_t ms = memstreamInitReturn(raw_buff);
+		memstreamSkip(&ms, pg_internal->alac_meta.meta_offset);
+		ALDeserializeMetadata(&output_partition.metadata, &ms);
+		memstreamReset(&ms);
+		memstreamSkip(&ms, pg_internal->alac_meta.index_offset);
+		ALDeserializeIndex(&output_partition.index, &output_partition.metadata, &ms);
+		memstreamReset(&ms);
+		memstreamSkip(&ms, pg_internal->alac_meta.lob_offset);
+		ALDeserializeData(&output_partition.data, &output_partition.metadata, &ms);
+		memstreamReset(&ms);
+		memstreamDestroy(&ms, false);
+
+		// The deserialize functions above allocate their own buffers
+		output_partition.ownsBuffers = true;
+
+		// Free the read buffer for transformed data (this would be done automatically
+		// by the transform framework, but do it here to be safe)
+		free(completed_pg_reqgroup->subreqs->data);
+		completed_pg_reqgroup->subreqs->data = NULL;
+
+		// Decode the ALPartitionData into an output buffer
+		int rtn = ALDecode(&output_partition, orig_data_buff, &numElements);
+		if (ALErrorNone != rtn) {
+			free(orig_data_buff);
+			return NULL;
+		}
+
+		ALPartitionDataDestroy(&output_partition);
+
+		return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, orig_data_buff);
+	} else {
+		abort(); // Should not happen, since no reads should be scheduled in such a case
+		return NULL;
+	}
 }
 
 adios_datablock * adios_transform_alacrity_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
diff --git a/src/transforms/adios_transform_alacrity_write.c b/src/transforms/adios_transform_alacrity_write.c
index 770a9d0..360474b 100644
--- a/src/transforms/adios_transform_alacrity_write.c
+++ b/src/transforms/adios_transform_alacrity_write.c
@@ -2,25 +2,198 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef ALACRITY
 
 #include "alacrity.h"
 #include "alacrity-serialization-debug.h"
 
+#include "adios_transform_alacrity_common.h"
+
+typedef struct {
+	ALEncoderConfig alac_config;
+	int has_original_data;
+	int has_low_order_bytes;
+} alac_transform_conf_t;
+
+uint64_t adios_get_type_size(enum ADIOS_DATATYPES type, void *var);
+
 uint16_t adios_transform_alacrity_get_metadata_size(struct adios_transform_spec *transform_spec)
 {
-    return (3 * sizeof(uint64_t));
+    return sizeof(uint8_t) + (4 * 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)
+static alac_transform_conf_t parse_configuration(const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec) {
+    alac_transform_conf_t config;
+    config.has_low_order_bytes = 1;
+    config.has_original_data = 1;
+
+    if (var->pre_transform_type == adios_real) {
+        ALEncoderConfigure(&config.alac_config, 16, DATATYPE_FLOAT32, ALInvertedIndex);
+    } else if (var->pre_transform_type == adios_double) {
+        ALEncoderConfigure(&config.alac_config, 16, DATATYPE_FLOAT64, ALInvertedIndex);
+    } else {
+        log_error("The ALACRITY transform can index only real datatypes.\n");
+    }
+
+    int i;
+    for (i = 0; i < transform_spec->param_count; i++) {
+        const struct adios_transform_spec_kv_pair * const param = &transform_spec->params[i];
+        if (strcmp(param->key, "indexForm") == 0) {
+            if (strcasecmp(param->value, "ALCompressedInvertedIndex") == 0)
+                config.alac_config.indexForm = ALCompressedInvertedIndex;
+            else if (strcasecmp(param->value, "ALInvertedIndex") == 0)
+                config.alac_config.indexForm = ALInvertedIndex;
+        } else if (strcasecmp(param->key, "sigBits") == 0) {
+            config.alac_config.significantBits = atoi(param->value);
+        } else if (strcasecmp(param->key, "loBytes") == 0) {
+        	if (strcasecmp(param->value, "no") == 0 || strcasecmp(param->value, "false") == 0)
+        		config.has_low_order_bytes = 0;
+        	else
+        		config.has_low_order_bytes = 1;
+        } else if (strcasecmp(param->key, "origData") == 0) {
+        	if (strcasecmp(param->value, "no") == 0 || strcasecmp(param->value, "false") == 0)
+        		config.has_original_data = 0;
+        	else
+        		config.has_original_data = 1;
+        }
+    }
+
+    return config;
+}
+
+static void add_bin_layout_size_growth(
+		alac_transform_conf_t *config,
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	const int sigbytes = (config->alac_config.significantBits + 0x07) >> 3;
+
+	*constant_factor += sizeof(bin_id_t) + // Number of bins
+						sizeof(bin_offset_t); // Ending bin offset
+
+	// Computing an upper bound on the part of the metadata that depends on number of bins is hard.
+	// Since this is data dependent, we must assume worst-case data, which results in one bin per value
+	// However, there is always a maximum number of bins possible, based on the sigbits used, so after
+	// we reach that many bins, we don't need to keep adding this factor. Thus, we use a "capped linear"
+	// factor that scales linearly (one bin per value) until we reach the "cap" (the max number of bins,
+	// already set in adios_transform_alacrity_transformed_size_growth).
+	const int metadata_bytes_per_bin = 2 * sizeof(bin_offset_t);
+	const int datatype_size = adios_get_type_size(var->pre_transform_type, NULL);
+	const double metadata_bytes_per_data_bytes = (double)metadata_bytes_per_bin / datatype_size;
+
+	*capped_linear_factor += metadata_bytes_per_data_bytes; // For every value under the cap, add the corresponding number of metadata bytes
+}
+
+static void add_index_size_growth(
+		alac_transform_conf_t *config,
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
 {
-    return (uint64_t)(1.75 * orig_size);
+	const int datatype_size = adios_get_type_size(var->pre_transform_type, NULL);
+	int metadata_bytes_per_bin = 0;
+
+	*constant_factor += sizeof(ALIndexForm); // Index form
+
+	switch (config->alac_config.indexForm) {
+    case ALCompressionIndex:
+    	fprintf(stderr, "ALCompressionIndex is UNSUPPORTED in the ALACRITY transform plugin (it should not be possible to reach this error; something has gone very, very wrong)\n");
+    	abort();
+    	break;
+    case ALInvertedIndex:
+    	// No extra metadata for this index forms
+    	*linear_factor += (double)sizeof(rid_t) / datatype_size; // RIDs
+    	break;
+    case ALCompressedInvertedIndex:
+    	*constant_factor += sizeof(uint64_t) + // Ending index bin offset
+    	                    sizeof(uint64_t); // PFOR-Delta adds this much overhead to the first chunk of compressed RIDs. If there
+    	                                      // are >1 chunks in a bin, assume the compression makes up for the additional overhead
+    	metadata_bytes_per_bin += sizeof(uint64_t); // Index bin offsets
+    	metadata_bytes_per_bin += 2 * sizeof(uint64_t); // Header of first PFOR-Delta block in each bin; assume later blocks are covered by the reduced index size
+    	*linear_factor += (double)sizeof(rid_t) / datatype_size; // RIDs (assume 1x compression ratio as worst case)
+    	break;
+    case ALCompressedHybridInvertedIndex:
+    case ALCompressedSkipInvertedIndex:
+    case ALCompressedMixInvertedIndex:
+    case ALCompressedExpansionII:
+    	// All same as above, but there is a higher upper bound linear factor
+    	*constant_factor += sizeof(uint64_t) +
+    	                    sizeof(uint64_t);
+    	metadata_bytes_per_bin += sizeof(uint64_t);
+    	*linear_factor += (double)(2 * sizeof(rid_t)) / datatype_size; // RIDs (2x due to the hybrid method)
+    	break;
+    default:
+        break;
+	}
+
+	if (metadata_bytes_per_bin > 0) {
+		const double metadata_bytes_per_data_bytes = (double)metadata_bytes_per_bin / datatype_size;
+		*capped_linear_factor += metadata_bytes_per_data_bytes; // For every value under the cap, add the corresponding number of metadata bytes
+	}
+}
+
+static void add_data_size_growth(
+		alac_transform_conf_t *config,
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	const int datatype_size = adios_get_type_size(var->pre_transform_type, NULL);
+	const int insigbytes = ((datatype_size << 3) - config->alac_config.significantBits + 0x07) >> 3;
+
+	if (config->has_low_order_bytes)
+		*linear_factor += (double)insigbytes / datatype_size; // insigbytes per data value
+	if (config->has_original_data)
+		*linear_factor += 1.0; // data value per data value
+}
+
+void adios_transform_alacrity_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	alac_transform_conf_t config = parse_configuration(var, transform_spec);
+
+	// ALACRITY metadata (not counting bin layout metadata and index-specific metadata, added in below)
+	*constant_factor =
+			sizeof(global_rid_t) +													// Global RID offset
+			sizeof(partition_length_t) +                                            // Partition length
+			sizeof(char) +                                                          // Significant bytes
+			sizeof(char) +                                                          // Element size
+			sizeof(ALDatatype) +                                                    // Datatype
+			sizeof(char);															// Endianness
+
+	*linear_factor = 0; // We totally re-encode the data, so start from scratch (i.e., we aren't adding to existing data, we're replacing it)
+
+	// Some of the following metadata upper bounds are proportional to the number of bins,
+	// which is worst-case linear with number of values, but only up to the max possible bins.
+	// These bounds will all use the same capped linear cap (bytes corresponding to number of
+	// values equal to max possible bins), so compute it here, and let each function add to
+	// the capped linear factor assuming this cap is in place.
+	const uint64_t max_possible_bins = (1ULL << config.alac_config.significantBits);
+	const int datatype_size = adios_get_type_size(var->pre_transform_type, NULL);
+	*capped_linear_cap = max_possible_bins * datatype_size; // There can be at most one bin per value, so stop adding this factor after (max bins) * (bytes per value) bytes
+	*capped_linear_factor = 0;
+
+#ifdef ALACRITY_DEBUG
+#define PRINT_FACTORS(msg) fprintf(stderr, "%s: const=%llu, lin=%lf, lincap=%lf->%llu\n", (msg), *constant_factor, *linear_factor, *capped_linear_factor, *capped_linear_cap);
+	fprintf(stderr, "ALACRITY growth compute info: datatype size: %d, maxbins: %llu\n", datatype_size, max_possible_bins);
+	PRINT_FACTORS("after metadata");
+#else
+#define PRINT_FACTORS(msg) ((void)0)
+#endif
+
+	add_bin_layout_size_growth(&config, var, transform_spec, constant_factor, linear_factor, capped_linear_factor, capped_linear_cap);
+	PRINT_FACTORS("after bin layout");
+	add_index_size_growth(&config, var, transform_spec, constant_factor, linear_factor, capped_linear_factor, capped_linear_cap);
+	PRINT_FACTORS("after index");
+	add_data_size_growth(&config, var, transform_spec, constant_factor, linear_factor, capped_linear_factor, capped_linear_cap);
+	PRINT_FACTORS("after data");
+
+	// Phew!
 }
 
 int adios_transform_alacrity_apply(struct adios_file_struct *fd,
@@ -33,110 +206,39 @@ int adios_transform_alacrity_apply(struct adios_file_struct *fd,
     const uint64_t input_size = adios_transform_get_pre_transform_var_size(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 ++;
-        }
+    // Determine the ALACRITY encoder configuration to use
+    alac_transform_conf_t config = parse_configuration(var, var->transform_spec);
 
-        // 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);
-        }
-    }
+    uint32_t numElements = 0;
+    numElements = input_size / adios_get_type_size(var->pre_transform_type, NULL);
 
     // decide the output buffer
-    uint64_t output_size = 0;
+    uint64_t output_size;
     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);
+    if (config.alac_config.indexForm == ALInvertedIndex) {
+        ALEncode(&config.alac_config, input_buff, numElements, &output_partition);
+    } else if (config.alac_config.indexForm == ALCompressedInvertedIndex) {
+        config.alac_config.indexForm = ALInvertedIndex;
+        ALEncode(&config.alac_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);
+    output_size = 0;
+    output_size += ALGetMetadataSize(&output_partition.metadata);
+    output_size += ALGetIndexSize(&output_partition.index, &output_partition.metadata);
+    if (config.has_low_order_bytes)
+    	output_size += ALGetDataSize(&output_partition.data, &output_partition.metadata);
+    if (config.has_original_data)
+    	output_size += input_size;
+
+#ifdef ALACRITY_DEBUG
+    fprintf(stderr, "ALGetPartitionDataSize: %llu\n", output_size);
+#endif
 
     if (use_shared_buffer) {
         // If shared buffer is permitted, serialize to there
@@ -150,20 +252,34 @@ int adios_transform_alacrity_apply(struct adios_file_struct *fd,
     }
     *wrote_to_shared_buffer = use_shared_buffer;
 
-    memstream_t ms = memstreamInitReturn (output_buff);
-    ALSerializePartitionData (&output_partition, &ms);
+    memstream_t ms = memstreamInitReturn(output_buff);
+    ALSerializeMetadata(&output_partition.metadata, &ms);
+    ALSerializeIndex(&output_partition.index, &output_partition.metadata, &ms);
+    if (config.has_low_order_bytes)
+    	ALSerializeData(&output_partition.data, &output_partition.metadata, &ms);
+    if (config.has_original_data)
+    	memstreamAppendArray(&ms, input_buff, 1, input_size);
 
     // 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));
+    	adios_transform_alacrity_metadata alac_meta = {
+    		.meta_size     = ALGetMetadataSize(&output_partition.metadata),
+    		.index_size    = ALGetIndexSize(&output_partition.index, &output_partition.metadata),
+    		.lob_size      = (config.has_low_order_bytes) ? ALGetDataSize(&output_partition.data, &output_partition.metadata) : 0,
+    		.origdata_size = (config.has_original_data)   ? input_size                                                        : 0,
+    	};
+    	write_alacrity_transform_metadata(var->transform_metadata_len, var->transform_metadata, &alac_meta);
+    } else {
+    	adios_error_at_line(err_unspecified, __FILE__, __LINE__,
+                            "Internal error: data transform metadata buffer was not allocated "
+    			            "by the transform framework for some reason, cannot continue\n");
+    	return 0;
     }
 
     assert(output_size == ((char*)ms.ptr - (char*)ms.buf)); // Make sure we computed the output size right
 
-    ALPartitionDataDestroy (&output_partition);
-    memstreamDestroy(&ms, false);
+    ALPartitionDataDestroy(&output_partition);
+    memstreamDestroy(&ms, false /* don't free buffer, it's either our return value or the ADIOS shared buffer! */);
 
     // Wrap up, depending on buffer mode
     if (*wrote_to_shared_buffer) {
diff --git a/src/transforms/adios_transform_aplod_read.c b/src/transforms/adios_transform_aplod_read.c
index 036ece1..ae48210 100644
--- a/src/transforms/adios_transform_aplod_read.c
+++ b/src/transforms/adios_transform_aplod_read.c
@@ -4,8 +4,8 @@
 #include <assert.h>
 
 #include "util.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
 
 #ifdef APLOD
 
@@ -15,13 +15,15 @@
 #include "adios_transform_identity_read.h"
 
 #define MAX_COMPONENTS 16
+#define MAX_SEEK_SIEVE_SIZE 1048576    // The maximum number of bytes sieving is allowed to sieve over per seek
 
 typedef struct {
     int numComponents;
     int32_t components[MAX_COMPONENTS];
 } aplod_meta_t;
 
-void parse_aplod_meta(char *transform_metadata, aplod_meta_t *metaout) {
+void parse_aplod_meta(const void *transform_metadata_void, aplod_meta_t *metaout) {
+	const char *transform_metadata = (const char*)transform_metadata_void;
     transform_metadata += sizeof (uint64_t);
 
     metaout->numComponents = *(int8_t*)transform_metadata;
@@ -49,7 +51,7 @@ int adios_transform_aplod_generate_read_subrequests(adios_transform_read_request
 
     // Retrieve APLOD metadata, determine how many components to use
     aplod_meta_t aplodmeta;
-    parse_aplod_meta(reqgroup->transinfo->transform_metadata, &aplodmeta);
+    parse_aplod_meta(pg_reqgroup->transform_metadata, &aplodmeta);
 
     int numComponentsToUse;
     if (!reqgroup->read_param || strcmp(reqgroup->read_param, "") == 0)
@@ -69,12 +71,14 @@ int adios_transform_aplod_generate_read_subrequests(adios_transform_read_request
 
     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);
+    // Compute some sieving parameters to check if it makes sense
+    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;
+    const uint64_t maxSeekSize = (totalElementsInPG - sieveElemCount) * fulltypelen;
 
-        const uint64_t sieveElemCount = end_off - start_off;
+    // Determine if we should sieve or not. Current heuristic: only if using 1 component (sieving is always better in this case)
+    if (numComponentsToUse == 1 || maxSeekSize > MAX_SEEK_SIEVE_SIZE) {
+        // Don't sieve: read only necessary segments
         buf = malloc(sieveElemCount * totalComponentsSize);
 
         int numByteColsDone = 0;
@@ -90,6 +94,10 @@ int adios_transform_aplod_generate_read_subrequests(adios_transform_read_request
             numByteColsDone += aplodmeta.components[i];
         }
     } else {
+        // Sieve: read the whole PG
+        start_off = 0;
+        end_off = totalElementsInPG;
+
         // Don't sieve
         buf = malloc(totalElementsInPG * totalComponentsSize);
 
@@ -138,18 +146,18 @@ adios_datablock * adios_transform_aplod_pg_reqgroup_completed(adios_transform_re
     int32_t *componentVector = 0;
 
     aplod_meta_t aplodmeta;
-    parse_aplod_meta(reqgroup->transinfo->transform_metadata, &aplodmeta);
+    parse_aplod_meta(completed_pg_reqgroup->transform_metadata, &aplodmeta);
 
     APLODConfig_t *config;
-                                                                                                                                                                                                                                            
+
     if (reqgroup->transinfo->orig_type == adios_double) {
-        config = APLODConfigure (aplodmeta.components, aplodmeta.numComponents, APLOD_DOUBLE, APLOD_LITTLE_E);                                                                                                                              
+        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 = APLODConfigure (aplodmeta.components, aplodmeta.numComponents, APLOD_FLOAT, APLOD_LITTLE_E);
     }
 
     // config->blockLengthElts = numElements; // Bug workaround, disable chunking
-    config->blockLengthElts = (numElements >= 65536 ? 65536: numElements); 
+    config->blockLengthElts = (numElements >= 65536 ? 65536: numElements);
 
     APLODReconstructComponents  (config,
                                     numElements,
@@ -175,7 +183,7 @@ adios_datablock * adios_transform_aplod_pg_reqgroup_completed(adios_transform_re
 
     return adios_datablock_new_ragged_offset(reqgroup->transinfo->orig_type,
                                              completed_pg_reqgroup->timestep,
-                                             completed_pg_reqgroup->pg_bounds_sel,
+                                             completed_pg_reqgroup->pg_writeblock_sel,
                                              raggedOffset,
                                              decompressed_buff);
 }
diff --git a/src/transforms/adios_transform_aplod_write.c b/src/transforms/adios_transform_aplod_write.c
index 0f3f124..8690b02 100644
--- a/src/transforms/adios_transform_aplod_write.c
+++ b/src/transforms/adios_transform_aplod_write.c
@@ -2,11 +2,11 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef APLOD
 
@@ -21,9 +21,11 @@ uint16_t adios_transform_aplod_get_metadata_size(struct adios_transform_spec *tr
     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)
+void adios_transform_aplod_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
 {
-    return orig_size;
+	// Do nothing (defaults to "no transform effect on data size")
 }
 
 int adios_transform_aplod_apply(struct adios_file_struct *fd,
@@ -177,9 +179,9 @@ int adios_transform_aplod_apply(struct adios_file_struct *fd,
     // 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));
+        memcpy ((char*)var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy ((char*)var->transform_metadata + sizeof (uint64_t), &numComponents, sizeof (numComponents));
+        memcpy ((char*)var->transform_metadata + sizeof (uint64_t) + sizeof (numComponents), componentVector, numComponents * sizeof (int32_t));
 
     }
 
diff --git a/src/transforms/adios_transform_bzip2_read.c b/src/transforms/adios_transform_bzip2_read.c
index dc2017f..612921f 100755
--- a/src/transforms/adios_transform_bzip2_read.c
+++ b/src/transforms/adios_transform_bzip2_read.c
@@ -4,8 +4,8 @@
 #include <assert.h>
 #include <limits.h>
 #include "util.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
 
 #ifdef BZIP2
 
@@ -64,8 +64,8 @@ adios_datablock * adios_transform_bzip2_pg_reqgroup_completed(adios_transform_re
     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_meta = *((uint64_t*)completed_pg_reqgroup->transform_metadata);
+    char compress_ok = *((char*)(completed_pg_reqgroup->transform_metadata + sizeof(uint64_t)));
 
     uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
     int d = 0;
@@ -100,10 +100,7 @@ adios_datablock * adios_transform_bzip2_pg_reqgroup_completed(adios_transform_re
         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);
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, uncompressed_data);
 }
 
 adios_datablock * adios_transform_bzip2_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
diff --git a/src/transforms/adios_transform_bzip2_write.c b/src/transforms/adios_transform_bzip2_write.c
index 5d9d90d..6c8729a 100755
--- a/src/transforms/adios_transform_bzip2_write.c
+++ b/src/transforms/adios_transform_bzip2_write.c
@@ -4,11 +4,11 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef BZIP2
 
@@ -47,9 +47,11 @@ uint16_t adios_transform_bzip2_get_metadata_size(struct adios_transform_spec *tr
     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)
+void adios_transform_bzip2_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
 {
-    return (orig_size);
+	// Do nothing (defaults to "no transform effect on data size")
 }
 
 int adios_transform_bzip2_apply(struct adios_file_struct *fd,
@@ -84,7 +86,7 @@ int adios_transform_bzip2_apply(struct adios_file_struct *fd,
 
 
     // decide the output buffer
-    uint64_t output_size = adios_transform_bzip2_calc_vars_transformed_size(adios_transform_bzip2, input_size, 1);
+    uint64_t output_size = input_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
@@ -139,8 +141,8 @@ int adios_transform_bzip2_apply(struct adios_file_struct *fd,
     // 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));
+        memcpy((char*)var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy((char*)var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
     }
 
     *transformed_len = actual_output_size; // Return the size of the data buffer
diff --git a/src/transforms/adios_transform_identity_read.c b/src/transforms/adios_transform_identity_read.c
index 6601e75..3c163c1 100644
--- a/src/transforms/adios_transform_identity_read.c
+++ b/src/transforms/adios_transform_identity_read.c
@@ -12,15 +12,16 @@
 #include <stdint.h>
 #include <assert.h>
 #include "util.h"
-#include "adios_internals.h" // adios_get_type_size()
-#include "adios_subvolume.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/adios_internals.h" // adios_get_type_size()
+#include "core/adios_subvolume.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/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
+#define FREE(x) { if (x) { free(x); x = NULL; } }
 
 int adios_transform_identity_is_implemented (void) {return 1;}
 
@@ -32,6 +33,17 @@ void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_s
 
     uint64_t start_off, end_off; // Start/end byte offsets to read between
     switch (intersect_sel->type) {
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+    	if (intersect_sel->u.block.is_sub_pg_selection) {
+    		start_off = intersect_sel->u.block.element_offset;
+    		end_off = intersect_sel->u.block.element_offset + intersect_sel->u.block.nelements;
+    	} else {
+    		start_off = 0;
+    		end_off = compute_volume(pgbb->ndim, pgbb->count);
+    	}
+   		break;
+    }
     case ADIOS_SELECTION_BOUNDINGBOX:
     {
         const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &intersect_sel->u.bb;
@@ -67,9 +79,8 @@ void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_s
         break;
     }
 
-    case ADIOS_SELECTION_WRITEBLOCK:
     case ADIOS_SELECTION_AUTO:
-        /* These are unsupported */
+        /* Unsupported */
         break;
     }
 
@@ -77,30 +88,101 @@ void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_s
     *end_off_ptr = end_off;
 }
 
-int adios_transform_identity_generate_read_subrequests(adios_transform_read_request *reqgroup,
-                                                       adios_transform_pg_read_request *pg_reqgroup) {
+int adios_transform_generate_read_subrequests_over_original_data(
+		uint64_t original_data_offset_in_pg,
+		int should_sieve_points,
+		adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *pg_reqgroup)
+{
+    int is_point_selection = (pg_reqgroup->pg_intersection_sel->type == ADIOS_SELECTION_POINTS);
 
-    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);
+    if (!is_point_selection || should_sieve_points) {
+        pg_reqgroup->transform_internal = NULL; // Is sieving
+
+        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
+        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);
+        // 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, original_data_offset_in_pg + 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;
+        // 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);
+        // Append the raw read request
+        adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    } else {
+        const int ndim = pg_reqgroup->pg_intersection_sel->u.points.ndim;
+        const uint64_t *points = pg_reqgroup->pg_intersection_sel->u.points.points;
+
+        const int datum_size = adios_get_type_size(reqgroup->transinfo->orig_type, NULL); // Get the data type size
+        const int npoints = pg_reqgroup->pg_intersection_sel->u.points.npoints;
+        const uint64_t bufsize = npoints * datum_size;
+
+        char *buf = malloc(bufsize);
+
+        int p;
+        for (p = 0; p < npoints; p++) {
+            const uint64_t *point = &points[p * ndim];
+            const uint64_t offset = compute_linear_offset_in_volume(ndim, point, pg_reqgroup->pg_bounds_sel->u.bb.count);
+
+            adios_transform_raw_read_request *subreq =
+                    adios_transform_raw_read_request_new_byte_segment(pg_reqgroup, original_data_offset_in_pg + offset * datum_size, 1, buf + p * datum_size);
+            adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+        }
+
+        pg_reqgroup->transform_internal = buf;
+    }
 
     return 0;
 }
 
+
+adios_datablock * adios_transform_pg_reqgroup_completed_over_original_data(
+        adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    adios_datablock *db;
+    if (completed_pg_reqgroup->transform_internal) {
+        void *data = completed_pg_reqgroup->transform_internal;
+
+        db = adios_datablock_new(reqgroup->transinfo->orig_type,
+                completed_pg_reqgroup->timestep,
+                completed_pg_reqgroup->pg_intersection_sel,
+                data);
+
+        FREE(completed_pg_reqgroup->transform_internal);
+    } else {
+        uint64_t ragged_offset = *(uint64_t*)completed_pg_reqgroup->subreqs->transform_internal;
+
+        // Transfer ownership of the data buffer
+        void *pg_data = completed_pg_reqgroup->subreqs->data;
+        completed_pg_reqgroup->subreqs->data = NULL;
+
+        db = adios_datablock_new_ragged_offset(reqgroup->transinfo->orig_type,
+                completed_pg_reqgroup->timestep,
+                completed_pg_reqgroup->pg_writeblock_sel,
+                ragged_offset,
+                pg_data);
+
+        FREE(completed_pg_reqgroup->subreqs->transform_internal);
+    }
+
+    return db;
+}
+
+int adios_transform_identity_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                       adios_transform_pg_read_request *pg_reqgroup) {
+
+    int sieve_points = (reqgroup->read_param && strcmp(reqgroup->read_param, "sieve") == 0);
+    return adios_transform_generate_read_subrequests_over_original_data(0, sieve_points, reqgroup, pg_reqgroup);
+}
+
 // Do nothing for individual subrequest
 adios_datablock * adios_transform_identity_subrequest_completed(
                     adios_transform_read_request *reqgroup,
@@ -112,18 +194,7 @@ adios_datablock * adios_transform_identity_subrequest_completed(
 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);
+	return adios_transform_pg_reqgroup_completed_over_original_data(reqgroup, completed_pg_reqgroup);
 }
 
 adios_datablock * adios_transform_identity_reqgroup_completed(
diff --git a/src/transforms/adios_transform_identity_read.h b/src/transforms/adios_transform_identity_read.h
index 03a2b28..1c9ab3a 100644
--- a/src/transforms/adios_transform_identity_read.h
+++ b/src/transforms/adios_transform_identity_read.h
@@ -24,4 +24,35 @@ void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_s
                                               const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgbb,
                                               uint64_t *start_off_ptr, uint64_t *end_off_ptr);
 
+// This function is shared with ALACRITY, and is available to aid any data transform that stores
+// the original data unchanged as part of the transformed data.
+/*
+ * Schedules raw read requests over a copy of the user's original data. This function is expected
+ * to be paired with a calls to adios_transform_handle_pg_reqgroup_completed().
+ *
+ * This original data is assumed to be contiguous at some location within the PG (specified via
+ * original_data_offset_in_pg). If should_sieve_points is true, point selections will be serviced
+ * using a single read request, rather than reading each point individually.
+ *
+ * Note: in addition to submitting adios_transform_raw_read_requests, this function also requires
+ * full use of the pg_reqgroup->transform_internal field. If the calling data transform needs this
+ * field, it should be wrapped after calling this function, then restored before calling
+ * adios_transform_handle_pg_reqgroup_completed().
+ */
+int adios_transform_generate_read_subrequests_over_original_data(
+		uint64_t original_data_offset_in_pg,
+		int should_sieve_points,
+		adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *pg_reqgroup);
+
+/*
+ * Processes raw read requests submitted earlier by
+ * adios_transform_generate_read_subrequests_over_original_data(). Should be called on every
+ * completed raw read request that was scheduled by
+ * adios_transform_generate_read_subrequests_over_original_data().
+ */
+adios_datablock * adios_transform_pg_reqgroup_completed_over_original_data(
+        adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *completed_pg_reqgroup);
+
 #endif /* ADIOS_TRANSFORM_IDENTITY_READ_H_ */
diff --git a/src/transforms/adios_transform_identity_write.c b/src/transforms/adios_transform_identity_write.c
index 7cbaa04..6fa6d7b 100644
--- a/src/transforms/adios_transform_identity_write.c
+++ b/src/transforms/adios_transform_identity_write.c
@@ -11,18 +11,22 @@
 #include <stdint.h>
 #include <assert.h>
 
-#include "adios_internals.h"
-#include "adios_transforms_write.h"
-#include "adios_transforms_hooks_write.h"
+#include "core/adios_internals.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/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;
+void adios_transform_identity_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	// Do nothing (defaults to "no transform effect on data 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
diff --git a/src/transforms/adios_transform_isobar_read.c b/src/transforms/adios_transform_isobar_read.c
index d15b1b0..844fbe5 100755
--- a/src/transforms/adios_transform_isobar_read.c
+++ b/src/transforms/adios_transform_isobar_read.c
@@ -4,8 +4,8 @@
 #include <assert.h>
 
 #include "util.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
 
 #ifdef ISOBAR
 
@@ -78,8 +78,8 @@ adios_datablock * adios_transform_isobar_pg_reqgroup_completed(adios_transform_r
     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_meta = *((uint64_t*)completed_pg_reqgroup->transform_metadata);
+    char compress_ok = *((char*)(completed_pg_reqgroup->transform_metadata + sizeof(uint64_t)));
 
     uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
     int d = 0;
@@ -113,10 +113,7 @@ adios_datablock * adios_transform_isobar_pg_reqgroup_completed(adios_transform_r
         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);
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, uncompressed_data);
 }
 
 adios_datablock * adios_transform_isobar_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
diff --git a/src/transforms/adios_transform_isobar_write.c b/src/transforms/adios_transform_isobar_write.c
index 945d2f3..7b6081d 100755
--- a/src/transforms/adios_transform_isobar_write.c
+++ b/src/transforms/adios_transform_isobar_write.c
@@ -3,11 +3,11 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef ISOBAR
 
@@ -80,9 +80,11 @@ uint16_t adios_transform_isobar_get_metadata_size(struct adios_transform_spec *t
     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)
+void adios_transform_isobar_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
 {
-    return orig_size;
+	// Do nothing (defaults to "no transform effect on data size")
 }
 
 int adios_transform_isobar_apply(struct adios_file_struct *fd,
@@ -117,7 +119,7 @@ int adios_transform_isobar_apply(struct adios_file_struct *fd,
     }
 
     // decide the output buffer
-    uint64_t output_size = adios_transform_isobar_calc_vars_transformed_size(adios_transform_isobar, input_size, 1); 
+    uint64_t output_size = input_size; //adios_transform_isobar_calc_vars_transformed_size(adios_transform_isobar, input_size, 1);
 
     void* output_buff = NULL;
 
@@ -174,8 +176,8 @@ int adios_transform_isobar_apply(struct adios_file_struct *fd,
     // 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));
+        memcpy((char*)var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy((char*)var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
     }
 
     *transformed_len = actual_output_size; // Return the size of the data buffer
diff --git a/src/transforms/adios_transform_szip_read.c b/src/transforms/adios_transform_szip_read.c
index fdd7473..8b3ed0a 100644
--- a/src/transforms/adios_transform_szip_read.c
+++ b/src/transforms/adios_transform_szip_read.c
@@ -2,8 +2,8 @@
 #include <stdint.h>
 #include <assert.h>
 #include "util.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
 
 #ifdef SZIP
 
@@ -77,10 +77,7 @@ adios_datablock * adios_transform_szip_pg_reqgroup_completed(adios_transform_rea
         return NULL;
     }
 
-    return adios_datablock_new(reqgroup->transinfo->orig_type,
-                               completed_pg_reqgroup->timestep,
-                               completed_pg_reqgroup->pg_bounds_sel,
-                               orig_buff);
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, orig_buff);
 }
 
 adios_datablock * adios_transform_szip_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
diff --git a/src/transforms/adios_transform_szip_write.c b/src/transforms/adios_transform_szip_write.c
index c02912f..f82855e 100755
--- a/src/transforms/adios_transform_szip_write.c
+++ b/src/transforms/adios_transform_szip_write.c
@@ -3,11 +3,11 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef SZIP
 
@@ -49,8 +49,11 @@ uint16_t adios_transform_szip_get_metadata_size(struct adios_transform_spec *tra
     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;
+void adios_transform_szip_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	// Do nothing (defaults to "no transform effect on data size")
 }
 
 int adios_transform_szip_apply(struct adios_file_struct *fd,
@@ -64,7 +67,7 @@ int adios_transform_szip_apply(struct adios_file_struct *fd,
     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);
+    uint64_t output_size = input_size; //adios_transform_szip_calc_vars_transformed_size(adios_transform_szip, input_size, 1);
     void* output_buff = NULL;
 
     if (use_shared_buffer) {
diff --git a/src/transforms/adios_transform_alacrity_read.c b/src/transforms/adios_transform_template_read.c
similarity index 50%
copy from src/transforms/adios_transform_alacrity_read.c
copy to src/transforms/adios_transform_template_read.c
index 9b83c3b..90c690c 100644
--- a/src/transforms/adios_transform_alacrity_read.c
+++ b/src/transforms/adios_transform_template_read.c
@@ -7,14 +7,12 @@
 #include "adios_transforms_hooks_read.h"
 #include "adios_transforms_reqgroup.h"
 
-#ifdef ALACRITY
+#ifdef TEMPLATE
 
-#include "alacrity.h"
+int adios_transform_template_is_implemented (void) {return 1;}
 
-int adios_transform_alacrity_is_implemented (void) {return 1;}
-
-int adios_transform_alacrity_generate_read_subrequests(adios_transform_read_request *reqgroup,
-                                                    adios_transform_pg_read_request *pg_reqgroup)
+int adios_transform_template_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);
@@ -23,7 +21,7 @@ int adios_transform_alacrity_generate_read_subrequests(adios_transform_read_requ
 }
 
 // Do nothing for individual subrequest
-adios_datablock * adios_transform_alacrity_subrequest_completed(adios_transform_read_request *reqgroup,
+adios_datablock * adios_transform_template_subrequest_completed(adios_transform_read_request *reqgroup,
                                                                 adios_transform_pg_read_request *pg_reqgroup,
                                                                 adios_transform_raw_read_request *completed_subreq)
 {
@@ -32,10 +30,10 @@ adios_datablock * adios_transform_alacrity_subrequest_completed(adios_transform_
 
 
 
-adios_datablock * adios_transform_alacrity_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+adios_datablock * adios_transform_template_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;
+    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, "");
@@ -45,29 +43,13 @@ adios_datablock * adios_transform_alacrity_pg_reqgroup_completed(adios_transform
 
     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);
+    // Decompress into orig_buff
 
-    return adios_datablock_new(reqgroup->transinfo->orig_type,
-                               completed_pg_reqgroup->timestep,
-                               completed_pg_reqgroup->pg_bounds_sel,
-                               orig_buff);
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, orig_buff);
 }
 
-adios_datablock * adios_transform_alacrity_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+// Do nothing for the full read request complete (typical)
+adios_datablock * adios_transform_template_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
 {
     return NULL;
 }
@@ -75,7 +57,7 @@ adios_datablock * adios_transform_alacrity_reqgroup_completed(adios_transform_re
 
 #else
 
-DECLARE_TRANSFORM_READ_METHOD_UNIMPL(alacrity);
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(zlib);
 
 #endif
 
diff --git a/src/transforms/adios_transform_template_write.c b/src/transforms/adios_transform_template_write.c
new file mode 100644
index 0000000..8740ff2
--- /dev/null
+++ b/src/transforms/adios_transform_template_write.c
@@ -0,0 +1,72 @@
+#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 TEMPLATE
+
+uint16_t adios_transform_template_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return 0; // Set amount of transform-internal metadata space to allocate
+}
+
+void adios_transform_template_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+	// Set growth factors here (or return immediately to default to "no transform effect on data size")
+}
+
+int adios_transform_template_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(var);
+    const void *input_buff = var->data;
+
+    // decide the output buffer
+    uint64_t output_size = /* Compute how much output size we need */;
+    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;
+
+    // Do transform from input_buff into output_buff, and update output_size to the true output size
+
+    // 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(template)
+
+#endif
+
diff --git a/src/transforms/adios_transform_zlib_read.c b/src/transforms/adios_transform_zlib_read.c
index 30ec644..b42c69c 100755
--- a/src/transforms/adios_transform_zlib_read.c
+++ b/src/transforms/adios_transform_zlib_read.c
@@ -3,11 +3,11 @@
 #include <stdio.h>
 #include <assert.h>
 
-#include "util.h"
-#include "adios_logger.h"
-#include "adios_transforms_hooks_read.h"
-#include "adios_transforms_reqgroup.h"
-#include "adios_internals.h" // adios_get_type_size()
+#include "core/util.h"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/adios_internals.h" // adios_get_type_size()
 
 #ifdef ZLIB
 
@@ -62,8 +62,8 @@ adios_datablock * adios_transform_zlib_pg_reqgroup_completed(adios_transform_rea
     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_meta = *((uint64_t*)completed_pg_reqgroup->transform_metadata);
+    char compress_ok = *((char*)(completed_pg_reqgroup->transform_metadata + sizeof(uint64_t)));
 
     uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
     int d = 0;
@@ -97,10 +97,7 @@ adios_datablock * adios_transform_zlib_pg_reqgroup_completed(adios_transform_rea
         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);
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, uncompressed_data);
 }
 
 adios_datablock * adios_transform_zlib_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
diff --git a/src/transforms/adios_transform_zlib_write.c b/src/transforms/adios_transform_zlib_write.c
index cfcf327..ab20798 100755
--- a/src/transforms/adios_transform_zlib_write.c
+++ b/src/transforms/adios_transform_zlib_write.c
@@ -3,11 +3,11 @@
 #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"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
 
 #ifdef ZLIB
 
@@ -63,9 +63,11 @@ uint16_t adios_transform_zlib_get_metadata_size(struct adios_transform_spec *tra
     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)
+void adios_transform_zlib_transformed_size_growth(
+		const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+		uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
 {
-    return (orig_size);
+	// Do nothing (defaults to "no transform effect on data size")
 }
 
 int adios_transform_zlib_apply(struct adios_file_struct *fd,
@@ -160,8 +162,8 @@ int adios_transform_zlib_apply(struct adios_file_struct *fd,
     // 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));
+        memcpy((char*)var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy((char*)var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
     }
 
     *transformed_len = actual_output_size; // Return the size of the data buffer
diff --git a/src/write/adios_dataspaces.c b/src/write/adios_dataspaces.c
index 7cce438..061393a 100644
--- a/src/write/adios_dataspaces.c
+++ b/src/write/adios_dataspaces.c
@@ -28,15 +28,13 @@
 
 static int adios_dataspaces_initialized = 0;
 #define MAX_DS_NAMELEN 128
-#define MAX_NUM_OF_FILES 20
 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; // versioning, start from 0
-};
+// count the number of inits/finalizes (one per adios group using this method
+static unsigned int number_of_inits = 0; 
 
+// Save data for each adios group using this method (multiple ones may exist)
 struct adios_ds_data_struct
 {
     int rank;   // dataspaces rank or MPI rank if MPI is available
@@ -47,54 +45,79 @@ struct adios_ds_data_struct
     MPI_Comm mpi_comm; // for use in open..close
     MPI_Comm mpi_comm_init; // for use in init/finalize
 #endif
-    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)
-    int  mpi_ranks[MAX_NUM_OF_FILES];   // mpi rank of current process for each written file (needed at finalize)
-    struct adios_dspaces_file_info file_info[MAX_NUM_OF_FILES];
 };
 
-static int init_dspaces_file_info(struct adios_ds_data_struct *md)
-{
-    int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        md->file_info[i].name = NULL;
-        md->file_info[i].time_index = 0;
-    }
-}
+/**********************************************************************************
+* Functions to manage the set of "files" or streams opened for all ADIOS groups
+* We store all names (with version info, and responsible "rank 0" master process id
+* to be used in adios_dataspaces_finalize().
+**********************************************************************************/
+#define MAX_NUM_OF_STREAMS 20
+struct adios_dspaces_stream_info {
+    char *name;         // file name passed in adios_open()
+    int  time_index;    // versioning, start from 0
+    int  iam_rank0;     // 1: current process has been rank 0 for this stream
+                        //    rank 0 of communicator for this file does extra work in finalize
+};
+static struct adios_dspaces_stream_info stream_info[MAX_NUM_OF_STREAMS];
+static int  num_of_streams = 0; // how many files do we have with this method (in total for entire run)
+                                // i.e. this variable never decreases
 
-static void free_dspaces_file_info(struct adios_ds_data_struct *md)
+static void free_dspaces_stream_info()
 {
     int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name) {
-            free(md->file_info[i].name);
+    struct adios_dspaces_stream_info *info;
+    for (i = 0; i < num_of_streams; i++) {
+        info = &stream_info[i];
+        if (info->name) {
+            free(info->name);
         }
+        info->name = NULL;
+        info->time_index = -1; // time_index (dataspaces versioning) starts from 0
+        info->iam_rank0 = 0;
     }
-
     return;
 }
 
-static struct adios_dspaces_file_info* lookup_dspaces_file_info(struct adios_ds_data_struct *md, const char* fname)
+static struct adios_dspaces_stream_info* lookup_dspaces_stream_info(const char* fname)
 {
     int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name != NULL &&
-            strcmp(md->file_info[i].name, fname) == 0) {
-            return &md->file_info[i];
+    // search from last to first
+    for (i = num_of_streams-1; i >= 0; i--) 
+    {
+        if (stream_info[i].name != NULL &&
+            strcmp(stream_info[i].name, fname) == 0) 
+        {
+            log_debug ("Stream %s is going to be continued... num_of_streams=%d\n",
+                fname, num_of_streams);
+            return &stream_info[i];
         }
     }
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name == NULL) {
-            md->file_info[i].name = malloc(strlen(fname)+1);
-            strcpy(md->file_info[i].name, fname);
-            return &md->file_info[i];
-        }
+    // not found, add new opened stream to list
+    if (num_of_streams < MAX_NUM_OF_STREAMS) 
+    {
+        log_debug ("New stream %s added.  num_of_streams=%d\n",
+                fname, num_of_streams);
+        i = num_of_streams;
+        num_of_streams++;
+        stream_info[i].name = strdup(fname);
+        stream_info[i].time_index = -1;
+        return &stream_info[i];
+    }
+    else
+    {
+        // we cannot add more
+        adios_error (err_too_many_files, 
+                     "ERROR: Max %d different files can be written by one application "
+                     "using the same ADIOS group when using the DATASPACES method.\n",
+                     MAX_NUM_OF_STREAMS);
     }
 
     return NULL;
 }
 
+
+
 static int connect_to_dspaces (struct adios_ds_data_struct * md, MPI_Comm comm)
 {
     int ret = 0;
@@ -124,6 +147,8 @@ static int connect_to_dspaces (struct adios_ds_data_struct * md, MPI_Comm comm)
 #if ! HAVE_MPI
         dspaces_rank (&(md->rank));
         dspaces_peers (&(md->peers));
+#else
+        md->peers = num_peers;
 #endif
 
         log_debug ("adios_dataspaces: rank=%d connected to DATASPACES: peers=%d\n", md->rank, md->peers);        
@@ -134,6 +159,7 @@ static int connect_to_dspaces (struct adios_ds_data_struct * md, MPI_Comm comm)
 }
 
 
+/* Initialize method, called once per adios group, not once per program run */
 void adios_dataspaces_init (const PairStruct * parameters,
                      struct adios_method_struct * method
                      )
@@ -158,7 +184,6 @@ void adios_dataspaces_init (const PairStruct * parameters,
     md->mpi_comm = MPI_COMM_NULL;
     md->mpi_comm_init = method->init_comm;
 #endif
-    md->num_of_files = 0;
 
     // process user parameters
     const PairStruct *p = parameters;
@@ -182,11 +207,9 @@ void adios_dataspaces_init (const PairStruct * parameters,
     }
 
 
-    init_dspaces_file_info(md);
     connect_to_dspaces (md, method->init_comm);
-
-    log_info ("adios_dataspaces_init: done\n");
-   
+    number_of_inits++;
+    log_info ("adios_dataspaces_init: called the %d. time\n", number_of_inits);
 }
 
 
@@ -199,7 +222,22 @@ int adios_dataspaces_open (struct adios_file_struct * fd,
     int ret = 0;
     struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
                                                 method->method_data;
-    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(md,fd->name);
+    if (fd->mode == adios_mode_read) 
+    {
+        adios_error (err_operation_not_supported, 
+                     "DATASPACES transport method does not support old adios_read() calls. "
+                     "Use the ADIOS read API and it's DATASPACES method.\n");
+        return adios_errno;
+    }
+
+    struct adios_dspaces_stream_info *info = lookup_dspaces_stream_info(fd->name);
+    if (!info) {
+        return adios_errno;
+    }
+
+    /* Increment the time index, start with 0. Not good to increment in close, because 
+     * finalize needs the same time_index as the last writing cycle */
+    info->time_index++;
     log_info ("adios_dataspaces_open: open %s, mode=%d, time_index=%d \n",
                         fd->name, fd->mode, info->time_index);
 
@@ -211,6 +249,8 @@ int adios_dataspaces_open (struct adios_file_struct * fd,
     MPI_Comm_size (md->mpi_comm, &(md->peers));
 #endif
 
+    info->iam_rank0 = (md->rank == 0); 
+
     // connect to DATASPACES at the very first adios_open(), disconnect in adios_finalize()
     // connect only if the READ API has not connected yet
     /*
@@ -219,16 +259,9 @@ int adios_dataspaces_open (struct adios_file_struct * fd,
         return ret;
     */
 
-    if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
-    {
-        log_debug ("adios_dataspaces_open: rank=%d call write lock...\n", md->rank);        
-        dspaces_lock_on_write (fd->name, &md->mpi_comm);  
-        log_debug ("adios_dataspaces_open: rank=%d got write lock\n", md->rank);        
-    }
-    else if (fd->mode == adios_mode_read)
-    {
-        dspaces_lock_on_read (fd->name, &md->mpi_comm);
-    } 
+    log_debug ("adios_dataspaces_open: rank=%d call write lock...\n", md->rank);        
+    dspaces_lock_on_write (fd->name, &md->mpi_comm);  
+    log_debug ("adios_dataspaces_open: rank=%d got write lock\n", md->rank);        
   
     return ret;
 }
@@ -258,10 +291,14 @@ void adios_dataspaces_write (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
+    if (fd->mode == adios_mode_read) {
+        return;
+    }
+
     struct adios_ds_data_struct *md = (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(md,fd->name);
+    struct adios_dspaces_stream_info *info = lookup_dspaces_stream_info(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
@@ -815,136 +852,106 @@ void adios_dataspaces_close (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
+    if (fd->mode == adios_mode_read) {
+        return;
+    }
     struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
                                                 method->method_data;
     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(md,fd->name);
+    struct adios_dspaces_stream_info *info = lookup_dspaces_stream_info(fd->name);
     uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
     int didx[MAX_DS_NDIM]; // for reordering DS dimensions
     int elemsize, ndim;
     unsigned int version;
 
-    if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
-    {
-        // finalize variable info in fd buffer, next we call build_index
-        while (a) {
-            a->write_offset = 1; // only attributes with !=0 offset will be included in build index
-            a=a->next;
-        }
+    // finalize variable info in fd buffer, next we call build_index
+    while (a) {
+        a->write_offset = 1; // only attributes with !=0 offset will be included in build index
+        a=a->next;
+    }
 
-        //adios_write_close_vars_v1 (fd);
-        /* Gather var/attr indices from all processes to rank 0 */
-        adios_dataspaces_gather_indices (fd, method, index);
+    //adios_write_close_vars_v1 (fd);
+    /* Gather var/attr indices from all processes to rank 0 */
+    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
-        MPI_Barrier (md->mpi_comm); 
+    // make sure all processes have finished putting data to the space 
+    // before we put metadata from rank 0
+    MPI_Barrier (md->mpi_comm); 
 
-        if (md->rank == 0) {
+    if (md->rank == 0) {
 
-            /* Write two adios specific variables with the name of the file and name of the group into the space */
-            /* ADIOS Read API fopen() checks these variables to see if writing already happened */
+        /* Write two adios specific variables with the name of the file and name of the group into the space */
+        /* ADIOS Read API fopen() checks these variables to see if writing already happened */
 #ifdef DATASPACES_NO_VERSIONING
-            version = 0;              /* Update/overwrite data in DataSpaces */
+        version = 0;              /* Update/overwrite data in DataSpaces */
 #else
-            version = info->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, index, 
-                                   &indexbuf, &indexlen, &nvars, &nattrs);
-
-            
-            /* Put GROUP at fn/gn header into space */
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "GROUP@%s/%s", fd->name, fd->group->name);
-            log_debug ("%s: put %s buflen=%d (bytes) into space\n", __func__, ds_var_name, indexlen);
-            elemsize = 1; ndim = 1;
-            lb[0] = 0; ub[0] = indexlen-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server(); // define 1D global data domain: (ub[0]-lb[0]+1)* number of dataspaces servers
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, indexbuf);
-            free (indexbuf);
-
-            /* Create and put FILE at fn header into space */
-            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 (info->time_index, nvars, nattrs, indexlen,
-                          fd->group->name, &file_info_buf, &file_info_buf_len);
-            log_debug ("%s: put %s buflen=%d (bytes) time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
+        /* Make metadata from indices */
+        char * indexbuf;
+        int    indexlen;
+        int    nvars, nattrs;
+        ds_pack_group_info (fd, method, index, 
+                &indexbuf, &indexlen, &nvars, &nattrs);
+
+
+        /* Put GROUP at fn/gn header into space */
+        snprintf(ds_var_name, MAX_DS_NAMELEN, "GROUP@%s/%s", fd->name, fd->group->name);
+        log_debug ("%s: put %s buflen=%d (bytes) into space\n", __func__, ds_var_name, indexlen);
+        elemsize = 1; ndim = 1;
+        lb[0] = 0; ub[0] = indexlen-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server(); // define 1D global data domain: (ub[0]-lb[0]+1)* number of dataspaces servers
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, indexbuf);
+        free (indexbuf);
+
+        /* Create and put FILE at fn header into space */
+        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 (info->time_index, nvars, nattrs, indexlen,
+                fd->group->name, &file_info_buf, &file_info_buf_len);
+        log_debug ("%s: put %s buflen=%d (bytes) 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), 
                 *(int*)(file_info_buf+8), *(int*)(file_info_buf+12),
                 *(int*)(file_info_buf+16), *(int*)(file_info_buf+20),
                 file_info_buf+24);
-            dspaces_put_sync(); //wait on previous put to finish
-            elemsize = 1; ndim = 1;
-            lb[0] = 0; ub[0] = file_info_buf_len-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, file_info_buf);
-
-            /* Create and put VERSION at fn version info into space */
-            int version_buf[2] = {version, 0}; /* last version put in space; not terminated */
-            int version_buf_len = 2; 
-            snprintf (ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", fd->name);
-            log_debug ("%s: put %s buf= [%d,%d] buflen=%d (integers) into space\n", 
-                       __func__, ds_var_name, version_buf[0], version_buf[1], version_buf_len);
-            dspaces_put_sync(); //wait on previous put to finish
-            elemsize = sizeof(int); ndim = 1;
-            lb[0] = 0; ub[0] = version_buf_len-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, version_buf);
-            dspaces_put_sync(); //wait on previous put to finish
-            
-        }
-
-        // remember this filename and its version for finalize
-        int i;
-        for (i=0; i<md->num_of_files; i++) {
-            if (!strcmp(fd->name, md->fnames[i]))
-                break;
-        }
-        if (i == md->num_of_files) {
-            if (md->num_of_files < MAX_NUM_OF_FILES) {
-                md->fnames[ md->num_of_files ] = strdup(fd->name);
-                md->num_of_files++;
-            } else {
-                log_error ("%s: Max %d files can be written by one application "
-                        "using the DATASPACES method\n",
-                        __func__, MAX_NUM_OF_FILES);
-            }
-        }
-        if (i < md->num_of_files) {
-            md->fversions[i] = version;
-            md->mpi_ranks[i] = md->rank;
-        }
-
-
-        // free allocated index lists
-        adios_clear_index_v1 (index);
-        adios_free_index_v1 (index);
+        dspaces_put_sync(); //wait on previous put to finish
+        elemsize = 1; ndim = 1;
+        lb[0] = 0; ub[0] = file_info_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, file_info_buf);
+
+        /* Create and put VERSION at fn version info into space */
+        int version_buf[2] = {version, 0}; /* last version put in space; not terminated */
+        int version_buf_len = 2; 
+        snprintf (ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", fd->name);
+        log_debug ("%s: put %s buf= [%d,%d] buflen=%d (integers) into space\n", 
+                __func__, ds_var_name, version_buf[0], version_buf[1], version_buf_len);
+        dspaces_put_sync(); //wait on previous put to finish
+        elemsize = sizeof(int); ndim = 1;
+        lb[0] = 0; ub[0] = version_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, version_buf);
+        dspaces_put_sync(); //wait on previous put to finish
 
-        // rank=0 may be in put_sync when others call unlock, which is a global op
-        MPI_Barrier (md->mpi_comm); 
-        //log_debug("%s: call dspaces_put_sync()\n", __func__);
-        //dspaces_put_sync();
-        log_debug("%s: call dspaces_unlock_on_write(%s)\n", __func__, fd->name);
-        dspaces_unlock_on_write(fd->name, &md->mpi_comm);
     }
-    else if( fd->mode == adios_mode_read )
-    {
-        dspaces_unlock_on_read(fd->name, &md->mpi_comm);
-    } 
 
-    /* Increment the time index */
-    info->time_index++;
+    // free allocated index lists
+    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 (md->mpi_comm); 
+    //log_debug("%s: call dspaces_put_sync()\n", __func__);
+    //dspaces_put_sync();
+    log_debug("%s: call dspaces_unlock_on_write(%s)\n", __func__, fd->name);
+    dspaces_unlock_on_write(fd->name, &md->mpi_comm);
 
     log_info ("%s: exit\n", __func__);
 }
@@ -953,55 +960,65 @@ void adios_dataspaces_finalize (int mype, struct adios_method_struct * method)
 {
     struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
         method->method_data;
+    struct adios_dspaces_stream_info *info;
     int i;
     char ds_var_name[MAX_DS_NAMELEN];
     uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
     int elemsize, ndim;
-    int value[2] = {0, 1}; // integer to be written to space (terminated=1)
-
-    free_dspaces_file_info(md);
-
-    // tell the readers which files are finalized
-    for (i=0; i<md->num_of_files; i++) {
-        /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
-        if (md->mpi_ranks[i] == 0) {
-            MPI_Comm mpi_comm = MPI_COMM_SELF;
-            log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, md->fnames[i], mype);
-            dspaces_lock_on_write(md->fnames[i], &mpi_comm); // lock is global operation in DataSpaces
-
-            value[0] = md->fversions[i];
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", md->fnames[i]);
-            log_debug ("%s: update %s in the space [%d, %d]\n", 
-                    __func__, ds_var_name, value[0], value[1] );
-            elemsize = sizeof(int); ndim = 1;
-            lb[0] = 0; ub[0] = 1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, &value); 
-            log_debug("%s: call dspaces_put_sync()\n", __func__);
-            dspaces_put_sync();
-
-            log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, md->fnames[i], mype);
-            dspaces_unlock_on_write(md->fnames[i], &mpi_comm);
-        }
-        free (md->fnames[i]);
-    }
+    int value[2] = {0, 1}; // integer to be written to space (value[1]=terminated=1)
 
-    // disconnect from dataspaces if we are connected from writer but not anymore from reader
-    if (globals_adios_is_dataspaces_connected_from_writer() && 
-            !globals_adios_is_dataspaces_connected_from_both())
+    log_debug("%s: called the %d. time, rank=%d\n", __func__, number_of_inits, mype);
+
+    number_of_inits--;
+    if (number_of_inits == 0)
     {
-        log_debug ("%s: call MPI Barrier on all connected processes(), rank=%d\n", __func__,mype);
-        MPI_Barrier (md->mpi_comm_init); 
-        log_debug ("%s: call dspaces_finalize(), rank=%d\n", __func__,mype);
-        dspaces_finalize();
+        // tell the readers which streams are finalized (for this adios group)
+        for (i=0; i<num_of_streams; i++) {
+            info = &stream_info[i];
+            /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
+            if (info->iam_rank0) {
+                MPI_Comm mpi_comm = MPI_COMM_SELF;
+                log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, info->name, mype);
+                dspaces_lock_on_write(info->name, &mpi_comm); // lock is global operation in DataSpaces
+#ifdef DATASPACES_NO_VERSIONING
+                value[0] = 0;
+#else
+                value[0] = info->time_index;
+#endif
+                snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", info->name);
+                log_debug ("%s: update %s in the space [%d, %d]\n", 
+                        __func__, ds_var_name, value[0], value[1] );
+                elemsize = sizeof(int); ndim = 1;
+                lb[0] = 0; ub[0] = 1;
+                gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+                dspaces_define_gdim(ds_var_name, ndim, gdims);
+                dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, &value); 
+                log_debug("%s: call dspaces_put_sync()\n", __func__);
+                dspaces_put_sync();
+
+                log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, info->name, mype);
+                dspaces_unlock_on_write(info->name, &mpi_comm);
+            }
+        }
 
-    }
-    globals_adios_set_dataspaces_disconnected_from_writer();
+        free_dspaces_stream_info(md);
 
-    adios_dataspaces_initialized = 0;
+        log_info("%s: Disconnect from DATASPACES server now, rank=%d ...\n", __func__, mype);
+        // disconnect from dataspaces if we are connected from writer but not anymore from reader
+        if (globals_adios_is_dataspaces_connected_from_writer() && 
+                !globals_adios_is_dataspaces_connected_from_both())
+        {
+            log_debug ("%s: call MPI Barrier on all connected processes(), rank=%d\n", __func__,mype);
+            MPI_Barrier (md->mpi_comm_init); 
+            log_debug ("%s: call dspaces_finalize(), rank=%d\n", __func__,mype);
+            dspaces_finalize();
+
+        }
+        globals_adios_set_dataspaces_disconnected_from_writer();
+        adios_dataspaces_initialized = 0;
+    }
 
-    log_info("%s: exit\n", __func__);
+    log_debug("%s: done, remaining groups = %d, rank=%d\n", __func__, number_of_inits, mype);
 }
 
 void adios_dataspaces_end_iteration (struct adios_method_struct * method)
diff --git a/src/write/adios_dimes.c b/src/write/adios_dimes.c
index eb410eb..76acf59 100644
--- a/src/write/adios_dimes.c
+++ b/src/write/adios_dimes.c
@@ -25,22 +25,52 @@
 #include "dimes_interface.h"
 #include "dataspaces.h"
 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#  define START_TIMER(t) adios_timing_go (fd->group->timing_obj, (t) ) 
+#else
+#  define START_TIMER(t) ; 
+#endif
+
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#  define STOP_TIMER(t) adios_timing_stop (fd->group->timing_obj, (t) )
+#else
+#  define STOP_TIMER(t) ;
+#endif
+
+// Indices for the timer object
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+static int T_DIMES_PUT   = ADIOS_TIMING_MAX_USER_TIMERS + 0;
+static int T_GETLOCK     = ADIOS_TIMING_MAX_USER_TIMERS + 1;
+static int T_MPI_BARRIER = ADIOS_TIMING_MAX_USER_TIMERS + 2;
+static int T_MD          = ADIOS_TIMING_MAX_USER_TIMERS + 3;
+static int T_AD_OPEN     = ADIOS_TIMING_MAX_USER_TIMERS + 4;
+static int T_AD_WRITE    = ADIOS_TIMING_MAX_USER_TIMERS + 5;
+static int T_AD_CLOSE    = ADIOS_TIMING_MAX_USER_TIMERS + 6;
+
+static int timer_count = 7;
+static char * timer_names[] = {
+        "dimes_put",
+        "dimes_lock",
+        "mpi_barrier",
+        "metadata",
+        "ad_open",
+        "ad_write",
+        "ad_close",
+};
+#endif
+
 /*#define DATASPACES_NO_VERSIONING  define it at configure as -DDATASPACES_NO_VERSIONING in CFLAGS */
 
 static int adios_dimes_initialized = 0;
 #define MAX_DS_NAMELEN 128
-#define MAX_NUM_OF_FILES 20
 static char ds_var_name[MAX_DS_NAMELEN];
 static unsigned int adios_dimes_verbose = 3;
 static int check_read_status = 2; // 0: disable, 1: at every step (not supported yet), 2: at finalize (default value)
-static double check_read_status_timeout_sec = 1;
+static double check_read_status_timeout_sec = 30;
 static int check_read_status_poll_interval_ms = 100;
+// count the number of inits/finalizes (one per adios group using this method
+static unsigned int number_of_inits = 0;
 
-struct adios_dimes_file_info
-{
-    char *name;
-    int time_index; // versioning, start from 0
-};
 
 struct adios_dimes_data_struct
 {
@@ -52,14 +82,84 @@ struct adios_dimes_data_struct
     MPI_Comm mpi_comm; // for use in open..close
     MPI_Comm mpi_comm_init; // for use in init/finalize
 #endif
-    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)
-    int  mpi_ranks[MAX_NUM_OF_FILES];   // mpi rank of current process for each written file (needed at finalize)
-    struct adios_dimes_file_info file_info[MAX_NUM_OF_FILES]; // keep track of time index for each opened file
 };
 
 
+/**********************************************************************************
+* Functions to manage the set of "files" or streams opened for all ADIOS groups
+* We store all names (with version info, and responsible "rank 0" master process id
+* to be used in adios_dataspaces_finalize().
+**********************************************************************************/
+#define MAX_NUM_OF_STREAMS 20
+struct adios_dimes_stream_info
+{
+    char *name;         // file name passed in adios_open()
+    int  time_index;    // versioning, start from 0
+    int  iam_rank0;     // 1: current process has been rank 0 for this stream
+                        //    rank 0 of communicator for this file does extra work in finalize
+};
+static struct adios_dimes_stream_info stream_info[MAX_NUM_OF_STREAMS];
+static int  num_of_streams = 0; // how many files do we have with this method (in total for entire run)
+                                // i.e. this variable never decreases
+//char *fnames[MAX_NUM_OF_STREAMS];  // names of files (needed at finalize)
+//int  fversions[MAX_NUM_OF_STREAMS];   // last steps of files (needed at finalize)
+//int  mpi_ranks[MAX_NUM_OF_STREAMS];   // mpi rank of current process for each written file (needed at finalize)
+
+static void free_dimes_stream_info()
+{
+    int i;
+    struct adios_dimes_stream_info *info;
+    for (i = 0; i < num_of_streams; i++) {
+        info = &stream_info[i];
+        if (info->name) {
+            free(info->name);
+        }
+        info->name = NULL;
+        info->time_index = -1; // time_index (dataspaces versioning) starts from 0
+        info->iam_rank0 = 0;
+    }
+    return;
+}
+
+static struct adios_dimes_stream_info* lookup_dimes_stream_info(const char* fname)
+{
+    int i;
+    // search from last to first
+    for (i = num_of_streams-1; i >= 0; i--)
+    {
+        if (stream_info[i].name != NULL &&
+            strcmp(stream_info[i].name, fname) == 0)
+        {
+            log_debug ("Stream %s is going to be continued... num_of_streams=%d\n",
+                fname, num_of_streams);
+            return &stream_info[i];
+        }
+    }
+    // not found, add new opened stream to list
+    if (num_of_streams < MAX_NUM_OF_STREAMS)
+    {
+        log_debug ("New stream %s added.  num_of_streams=%d\n",
+                fname, num_of_streams);
+        i = num_of_streams;
+        num_of_streams++;
+        stream_info[i].name = strdup(fname);
+        stream_info[i].time_index = -1;
+        return &stream_info[i];
+    }
+    else
+    {
+        // we cannot add more
+        adios_error (err_too_many_files,
+                     "ERROR: Max %d different files can be written by one application "
+                     "using the same ADIOS group when using the DATASPACES method.\n",
+                     MAX_NUM_OF_STREAMS);
+    }
+
+    return NULL;
+}
+
+
+
 static int check_read_status_var(const char* fname, int last_version)
 {
     int stay_in_poll_loop = 1;
@@ -105,47 +205,6 @@ static int check_read_status_var(const char* fname, int last_version)
     return 0;
 }
 
-static int init_dimes_file_info(struct adios_dimes_data_struct *md)
-{
-    int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        md->file_info[i].name = NULL;
-        md->file_info[i].time_index = 0;
-    }
-}
-
-static void free_dimes_file_info(struct adios_dimes_data_struct *md)
-{
-    int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name) {
-            free(md->file_info[i].name);
-        }
-    }
-
-    return;
-}
-
-static struct adios_dimes_file_info* lookup_dimes_file_info(struct adios_dimes_data_struct *md, const char* fname)
-{
-    int i;
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name != NULL &&
-            strcmp(md->file_info[i].name, fname) == 0) {
-            return &md->file_info[i];
-        }
-    }
-
-    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (md->file_info[i].name == NULL) {
-            md->file_info[i].name = malloc(strlen(fname)+1);
-            strcpy(md->file_info[i].name, fname);
-            return &md->file_info[i];
-        }
-    }
-
-    return NULL;
-}
 
 static int connect_to_dimes (struct adios_dimes_data_struct *md, MPI_Comm comm)
 {
@@ -176,6 +235,8 @@ static int connect_to_dimes (struct adios_dimes_data_struct *md, MPI_Comm comm)
 #if ! HAVE_MPI
         dspaces_rank (&(md->rank));
         dspaces_peers (&(md->peers));
+#else
+        md->peers = num_peers;
 #endif
 
         log_debug ("adios_dimes: rank=%d connected to DATASPACES: peers=%d\n", md->rank, md->peers);        
@@ -211,7 +272,6 @@ void adios_dimes_init (const PairStruct * parameters,
     md->mpi_comm = MPI_COMM_NULL;
     md->mpi_comm_init = method->init_comm;
 #endif
-    md->num_of_files = 0;
 
     // process user parameters
     const PairStruct *p = parameters;
@@ -266,10 +326,10 @@ void adios_dimes_init (const PairStruct * parameters,
         }
         p = p->next;
     }
-    init_dimes_file_info(md);
     connect_to_dimes (md, method->init_comm);
+    number_of_inits++;
 
-    log_info ("adios_dimes_init: done\n");
+    log_info ("adios_dimes_init: called the %d. time\n", number_of_inits);
    
 }
 
@@ -283,10 +343,41 @@ int adios_dimes_open (struct adios_file_struct * fd,
     int ret = 0;
     struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-    struct adios_dimes_file_info *info = lookup_dimes_file_info(md, fd->name);
+    if (fd->mode == adios_mode_read)
+    {
+        adios_error (err_operation_not_supported,
+                "DIMES transport method does not support old adios_read() calls. "
+                "Use the ADIOS read API and it's DATASPACES method.\n");
+        return adios_errno;
+    }
+
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+    // Ensure both timing objects exist
+    // timing_obj should get created at every open for the same file
+    // prev_timing_obj should only be created at the first open 
+    if (fd->group)
+    {
+        if (!fd->group->timing_obj)
+            fd->group->timing_obj = adios_timing_create (timer_count, timer_names);
+
+        if (!fd->group->prev_timing_obj)
+            fd->group->prev_timing_obj = adios_timing_create (timer_count, timer_names);
+    }
+#endif
+    START_TIMER (T_AD_OPEN);
+
+    struct adios_dimes_stream_info *info = lookup_dimes_stream_info(fd->name);
+    if (!info) {
+        return adios_errno;
+    }
+
+    /* Increment the time index, start with 0. Not good to increment in close, because 
+     * finalize needs the same time_index as the last writing cycle */
+    info->time_index++;
     log_info ("adios_dimes_open: open %s, mode=%d, time_index=%d \n",
                         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
     // that we need to tell DATASPACES
@@ -295,20 +386,18 @@ int adios_dimes_open (struct adios_file_struct * fd,
     MPI_Comm_size (md->mpi_comm, &(md->peers));
 #endif
 
-    if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
-    {
-        log_debug ("adios_dimes_open: rank=%d call write lock...\n", md->rank);       
-        dspaces_lock_on_write (fd->name, &md->mpi_comm);  
-        log_debug ("adios_dimes_open: rank=%d got write lock\n", md->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)
-    {
-        dspaces_lock_on_read (fd->name, &md->mpi_comm);
-    } 
-  
+    info->iam_rank0 = (md->rank == 0);
+
+    log_debug ("adios_dimes_open: rank=%d call write lock...\n", md->rank);       
+    START_TIMER (T_GETLOCK);
+    dspaces_lock_on_write (fd->name, &md->mpi_comm);  
+    STOP_TIMER (T_GETLOCK);
+    log_debug ("adios_dimes_open: rank=%d got write lock\n", md->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);    
+
+    STOP_TIMER (T_AD_OPEN);
     return ret;
 }
 
@@ -337,10 +426,15 @@ void adios_dimes_write (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
+    if (fd->mode == adios_mode_read) {
+        return;
+    }
+    START_TIMER (T_AD_WRITE);
+
     struct adios_dimes_data_struct *md = (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(md, fd->name);
+    struct adios_dimes_stream_info *info = lookup_dimes_stream_info(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
@@ -438,7 +532,9 @@ void adios_dimes_write (struct adios_file_struct * fd
         gdims_in[i] = gdims[didx[i]];
     }
     dimes_define_gdim(ds_var_name, ndims, gdims_in);
+    START_TIMER (T_DIMES_PUT);
     dimes_put(ds_var_name, version, var_type_size, ndims, lb_in, ub_in, data);
+    STOP_TIMER (T_DIMES_PUT);
 
     dimes_ints_to_str(ndims, didx, didx_str);
     dimes_int64s_to_str(ndims, gdims_in, gdims_str);
@@ -446,6 +542,7 @@ void adios_dimes_write (struct adios_file_struct * fd
     dimes_int64s_to_str(ndims, ub_in, ub_str);
     log_debug ("var_name=%s, dimension ordering=(%s), gdims=(%s), lb=(%s), ub=(%s)\n",
             ds_var_name, didx_str, gdims_str, lb_str, ub_str);
+    STOP_TIMER (T_AD_WRITE);
 }
 
 void adios_dimes_get_write_buffer (struct adios_file_struct * fd
@@ -891,136 +988,128 @@ void adios_dimes_close (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
+    if (fd->mode == adios_mode_read) {
+        return;
+    }
+    START_TIMER (T_AD_CLOSE);
+
     struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
                                                 method->method_data;
     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(md, fd->name);
+    struct adios_dimes_stream_info *info = lookup_dimes_stream_info(fd->name);
     uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
     int didx[MAX_DS_NDIM]; // for reordering DS dimensions
     int elemsize, ndim;
     unsigned int version;
 
-    if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
-    {
-        // finalize variable info in fd buffer, next we call build_index
-        while (a) {
-            a->write_offset = 1; // only attributes with !=0 offset will be included in build index
-            a=a->next;
-        }
+    START_TIMER (T_MD);
+    // finalize variable info in fd buffer, next we call build_index
+    while (a) {
+        a->write_offset = 1; // only attributes with !=0 offset will be included in build index
+        a=a->next;
+    }
 
-        //adios_write_close_vars_v1 (fd);
-        /* Gather var/attr indices from all processes to rank 0 */
-        adios_dimes_gather_indices (fd, method, index);
+    //adios_write_close_vars_v1 (fd);
+    /* Gather var/attr indices from all processes to rank 0 */
+    adios_dimes_gather_indices (fd, method, index);
+    STOP_TIMER (T_MD);
 
-        // make sure all processes have finished putting data to the space 
-        // before we put metadata from rank 0
-        MPI_Barrier (md->mpi_comm); 
+    // make sure all processes have finished putting data to the space 
+    // before we put metadata from rank 0
+    START_TIMER (T_MPI_BARRIER);
+    MPI_Barrier (md->mpi_comm); 
+    STOP_TIMER (T_MPI_BARRIER);
 
-        if (md->rank == 0) {
+    if (md->rank == 0) {
 
-            /* Write two adios specific variables with the name of the file and name of the group into the space */
-            /* ADIOS Read API fopen() checks these variables to see if writing already happened */
+        START_TIMER (T_MD);
+        /* Write two adios specific variables with the name of the file and name of the group into the space */
+        /* ADIOS Read API fopen() checks these variables to see if writing already happened */
 #ifdef DATASPACES_NO_VERSIONING
-            version = 0;              /* Update/overwrite data in DataSpaces */
+        version = 0;              /* Update/overwrite data in DataSpaces */
 #else
-            version = info->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, index, 
-                                   &indexbuf, &indexlen, &nvars, &nattrs);
-
-            
-            /* Put GROUP at fn/gn header into space */
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "GROUP@%s/%s", fd->name, fd->group->name);
-            log_debug ("%s: put %s buflen=%d (bytes) into space\n", __func__, ds_var_name, indexlen);
-            elemsize = 1; ndim = 1;
-            lb[0] = 0; ub[0] = indexlen-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, indexbuf);
-            free (indexbuf);
-
-            /* Create and put FILE at fn header into space */
-            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 (info->time_index, nvars, nattrs, indexlen,
-                        fd->group->name, &file_info_buf, &file_info_buf_len);
-            log_debug ("%s: put %s buflen=%d (bytes) time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
+        /* Make metadata from indices */
+        char * indexbuf;
+        int    indexlen;
+        int    nvars, nattrs;
+        dimes_pack_group_info (fd, method, index, 
+                &indexbuf, &indexlen, &nvars, &nattrs);
+
+
+        /* Put GROUP at fn/gn header into space */
+        snprintf(ds_var_name, MAX_DS_NAMELEN, "GROUP@%s/%s", fd->name, fd->group->name);
+        log_debug ("%s: put %s buflen=%d (bytes) into space\n", __func__, ds_var_name, indexlen);
+        elemsize = 1; ndim = 1;
+        lb[0] = 0; ub[0] = indexlen-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, indexbuf);
+        free (indexbuf);
+
+        /* Create and put FILE at fn header into space */
+        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 (info->time_index, nvars, nattrs, indexlen,
+                fd->group->name, &file_info_buf, &file_info_buf_len);
+        log_debug ("%s: put %s buflen=%d (bytes) 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), 
                 *(int*)(file_info_buf+8), *(int*)(file_info_buf+12),
                 *(int*)(file_info_buf+16), *(int*)(file_info_buf+20),
                 file_info_buf+24);
-            dspaces_put_sync(); //wait on previous put to finish
-            elemsize = 1; ndim = 1;
-            lb[0] = 0; ub[0] = file_info_buf_len-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, file_info_buf);
-
-            /* Create and put VERSION at fn version info into space */
-            int version_buf[2] = {version, 0}; /* last version put in space; not terminated */
-            int version_buf_len = 2; 
-            snprintf (ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", fd->name);
-            log_debug ("%s: put %s buf= [%d,%d] buflen=%d (integers) into space\n", 
-                       __func__, ds_var_name, version_buf[0], version_buf[1], version_buf_len);
-            dspaces_put_sync(); //wait on previous put to finish
-            elemsize = sizeof(int); ndim = 1;
-            lb[0] = 0; ub[0] = version_buf_len-1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, version_buf);
-            dspaces_put_sync(); //wait on previous put to finish
-        }
-
-        // remember this filename and its version for finalize
-        int i;
-        for (i=0; i<md->num_of_files; i++) {
-            if (!strcmp(fd->name, md->fnames[i]))
-                break;
-        }
-        if (i == md->num_of_files) {
-            if (md->num_of_files < MAX_NUM_OF_FILES) {
-                md->fnames[ md->num_of_files ] = strdup(fd->name);
-                md->num_of_files++;
-            } else {
-                log_error ("%s: Max %d files can be written by one application "
-                        "using the DATASPACES method\n",
-                        __func__, MAX_NUM_OF_FILES);
-            }
-        }
-        if (i < md->num_of_files) {
-            md->fversions[i] = version;
-            md->mpi_ranks[i] = md->rank;
-        }
-
-
-        // free allocated index lists
-        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 (md->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, &md->mpi_comm);
+        dspaces_put_sync(); //wait on previous put to finish
+        elemsize = 1; ndim = 1;
+        lb[0] = 0; ub[0] = file_info_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, version, elemsize, ndim, lb, ub, file_info_buf);
+
+        /* Create and put VERSION at fn version info into space */
+        int version_buf[2] = {version, 0}; /* last version put in space; not terminated */
+        int version_buf_len = 2; 
+        snprintf (ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", fd->name);
+        log_debug ("%s: put %s buf= [%d,%d] buflen=%d (integers) into space\n", 
+                __func__, ds_var_name, version_buf[0], version_buf[1], version_buf_len);
+        dspaces_put_sync(); //wait on previous put to finish
+        elemsize = sizeof(int); ndim = 1;
+        lb[0] = 0; ub[0] = version_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, version_buf);
+        dspaces_put_sync(); //wait on previous put to finish
+        STOP_TIMER (T_MD);
     }
-    else if( fd->mode == adios_mode_read )
-    {
-        dspaces_unlock_on_read(fd->name, &md->mpi_comm);
-    } 
 
-    /* Increment the time index */
-    info->time_index++;
 
+    // free allocated index lists
+    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
+    START_TIMER (T_MPI_BARRIER);
+    MPI_Barrier (md->mpi_comm); 
+    STOP_TIMER (T_MPI_BARRIER);
+    //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, &md->mpi_comm);
+
+    STOP_TIMER (T_AD_CLOSE);
+
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+    //Finished timing this cycle, swap the timing buffers
+    adios_timing_destroy(fd->group->prev_timing_obj);
+    fd->group->prev_timing_obj = fd->group->timing_obj;
+    fd->group->timing_obj = 0;
+    // prev_timing_obj points to unwritten timing info, timing_obj is
+    // ready to allocate at the next open
+#endif
 
     log_info ("%s: exit\n", __func__);
 }
@@ -1029,64 +1118,70 @@ void adios_dimes_finalize (int mype, struct adios_method_struct * method)
 {
     struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
         method->method_data;
+    struct adios_dimes_stream_info *info;
     int i;
     char ds_var_name[MAX_DS_NAMELEN];
     uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
     int elemsize, ndim;
     int value[2] = {0, 1}; // integer to be written to space (terminated=1)
 
-    free_dimes_file_info(md);
+    log_debug("%s: called the %d. time, rank=%d\n", __func__, number_of_inits, mype);
 
-    // tell the readers which files are finalized
-    for (i=0; i<md->num_of_files; i++) {
-        /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
-        if (md->mpi_ranks[i] == 0) {
-            if (check_read_status == 2) {
-                check_read_status_var(md->fnames[i], md->fversions[i]);
+    number_of_inits--;
+    if (number_of_inits == 0)
+    {
+        // tell the readers which files are finalized
+        for (i=0; i<num_of_streams; i++) {
+            info = &stream_info[i];
+            /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
+            if (info->iam_rank0) {
+                if (check_read_status == 2) {
+                    check_read_status_var(info->name, info->time_index);
+                }
+                MPI_Comm mpi_comm = MPI_COMM_SELF;
+                log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, info->name, mype);
+                dspaces_lock_on_write(info->name, &mpi_comm); // lock is global operation in DataSpaces
+
+                value[0] = info->time_index;
+                snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", info->name);
+                log_debug ("%s: update %s in the space [%d, %d]\n", 
+                        __func__, ds_var_name, value[0], value[1] );
+                elemsize = sizeof(int); ndim = 1;
+                lb[0] = 0; ub[0] = 1;
+                gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+                dspaces_define_gdim(ds_var_name, ndim, gdims);
+                dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, &value);
+                log_debug("%s: call dspaces_put_sync()\n", __func__);
+                dspaces_put_sync();
+
+                log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, info->name, mype);
+                dspaces_unlock_on_write(info->name, &mpi_comm);
             }
-            MPI_Comm mpi_comm = MPI_COMM_SELF;
-            log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, md->fnames[i], mype);
-            dspaces_lock_on_write(md->fnames[i], &mpi_comm); // lock is global operation in DataSpaces
-
-            value[0] = md->fversions[i];
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", md->fnames[i]);
-            log_debug ("%s: update %s in the space [%d, %d]\n", 
-                    __func__, ds_var_name, value[0], value[1] );
-            elemsize = sizeof(int); ndim = 1;
-            lb[0] = 0; ub[0] = 1;
-            gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
-            dspaces_define_gdim(ds_var_name, ndim, gdims);
-            dspaces_put(ds_var_name, 0, elemsize, ndim, lb, ub, &value);
-            log_debug("%s: call dspaces_put_sync()\n", __func__);
-            dspaces_put_sync();
-
-            log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, md->fnames[i], mype);
-            dspaces_unlock_on_write(md->fnames[i], &mpi_comm);
         }
-        free(md->fnames[i]);
-    }
 
-    if (check_read_status == 2) {
-        // Note: dspaces_lock_on_write() above is only called by single process (whose md->rank == 0). MPI_Barrier ensures all writer processes to wait until reader application fetches data of last version. 
-        MPI_Barrier(md->mpi_comm_init);
-    }
-    // Free all previsouly allocated RDMA buffers
-    dimes_put_sync_all();
+        free_dimes_stream_info();
 
-    // disconnect from dataspaces if we are connected from writer but not anymore from reader
-    if (globals_adios_is_dimes_connected_from_writer() && 
-            !globals_adios_is_dimes_connected_from_both())
-    {
-        log_debug ("%s: call MPI Barrier on all connected processes(), rank=%d\n", __func__,mype);
-        MPI_Barrier (md->mpi_comm_init); 
-        log_debug ("%s: call dspaces_finalize(), rank=%d\n", __func__, mype);
-        dspaces_finalize();
-    }
-    globals_adios_set_dimes_disconnected_from_writer();
+        if (check_read_status == 2) {
+            // Note: dspaces_lock_on_write() above is only called by single process (whose md->rank == 0). MPI_Barrier ensures all writer processes to wait until reader application fetches data of last version. 
+            MPI_Barrier(md->mpi_comm_init);
+        }
+        // Free all previsouly allocated RDMA buffers
+        dimes_put_sync_all();
 
-    adios_dimes_initialized = 0;
+        // disconnect from dataspaces if we are connected from writer but not anymore from reader
+        if (globals_adios_is_dimes_connected_from_writer() && 
+                !globals_adios_is_dimes_connected_from_both())
+        {
+            log_debug ("%s: call MPI Barrier on all connected processes(), rank=%d\n", __func__,mype);
+            MPI_Barrier (md->mpi_comm_init); 
+            log_debug ("%s: call dspaces_finalize(), rank=%d\n", __func__, mype);
+            dspaces_finalize();
+        }
+        globals_adios_set_dimes_disconnected_from_writer();
+        adios_dimes_initialized = 0;
+    }
 
-    log_info("%s: exit\n", __func__);
+    log_debug("%s: done, remaining groups = %d, rank=%d\n", __func__, number_of_inits, mype);
 }
 
 void adios_dimes_end_iteration (struct adios_method_struct * method)
diff --git a/src/write/adios_flexpath.c b/src/write/adios_flexpath.c
index 88938bb..53f29af 100644
--- a/src/write/adios_flexpath.c
+++ b/src/write/adios_flexpath.c
@@ -112,7 +112,7 @@ typedef struct _flexpath_write_file_data {
     MPI_Comm mpiComm;
     int rank;
     int size;
-
+    int host_language;
     // EVPath stuff
     EVstone multiStone;
     EVstone sinkStone;
@@ -175,6 +175,19 @@ FlexpathWriteData flexpathWriteData;
 
 /**************************** Function Definitions *********************************/
 
+static void 
+reverse_dims(uint64_t *dims, int len)
+{
+    int i;
+    for (i = 0; i<(len/2); i++) {
+        uint64_t tmp = dims[i];
+        int end = len-1-i;
+        //printf("%d %d\n", dims[i], dims[end]);
+        dims[i] = dims[end];
+        dims[end] = tmp;
+    }
+}
+
 char*
 resolve_path_name(char *path, char *name)
 {
@@ -197,7 +210,8 @@ resolve_path_name(char *path, char *name)
 }
 
 // add an attr for each dimension to an attr_list
-void set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) 
+void 
+set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) 
 {
     char atomName[200] = "";
     char dimNum[10];
@@ -429,7 +443,8 @@ add_var(FlexpathVarNode* queue, char* varName, FlexpathVarNode* dims, int rank)
 }
 
 // free a var list
-void free_vars(FlexpathVarNode* queue)
+void 
+free_vars(FlexpathVarNode* queue)
 {
     if(queue) {
         free_vars(queue->next);
@@ -667,6 +682,20 @@ set_field(int type, FMFieldList* field_list_ptr, int fieldNo, int* size)
 	*size += sizeof(char);
 	break;
 
+    case adios_complex:
+        field_list[fieldNo].field_type = strdup("complex");
+        field_list[fieldNo].field_size = sizeof(complex_dummy);
+        field_list[fieldNo].field_offset = *size;
+        *size += sizeof(complex_dummy);
+        break;
+        
+    case adios_double_complex:
+        field_list[fieldNo].field_type = strdup("double_complex");
+        field_list[fieldNo].field_size = sizeof(double_complex_dummy);
+        field_list[fieldNo].field_offset = *size;
+        *size += sizeof(double_complex_dummy);
+        break;
+
     default:
 	perr("set_field: Unknown Type Error\n");
 	break;
@@ -717,18 +746,12 @@ 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 = malloc(sizeof(FlexpathFMStructure));
-    mem_check(currentFm, "currentFm");
-    memset(currentFm, 0, sizeof(FlexpathFMStructure));
-
+    FMStructDescRec *format = calloc(4, sizeof(FMStructDescRec));
+    FlexpathFMStructure *currentFm = calloc(1, sizeof(FlexpathFMStructure));
     LIST_INIT(&currentFm->nameList);
     LIST_INIT(&currentFm->dimList);
     currentFm->format = format;
-    format->format_name = strdup(t->name);
+    format[0].format_name = strdup(t->name);
 
     if (t->hashtbl_vars->size(t->hashtbl_vars) == 0) {
 	adios_error(err_invalid_group, "set_format: No Variables In Group\n");
@@ -922,6 +945,32 @@ set_format(struct adios_group_struct *t,
 		{  currentFm->size += (v_offset * sizeof(char));  } 
 		break;
 
+            case adios_complex:
+		field_list[fieldNo].field_type =
+		    (char *) malloc(sizeof(char) * 255);
+		snprintf((char *) field_list[fieldNo].field_type, 255, "complex%s",
+			 dims);
+		field_list[fieldNo].field_size = sizeof(complex_dummy);
+		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(complex_dummy));  } 
+		break;
+
+            case adios_double_complex:
+		field_list[fieldNo].field_type =
+		    (char *) malloc(sizeof(char) * 255);
+		snprintf((char *) field_list[fieldNo].field_type, 255, "double_complex%s",
+			 dims);
+		field_list[fieldNo].field_size = sizeof(double_complex_dummy);
+		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(double_complex_dummy)); } 
+		break;
+
 	    default:
 		adios_error(err_invalid_group, 
 			    "set_format: Unknown Type Error %d: name: %s\n", 
@@ -959,11 +1008,16 @@ set_format(struct adios_group_struct *t,
 	field_list[fieldNo].field_size = 0;
     }
 
-    format->field_list = field_list;
-    currentFm->format->struct_size = currentFm->size;
-
-    currentFm->buffer = malloc(currentFm->size);
-    memset(currentFm->buffer, 0, currentFm->size);
+    format[0].field_list = field_list;
+    format[1].format_name = strdup("complex");
+    format[1].field_list = complex_dummy_field_list;
+    format[2].format_name = strdup("double_complex");
+    format[2].field_list = double_complex_dummy_field_list;
+    
+    format[0].struct_size = currentFm->size;
+    format[1].struct_size = sizeof(complex_dummy);
+    format[2].struct_size = sizeof(double_complex_dummy);
+    currentFm->buffer = calloc(1, currentFm->size);
 
     return currentFm;
 }
@@ -973,7 +1027,7 @@ 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;
+    FMField *f = fileData->fm->format[0].field_list;
     while (f->field_name != NULL)
     {
         FlexpathVarNode* a;
@@ -983,7 +1037,7 @@ void* copy_buffer(void* buffer, int rank, FlexpathWriteFileData* fileData)
 	       (a->dimensions != NULL)) {
                 FlexpathVarNode* dim = a->dimensions;
                 while(dim) {
-                    FMField *f2 = fileData->fm->format->field_list;
+                    FMField *f2 = fileData->fm->format[0].field_list;
                     while(f2->field_name != NULL) {
                         if(strcmp(f2->field_name, dim->varName)==0) {
                             break;
@@ -1011,7 +1065,6 @@ process_data_flush(FlexpathWriteFileData *fileData,
     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) {
@@ -1388,11 +1441,11 @@ adios_flexpath_open(struct adios_file_struct *fd,
 	
     //process group format
     struct adios_group_struct *t = method->group;
-    //printf("fortran? %d\n", t->adios_host_language_fortran);
     if(t == NULL){
 	adios_error(err_invalid_group, "Invalid group.\n");
 	return err_invalid_group;
     }
+    fileData->host_language = t->adios_host_language_fortran;
     struct adios_var_struct *fields = t->vars;
 	
     if(fields == NULL){
@@ -1492,7 +1545,7 @@ adios_flexpath_write(
 	return;
     }
     
-    FMFieldList flist = fm->format->field_list;
+    FMFieldList flist = fm->format[0].field_list;
     FMField *field = NULL;
     char *fullname = resolve_path_name(f->path, f->name);
     field = internal_find_field(fullname, flist);
@@ -1502,7 +1555,7 @@ adios_flexpath_write(
 	if (!f->dimensions) {
 	    if (data) {
 		//why wouldn't it have data?
-		memcpy(&fm->buffer[field->field_offset], data, field->field_size);
+		memcpy(&fm->buffer[field->field_offset], data, field->field_size);                
 
 		//scalar quantities can have FlexpathAltNames also so assign those
 		if(field->field_name != NULL) {
@@ -1528,12 +1581,23 @@ adios_flexpath_write(
 	    }
 	} else {
 	    //vector quantity
-	    if (data)
-	    {
-		//we just need to copy the pointer stored in f->data
-                // calculate size
-                memcpy(&fm->buffer[field->field_offset], &data, sizeof(void *));
-
+	    if (data) {	    
+                struct adios_dimension_struct *dims = f->dimensions;
+                int arraysize = 0;
+                while (dims) {
+                    int size = adios_get_dim_value(&dims->dimension);
+                    if (arraysize) {
+                        arraysize *= size;
+                    }
+                    else
+                        arraysize = size;
+                    dims = dims->next;
+                }
+                arraysize *= field->field_size;
+                void *datacpy = malloc(arraysize);
+                //void *temp = get_FMPtrField_by_name(flist, fullname, fm->buffer, 0);
+                memcpy(datacpy, data, arraysize);
+                set_FMPtrField_by_name(flist, fullname, fm->buffer, datacpy);
 	    } else {
 		log_error("adios_flexpath_write: no array data found for var: %s. Bad.\n", f->name);	
 	    }
@@ -1545,44 +1609,7 @@ extern void
 adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *method) 
 {
     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) {       
-        if(fields->dimensions) {
-            struct adios_dimension_struct* dims = fields->dimensions;
-            int total_size = 1;
-            //for each dimension
-            while(dims) {    
-                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 *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
-            void* pointer_data_copy = malloc(total_size);
-            // while null
-            while(pointer_data_copy==NULL) { 
-                sleep(1);
-                void* pointer_data_copy = malloc(total_size);
-                //block
-            }
-            
-            char *resolved_name = resolve_path_name(fields->path, fields->name);
-            void *temp = get_FMPtrField_by_name(flist, resolved_name, fileData->fm->buffer, 0);
-            memcpy(pointer_data_copy, temp, total_size);
-            set_FMPtrField_by_name(flist, resolved_name, fileData->fm->buffer, pointer_data_copy);
-        }    
-        fields = fields->next;
-    }
-    
+    void* buffer = malloc(fileData->fm->size);    
     memcpy(buffer, fileData->fm->buffer, fileData->fm->size);
 
     threaded_enqueue(&fileData->dataQueue, buffer, 
@@ -1627,7 +1654,13 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
 						    &local_offsets, 
 						    &local_dimensions, 
 						    &global_dimensions);
-	    
+	    // flip for fortran here.
+            if (fileData->host_language == FP_FORTRAN_MODE) {
+                reverse_dims(local_offsets, num_local_offsets);
+                reverse_dims(local_dimensions, num_local_offsets);
+                reverse_dims(global_dimensions, num_local_offsets);
+            }
+
 	    if(num_local_offsets > 0){
 		uint64_t *all_offsets = NULL;
 		uint64_t *all_local_dims = NULL;
diff --git a/src/write/adios_icee.c b/src/write/adios_icee.c
new file mode 100644
index 0000000..c2b59ad
--- /dev/null
+++ b/src/write/adios_icee.c
@@ -0,0 +1,1194 @@
+
+/*
+  adios_icee.c
+  uses evpath for io in conjunction with read/read_icee.c
+*/
+
+#include <assert.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include <errno.h>
+
+#include <pthread.h>
+#include <signal.h>
+//#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
+
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
+#include "public/adios.h"
+#include "public/adios_mpi.h"
+#include "public/adios_error.h"
+#include "core/adios_transport_hooks.h"
+#include "core/adios_bp_v1.h"
+#include "core/adios_internals.h"
+#include "core/buffer.h"
+#include "core/util.h"
+#include "core/adios_logger.h"
+
+#ifdef HAVE_ICEE
+
+// // evpath libraries
+#include <evpath.h>
+#include <cod.h>
+#include <sys/queue.h>
+
+///////////////////////////
+// Global Variables
+///////////////////////////
+#include "core/globals.h"
+
+#define DUMP(fmt, ...) fprintf(stderr, ">>> "fmt"\n", ## __VA_ARGS__); 
+
+#define MYMALLOC(var, size) {                       \
+        var = malloc(size);                         \
+        assert((var != NULL) && "calloc failed.");  \
+    }
+
+#define MYCALLOC(var, num, size) {                  \
+        var = calloc(num, size);                    \
+        assert((var != NULL) && "calloc failed.");  \
+    }
+
+static int adios_icee_initialized = 0;
+static int icee_num_parallel = 0;
+
+CManager icee_write_cm;
+EVsource icee_write_source;
+CMConnection icee_write_cm_conn; // connection for passive mode
+
+CManager (*cm)[ICEE_MAX_PARALLEL];
+EVsource (*source)[ICEE_MAX_PARALLEL];
+
+//CManager wpcm;
+//CMConnection pconn;
+
+static int n_client = 0;
+static int max_client = 1;
+static int is_cm_passive = 0;
+
+static icee_fileinfo_rec_ptr_t fp = NULL;
+static int reverse_dim = 0;
+
+static int timestep = 0; // global timestep. Will be increased by 1 at each adios_open
+
+/*
+ * Thread pool implementation
+ * Credit: Multithreaded Programming Guide by Oracle
+ * http://docs.oracle.com/cd/E19253-01/816-5137/6mba5vqn3/index.html
+ */
+
+/*
+ * FIFO queued job
+ */
+typedef struct job job_t;
+struct job {
+    job_t   *job_next;      /* linked list of jobs */
+    void    *(*job_func)(void *);   /* function to call */
+    void    *job_arg;       /* its argument */
+};
+
+/*
+ * List of active worker threads, linked through their stacks.
+ */
+typedef struct active active_t;
+struct active {
+    active_t    *active_next;   /* linked list of threads */
+    pthread_t   active_tid; /* active thread id */
+};
+
+/*
+ * The thread pool, opaque to the clients.
+ */
+struct thr_pool {
+    thr_pool_t  *pool_forw; /* circular linked list */
+    thr_pool_t  *pool_back; /* of all thread pools */
+    pthread_mutex_t pool_mutex; /* protects the pool data */
+    pthread_cond_t  pool_busycv;    /* synchronization in pool_queue */
+    pthread_cond_t  pool_workcv;    /* synchronization with workers */
+    pthread_cond_t  pool_waitcv;    /* synchronization in pool_wait() */
+    active_t    *pool_active;   /* list of threads performing work */
+    job_t       *pool_head; /* head of FIFO job queue */
+    job_t       *pool_tail; /* tail of FIFO job queue */
+    pthread_attr_t  pool_attr;  /* attributes of the workers */
+    int     pool_flags; /* see below */
+    uint_t      pool_linger;    /* seconds before idle workers exit */
+    int     pool_minimum;   /* minimum number of worker threads */
+    int     pool_maximum;   /* maximum number of worker threads */
+    int     pool_nthreads;  /* current number of worker threads */
+    int     pool_idle;  /* number of idle workers */
+};
+
+/* pool_flags */
+#define POOL_WAIT   0x01        /* waiting in thr_pool_wait() */
+#define POOL_DESTROY    0x02        /* pool is being destroyed */
+
+/* the list of all created and not yet destroyed thread pools */
+static thr_pool_t *thr_pools = NULL;
+
+/* protects thr_pools */
+static pthread_mutex_t thr_pool_lock = PTHREAD_MUTEX_INITIALIZER;
+
+/* set of all signals */
+static sigset_t fillset;
+
+static void *worker_thread(void *);
+
+static int
+create_worker(thr_pool_t *pool)
+{
+    sigset_t oset;
+    int error;
+    pthread_t thrid;
+
+    (void) pthread_sigmask(SIG_SETMASK, &fillset, &oset);
+    error = pthread_create(&thrid, &pool->pool_attr, worker_thread, pool);
+    (void) pthread_sigmask(SIG_SETMASK, &oset, NULL);
+    return (error);
+}
+
+/*
+ * Worker thread is terminating.  Possible reasons:
+ * - excess idle thread is terminating because there is no work.
+ * - thread was cancelled (pool is being destroyed).
+ * - the job function called pthread_exit().
+ * In the last case, create another worker thread
+ * if necessary to keep the pool populated.
+ */
+static void
+worker_cleanup(thr_pool_t *pool)
+{
+    --pool->pool_nthreads;
+    if (pool->pool_flags & POOL_DESTROY) {
+        if (pool->pool_nthreads == 0)
+            (void) pthread_cond_broadcast(&pool->pool_busycv);
+    } else if (pool->pool_head != NULL &&
+               pool->pool_nthreads < pool->pool_maximum &&
+               create_worker(pool) == 0) {
+        pool->pool_nthreads++;
+    }
+    (void) pthread_mutex_unlock(&pool->pool_mutex);
+}
+
+static void
+notify_waiters(thr_pool_t *pool)
+{
+    if (pool->pool_head == NULL && pool->pool_active == NULL) {
+        pool->pool_flags &= ~POOL_WAIT;
+        (void) pthread_cond_broadcast(&pool->pool_waitcv);
+    }
+}
+
+/*
+ * Called by a worker thread on return from a job.
+ */
+static void
+job_cleanup(thr_pool_t *pool)
+{
+    pthread_t my_tid = pthread_self();
+    active_t *activep;
+    active_t **activepp;
+
+    (void) pthread_mutex_lock(&pool->pool_mutex);
+    for (activepp = &pool->pool_active;
+         (activep = *activepp) != NULL;
+         activepp = &activep->active_next) {
+        if (activep->active_tid == my_tid) {
+            *activepp = activep->active_next;
+            break;
+        }
+    }
+    if (pool->pool_flags & POOL_WAIT)
+        notify_waiters(pool);
+}
+
+static void *
+worker_thread(void *arg)
+{
+    thr_pool_t *pool = (thr_pool_t *)arg;
+    int timedout;
+    job_t *job;
+    void *(*func)(void *);
+    active_t active;
+    struct timespec ts;
+
+    /*
+     * This is the worker's main loop.  It will only be left
+     * if a timeout occurs or if the pool is being destroyed.
+     */
+    (void) pthread_mutex_lock(&pool->pool_mutex);
+    pthread_cleanup_push((void *)worker_cleanup, pool);
+    active.active_tid = pthread_self();
+    for (;;) {
+        /*
+         * We don't know what this thread was doing during
+         * its last job, so we reset its signal mask and
+         * cancellation state back to the initial values.
+         */
+        (void) pthread_sigmask(SIG_SETMASK, &fillset, NULL);
+        (void) pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
+        (void) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+
+        timedout = 0;
+        pool->pool_idle++;
+        if (pool->pool_flags & POOL_WAIT)
+            notify_waiters(pool);
+        while (pool->pool_head == NULL &&
+               !(pool->pool_flags & POOL_DESTROY)) {
+            if (pool->pool_nthreads <= pool->pool_minimum) {
+                (void) pthread_cond_wait(&pool->pool_workcv,
+                                         &pool->pool_mutex);
+            } else {
+#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time
+                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);
+                ts.tv_sec = mts.tv_sec;
+                ts.tv_nsec = mts.tv_nsec;
+#else
+                (void) clock_gettime(CLOCK_REALTIME, &ts);
+#endif
+                ts.tv_sec += pool->pool_linger;
+                if (pool->pool_linger == 0 ||
+                    pthread_cond_timedwait(&pool->pool_workcv,
+                                           &pool->pool_mutex, &ts) == ETIMEDOUT) {
+                    timedout = 1;
+                    break;
+                }
+            }
+        }
+        pool->pool_idle--;
+        if (pool->pool_flags & POOL_DESTROY)
+            break;
+        if ((job = pool->pool_head) != NULL) {
+            timedout = 0;
+            func = job->job_func;
+            arg = job->job_arg;
+            pool->pool_head = job->job_next;
+            if (job == pool->pool_tail)
+                pool->pool_tail = NULL;
+            active.active_next = pool->pool_active;
+            pool->pool_active = &active;
+            (void) pthread_mutex_unlock(&pool->pool_mutex);
+            pthread_cleanup_push((void *)job_cleanup, pool);
+            free(job);
+            /*
+             * Call the specified job function.
+             */
+            (void) func(arg);
+            /*
+             * If the job function calls pthread_exit(), the thread
+             * calls job_cleanup(pool) and worker_cleanup(pool);
+             * the integrity of the pool is thereby maintained.
+             */
+            pthread_cleanup_pop(1); /* job_cleanup(pool) */
+        }
+        if (timedout && pool->pool_nthreads > pool->pool_minimum) {
+            /*
+             * We timed out and there is no work to be done
+             * and the number of workers exceeds the minimum.
+             * Exit now to reduce the size of the pool.
+             */
+            break;
+        }
+    }
+    pthread_cleanup_pop(1); /* worker_cleanup(pool) */
+    return (NULL);
+}
+
+static void
+clone_attributes(pthread_attr_t *new_attr, pthread_attr_t *old_attr)
+{
+    struct sched_param param;
+    void *addr;
+    size_t size;
+    int value;
+
+    (void) pthread_attr_init(new_attr);
+
+    if (old_attr != NULL) {
+        (void) pthread_attr_getstack(old_attr, &addr, &size);
+        /* don't allow a non-NULL thread stack address */
+        (void) pthread_attr_setstack(new_attr, NULL, size);
+
+        (void) pthread_attr_getscope(old_attr, &value);
+        (void) pthread_attr_setscope(new_attr, value);
+
+        (void) pthread_attr_getinheritsched(old_attr, &value);
+        (void) pthread_attr_setinheritsched(new_attr, value);
+
+        (void) pthread_attr_getschedpolicy(old_attr, &value);
+        (void) pthread_attr_setschedpolicy(new_attr, value);
+
+        (void) pthread_attr_getschedparam(old_attr, &param);
+        (void) pthread_attr_setschedparam(new_attr, &param);
+
+        (void) pthread_attr_getguardsize(old_attr, &size);
+        (void) pthread_attr_setguardsize(new_attr, size);
+    }
+
+    /* make all pool threads be detached threads */
+    (void) pthread_attr_setdetachstate(new_attr, PTHREAD_CREATE_DETACHED);
+}
+
+thr_pool_t *
+thr_pool_create(uint_t min_threads, uint_t max_threads, uint_t linger,
+                pthread_attr_t *attr)
+{
+    thr_pool_t  *pool;
+
+    (void) sigfillset(&fillset);
+
+    if (min_threads > max_threads || max_threads < 1) {
+        errno = EINVAL;
+        return (NULL);
+    }
+
+    if ((pool = malloc(sizeof (*pool))) == NULL) {
+        errno = ENOMEM;
+        return (NULL);
+    }
+    (void) pthread_mutex_init(&pool->pool_mutex, NULL);
+    (void) pthread_cond_init(&pool->pool_busycv, NULL);
+    (void) pthread_cond_init(&pool->pool_workcv, NULL);
+    (void) pthread_cond_init(&pool->pool_waitcv, NULL);
+    pool->pool_active = NULL;
+    pool->pool_head = NULL;
+    pool->pool_tail = NULL;
+    pool->pool_flags = 0;
+    pool->pool_linger = linger;
+    pool->pool_minimum = min_threads;
+    pool->pool_maximum = max_threads;
+    pool->pool_nthreads = 0;
+    pool->pool_idle = 0;
+
+    /*
+     * We cannot just copy the attribute pointer.
+     * We need to initialize a new pthread_attr_t structure using
+     * the values from the caller-supplied attribute structure.
+     * If the attribute pointer is NULL, we need to initialize
+     * the new pthread_attr_t structure with default values.
+     */
+    clone_attributes(&pool->pool_attr, attr);
+
+    /* insert into the global list of all thread pools */
+    (void) pthread_mutex_lock(&thr_pool_lock);
+    if (thr_pools == NULL) {
+        pool->pool_forw = pool;
+        pool->pool_back = pool;
+        thr_pools = pool;
+    } else {
+        thr_pools->pool_back->pool_forw = pool;
+        pool->pool_forw = thr_pools;
+        pool->pool_back = thr_pools->pool_back;
+        thr_pools->pool_back = pool;
+    }
+    (void) pthread_mutex_unlock(&thr_pool_lock);
+
+    return (pool);
+}
+
+int
+thr_pool_queue(thr_pool_t *pool, void *(*func)(void *), void *arg)
+{
+    job_t *job;
+
+    if ((job = malloc(sizeof (*job))) == NULL) {
+        errno = ENOMEM;
+        return (-1);
+    }
+    job->job_next = NULL;
+    job->job_func = func;
+    job->job_arg = arg;
+
+    (void) pthread_mutex_lock(&pool->pool_mutex);
+
+    if (pool->pool_head == NULL)
+        pool->pool_head = job;
+    else
+        pool->pool_tail->job_next = job;
+    pool->pool_tail = job;
+
+    if (pool->pool_idle > 0)
+        (void) pthread_cond_signal(&pool->pool_workcv);
+    else if (pool->pool_nthreads < pool->pool_maximum &&
+             create_worker(pool) == 0)
+        pool->pool_nthreads++;
+
+    (void) pthread_mutex_unlock(&pool->pool_mutex);
+    return (0);
+}
+
+void
+thr_pool_wait(thr_pool_t *pool)
+{
+    (void) pthread_mutex_lock(&pool->pool_mutex);
+    pthread_cleanup_push((void *)pthread_mutex_unlock, &pool->pool_mutex);
+    while (pool->pool_head != NULL || pool->pool_active != NULL) {
+        pool->pool_flags |= POOL_WAIT;
+        (void) pthread_cond_wait(&pool->pool_waitcv, &pool->pool_mutex);
+    }
+    pthread_cleanup_pop(1); /* pthread_mutex_unlock(&pool->pool_mutex); */
+}
+
+void
+thr_pool_destroy(thr_pool_t *pool)
+{
+    active_t *activep;
+    job_t *job;
+
+    (void) pthread_mutex_lock(&pool->pool_mutex);
+    pthread_cleanup_push((void *)pthread_mutex_unlock, &pool->pool_mutex);
+
+    /* mark the pool as being destroyed; wakeup idle workers */
+    pool->pool_flags |= POOL_DESTROY;
+    (void) pthread_cond_broadcast(&pool->pool_workcv);
+
+    /* cancel all active workers */
+    for (activep = pool->pool_active;
+         activep != NULL;
+         activep = activep->active_next)
+        (void) pthread_cancel(activep->active_tid);
+
+    /* wait for all active workers to finish */
+    while (pool->pool_active != NULL) {
+        pool->pool_flags |= POOL_WAIT;
+        (void) pthread_cond_wait(&pool->pool_waitcv, &pool->pool_mutex);
+    }
+
+    /* the last worker to terminate will wake us up */
+    while (pool->pool_nthreads != 0)
+        (void) pthread_cond_wait(&pool->pool_busycv, &pool->pool_mutex);
+
+    pthread_cleanup_pop(1); /* pthread_mutex_unlock(&pool->pool_mutex); */
+
+    /*
+     * Unlink the pool from the global list of all pools.
+     */
+    (void) pthread_mutex_lock(&thr_pool_lock);
+    if (thr_pools == pool)
+        thr_pools = pool->pool_forw;
+    if (thr_pools == pool)
+        thr_pools = NULL;
+    else {
+        pool->pool_back->pool_forw = pool->pool_forw;
+        pool->pool_forw->pool_back = pool->pool_back;
+    }
+    (void) pthread_mutex_unlock(&thr_pool_lock);
+
+    /*
+     * There should be no pending jobs, but just in case...
+     */
+    for (job = pool->pool_head; job != NULL; job = pool->pool_head) {
+        pool->pool_head = job->job_next;
+        free(job);
+    }
+    (void) pthread_attr_destroy(&pool->pool_attr);
+    free(pool);
+}
+
+
+/*
+ *  ICEE
+ */
+
+thr_pool_t *icee_pool;
+
+typedef struct icee_remoteinfo_rec
+{
+    icee_contactinfo_rec_t *contact;
+    int num_parallel;
+} icee_remoteinfo_rec_t;
+
+icee_remoteinfo_rec_t *remote_info;
+
+static int
+icee_contactinfo_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
+{
+    log_debug ("%s\n", __FUNCTION__);
+
+    icee_contactinfo_rec_ptr_t event = vevent;
+    if (adios_verbose_level > 5) 
+        icee_contactinfo_print(event);
+
+    icee_contactinfo_rec_ptr_t prev = NULL;
+    int num_parallel = 0;    
+    while (event != NULL)
+    {
+        icee_contactinfo_rec_t *c = malloc(sizeof(icee_contactinfo_rec_t));
+        c->stone_id = event->stone_id;
+        c->contact_string = strdup(event->contact_string);
+        c->next = NULL;
+
+        if (num_parallel == 0)
+            remote_info[n_client].contact = c;
+        else
+            prev->next = c;
+
+        prev = c;
+        num_parallel++;
+        event = event->next;
+    }
+
+    remote_info[n_client].num_parallel = num_parallel;
+    log_debug ("%s (%d)\n", "num_parallel", num_parallel);
+
+    n_client++;
+
+    return 1;
+}
+
+void *dosubmit(icee_fileinfo_rec_t *fp)  
+{
+    if (adios_verbose_level > 5) 
+        DUMP("threadid is %lu, submitting %d(%s)", 
+             (unsigned long)pthread_self(), fp->varinfo->varid, fp->varinfo->varname);
+
+    int i;
+    for (i=0; i<max_client; i++)
+    {
+        int k = rand() % remote_info[i].num_parallel;
+        EVsubmit(source[i][k], fp, NULL);
+    }
+
+    
+    icee_varinfo_rec_ptr_t vp = fp->varinfo;
+    free(vp->varname);
+    free(vp->gdims);
+    free(vp->ldims);
+    free(vp->offsets);
+    free(fp);
+    
+    return NULL;  
+}  
+
+void 
+on_icee_passivecheckin_request (CManager cm, CMConnection conn, icee_passivecheckin_rec_t *m)
+{
+    log_debug("%s\n", __FUNCTION__);
+
+    icee_write_cm_conn = conn; // save connection
+    n_client++;
+
+    return;
+}
+
+// Initializes icee write local data structures
+extern void 
+adios_icee_init(const PairStruct *params, struct adios_method_struct *method) 
+{
+    log_debug ("%s\n", __FUNCTION__);
+
+    int cm_port = 59999;
+    char *cm_host = "localhost";
+    char *cm_attr = NULL;
+    icee_transport_t icee_transport = TCP;
+
+    int rank;
+    MPI_Comm_rank(method->init_comm, &rank);
+    log_debug ("rank : %d\n", rank);
+    
+
+    const PairStruct * p = params;
+
+    while (p)
+    {
+        if (!strcasecmp (p->name, "cm_attr"))
+        {
+            cm_attr = p->value;
+        }
+        else if (!strcasecmp (p->name, "cm_host"))
+        {
+            cm_host = p->value;
+        }
+        else if (!strcasecmp (p->name, "cm_port"))
+        {
+            cm_port = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "cm_list"))
+        {
+            char **plist;
+            int plen = 16;
+
+            plist = malloc(plen * sizeof(char *));
+
+            char* token = strtok(p->value, ",");
+            int len = 0;
+            while (token) 
+            {
+                plist[len] = token;
+
+                token = strtok(NULL, ",");
+                len++;
+
+                if (len > plen)
+                {
+                    plen = plen*2;
+                    plist = realloc (plist, plen * sizeof(char *));
+                }
+            }
+
+            char *myparam = plist[rank % len];
+            token = strtok(myparam, ":");
+
+            if (myparam[0] == ':')
+            {
+                cm_port = atoi(token);
+            }
+            else
+            {
+                cm_host = token;
+                token = strtok(NULL, ":");
+                cm_port = atoi(token);
+            }
+
+            free(plist);
+        }
+        else if (!strcasecmp (p->name, "reverse_dim"))
+        {
+            reverse_dim = 1;
+        }
+        else if (!strcasecmp (p->name, "max_client"))
+        {
+            max_client = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "num_parallel"))
+        {
+            icee_num_parallel = atoi(p->value);
+        }
+        else if (!strcasecmp (p->name, "transport"))
+        {
+            if (strcasecmp(p->value, "TCP") == 0)
+                icee_transport = TCP;
+            else if (strcasecmp(p->value, "ENET") == 0)
+                icee_transport = ENET;
+            else if (strcasecmp(p->value, "NNTI") == 0)
+                icee_transport = NNTI;
+            else if (strcasecmp(p->value, "IB") == 0)
+                icee_transport = IB;
+            else
+                log_error ("No support: %s\n", p->value);
+        }
+        else if (!strcasecmp (p->name, "is_passive"))
+        {
+            is_cm_passive = atoi(p->value);
+        }
+
+        p = p->next;
+    }
+
+    //log_info ("cm_attr : %s\n", cm_attr);
+    //log_info ("cm_host : %s\n", cm_host);
+    log_info ("cm_port : %d\n", cm_port);
+    log_debug ("parallel writing : %d\n", icee_num_parallel);
+    log_debug ("transport : %s\n", icee_transport_name[icee_transport]);
+
+    if (!adios_icee_initialized)
+    {
+
+        // Init parallel
+        if (icee_num_parallel > 1)
+        {
+            pthread_attr_t attr;  
+            pthread_attr_init(&attr);  
+            pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);  
+            icee_pool = thr_pool_create(icee_num_parallel,icee_num_parallel,10,NULL);  
+        }
+
+        EVstone stone, remote_stone;
+        attr_list contact_list;
+
+        icee_write_cm = CManager_create();
+        //CMlisten(icee_write_cm);
+
+#if 0
+        if (is_cm_passive == 1)
+        {
+            wpcm = CManager_create();
+
+            attr_list attr = create_attr_list();
+            add_int_attr(attr, attr_atom_from_string("IP_PORT"), cm_passive_port);
+
+            CMlisten_specific(wpcm, attr);
+            DUMP("Passive mode at port %d.", cm_passive_port);
+            
+            CMFormat fm = CMregister_format(wpcm, icee_passivecheckin_format_list);
+            CMregister_handler(fm, icee_passivecheckin_request_handler, on_icee_passivecheckin_request);
+
+            fm_fileinfo = CMregister_format(wpcm, icee_fileinfo_format_list);
+
+            while (n_client < max_client) {
+                /* do some work here */
+                usleep(0.1*1E7);
+                CMpoll_network(wpcm);
+                log_debug("Num. of client: %d\n", n_client);
+            }
+
+            goto done;
+        }
+#endif
+        
+        contact_list = create_attr_list();
+        switch (icee_transport)
+        {
+        case ENET:
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("CM_TRANSPORT"), 
+                            "enet");
+            add_int_attr(contact_list, 
+                         attr_atom_from_string("CM_ENET_PORT"), 
+                         cm_port);
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("CM_ENET_HOST"), 
+                            cm_host);
+            break;
+        case NNTI:
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("CM_TRANSPORT"), 
+                            "nnti");
+            add_int_attr(contact_list, 
+                         attr_atom_from_string("NNTI_PORT"), 
+                         cm_port);
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("CM_NNTI_TRANSPORT"), 
+                            "ib");
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("IP_HOST"), 
+                            cm_host);
+            break;
+        case IB:
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("CM_TRANSPORT"), 
+                            "ib");
+            add_int_attr(contact_list, 
+                         attr_atom_from_string("IP_PORT"), 
+                         cm_port);
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("IP_HOST"), 
+                            cm_host);
+            break;
+        default:
+            add_int_attr(contact_list, 
+                         attr_atom_from_string("IP_PORT"), 
+                         cm_port);
+            add_string_attr(contact_list, 
+                            attr_atom_from_string("IP_HOST"), 
+                            cm_host);
+            break;
+        }
+
+        if (CMlisten_specific(icee_write_cm, contact_list) == 0) 
+        {
+            fprintf(stderr, "error: unable to initialize connection manager.\n");
+            exit(-1);
+        }
+        //free_attr_list(contact_list);
+
+        stone = EValloc_stone(icee_write_cm);
+        char *string_list;
+        string_list = attr_list_to_string(CMget_contact_list(icee_write_cm));
+        log_info("Contact list \"%d:%s\"\n", stone, string_list);
+        free(string_list);
+
+        if ((adios_verbose_level > 5) || (icee_transport == NNTI))
+            dump_attr_list(CMget_contact_list(icee_write_cm));
+
+
+        EVassoc_terminal_action(icee_write_cm, stone, icee_contactinfo_format_list, icee_contactinfo_handler, NULL);
+
+        MYCALLOC(remote_info, max_client, sizeof(icee_remoteinfo_rec_t));
+        
+        if (is_cm_passive == 1)
+        {
+            CMFormat fm;
+            fm = CMregister_format(icee_write_cm, icee_passivecheckin_format_list);
+            CMregister_handler(fm, icee_passivecheckin_request_handler, on_icee_passivecheckin_request);
+
+            CMregister_format(icee_write_cm, icee_fileinfo_format_list);
+        }
+
+        while (n_client < max_client) {
+            /* do some work here */
+            usleep(0.1*1E7);
+            CMpoll_network(icee_write_cm);
+            log_debug("Num. of client: %d\n", n_client);
+        }
+
+        if (is_cm_passive == 1)
+            goto done;
+
+        EVstone split_stone;
+        EVaction split_action;
+        split_stone = EValloc_stone(icee_write_cm);
+        split_action = EVassoc_split_action(icee_write_cm, split_stone, NULL);
+
+        int i;
+        for (i=0; i<max_client; i++)
+        {
+            icee_contactinfo_rec_t *cinfo = remote_info[i].contact;
+
+            int k = 0;
+            while (cinfo != NULL)
+            {
+                stone = EValloc_stone(icee_write_cm);
+                remote_stone = cinfo->stone_id;
+                contact_list = attr_list_from_string(cinfo->contact_string);
+
+                EVaction evaction;
+                evaction = EVassoc_bridge_action(icee_write_cm, stone, 
+                                                 contact_list, remote_stone);
+                if (evaction == -1)
+                {
+                    fprintf(stderr, "No connection. Exit.\n");
+                    exit(1);
+                }
+
+                EVaction_add_split_target(icee_write_cm, split_stone, split_action, stone);
+                cinfo = cinfo->next;
+                k++;
+            }
+            assert(k == remote_info[i].num_parallel);
+        }
+        icee_write_source = EVcreate_submit_handle(icee_write_cm, split_stone, icee_fileinfo_format_list);
+
+        // Initialization for parallel submit
+        if (icee_num_parallel > 1)
+        {
+            srand(time(NULL));
+
+            cm = malloc(max_client * sizeof(CManager[ICEE_MAX_PARALLEL]));
+            source = malloc(max_client * sizeof(EVsource[ICEE_MAX_PARALLEL]));
+
+            for (i=0; i<max_client; i++)
+            {
+                icee_contactinfo_rec_t *cinfo = remote_info[i].contact;
+
+                int k = 0;
+                while (cinfo != NULL)
+                {
+                    cm[i][k] = CManager_create();
+                    CMlisten(cm[i][k]);
+
+                    stone = EValloc_stone(cm[i][k]);
+                    remote_stone = cinfo->stone_id;
+                    contact_list = attr_list_from_string(cinfo->contact_string);
+                    
+                    EVassoc_bridge_action(cm[i][k], stone, contact_list, remote_stone);
+                    source[i][k] = EVcreate_submit_handle(cm[i][k], stone, icee_fileinfo_format_list);
+
+                    cinfo = cinfo->next;
+                    k++;
+                }
+                assert(k == remote_info[i].num_parallel);
+            }
+        }
+    done:
+        adios_icee_initialized = 1;
+    }
+}
+
+extern int 
+adios_icee_open(struct adios_file_struct *fd, 
+                struct adios_method_struct *method, 
+                MPI_Comm comm) 
+{    
+    log_debug ("%s\n", __FUNCTION__);
+
+    if( fd == NULL || method == NULL) {
+        perror("open: Bad input parameters\n");
+        return -1;
+    }
+
+    if (fp == NULL)
+        MYCALLOC(fp, 1, sizeof(icee_fileinfo_rec_t));
+    
+    fp->fname = fd->name;
+    MPI_Comm_size(comm, &(fp->comm_size));
+    MPI_Comm_rank(comm, &(fp->comm_rank));
+    fp->timestep = timestep++;
+
+    return 0;
+}
+
+//  writes data to multiqueue
+extern void
+adios_icee_write(
+    struct adios_file_struct *fd, 
+    struct adios_var_struct *f, 
+    void *data, 
+    struct adios_method_struct *method) 
+{
+    log_debug ("%s\n", __FUNCTION__);
+
+    if( fd == NULL || method == NULL) {
+        perror("open: Bad input parameters\n");
+    }
+
+    icee_varinfo_rec_ptr_t vp = fp->varinfo;
+    icee_varinfo_rec_ptr_t prev = NULL;
+
+    while (vp != NULL)
+    {
+        prev = vp;
+        vp = vp->next;
+    }
+
+    MYCALLOC(vp, 1, sizeof(icee_varinfo_rec_t));
+
+    if (prev == NULL)
+        fp->varinfo = vp;
+    else
+        prev->next = vp;
+
+    if (f->path[0] == '\0')
+        vp->varname = strdup(f->name);
+    else
+    {
+        char buff[80];
+        sprintf(buff, "%s/%s", f->path, f->name);
+        vp->varname = strdup(buff);
+    }
+
+    vp->varid = f->id;
+    vp->type = f->type;
+    vp->typesize = adios_get_type_size(f->type, ""); 
+
+    vp->ndims = count_dimensions(f->dimensions);
+
+    vp->varlen = vp->typesize;
+    if (vp->ndims > 0)
+    {
+        vp->gdims = calloc(vp->ndims, sizeof(uint64_t));
+        vp->ldims = calloc(vp->ndims, sizeof(uint64_t));
+        vp->offsets = calloc(vp->ndims, sizeof(uint64_t));
+        
+        struct adios_dimension_struct *d = f->dimensions;
+        // Default: Fortran. 
+        if (reverse_dim)
+        {
+            int i;
+            for (i = vp->ndims-1; i >= 0; --i)
+            {
+                vp->gdims[i] = adios_get_dim_value(&d->global_dimension);
+                vp->ldims[i] = adios_get_dim_value(&d->dimension);
+                vp->offsets[i] = adios_get_dim_value(&d->local_offset);
+                
+                vp->varlen *= vp->ldims[i];
+                
+                d = d->next;
+            }
+        }
+        else
+        {
+            int i;
+            for (i = 0; i < vp->ndims; ++i)
+            {
+                vp->gdims[i] = adios_get_dim_value(&d->global_dimension);
+                vp->ldims[i] = adios_get_dim_value(&d->dimension);
+                vp->offsets[i] = adios_get_dim_value(&d->local_offset);
+                
+                vp->varlen *= vp->ldims[i];
+                
+                d = d->next;
+            }
+        }
+    }
+    
+    vp->data = f->data;
+    if (adios_verbose_level > 5) icee_varinfo_print(vp);
+
+    fp->nvars++;
+}
+
+extern void 
+adios_icee_close(struct adios_file_struct *fd, struct adios_method_struct *method) 
+{
+    log_debug ("%s\n", __FUNCTION__);
+
+    if( fd == NULL || method == NULL) {
+        perror("open: Bad input parameters\n");
+    }
+
+    // Write data to the network
+    if (icee_num_parallel > 1)
+    {
+        icee_varinfo_rec_ptr_t vp = fp->varinfo;
+        icee_varinfo_rec_ptr_t prev = NULL;
+
+        int comm_nvars = fp->nvars;
+#ifndef _NOMPI
+        MPI_Allreduce(MPI_IN_PLACE, &comm_nvars, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+#endif
+
+        while (vp != NULL)
+        {
+            prev = vp;
+            vp = vp->next;
+
+            icee_fileinfo_rec_ptr_t p = malloc(sizeof(icee_fileinfo_rec_t));
+            memcpy(p, fp, sizeof(icee_fileinfo_rec_t));
+
+            p->nchunks = comm_nvars;
+            p->varinfo = prev;
+            prev->next = NULL;
+
+            thr_pool_queue(icee_pool, (void*)dosubmit, (void*) p);
+        }
+
+        thr_pool_wait(icee_pool);
+    }
+    else
+    {
+        fp->nchunks = fp->comm_size;
+
+        if (!is_cm_passive)
+            EVsubmit(icee_write_source, fp, NULL);
+        else
+        {
+            CMFormat fm = CMlookup_format(icee_write_cm, icee_fileinfo_format_list);
+            if (CMwrite(icee_write_cm_conn, fm, (void*)fp) != 1)
+                log_error ("Sending fileinfo failed\n");
+        }
+
+        // Free
+        icee_varinfo_rec_ptr_t vp = fp->varinfo;
+        while (vp != NULL)
+        {
+            free(vp->varname);
+            free(vp->gdims);
+            free(vp->ldims);
+            free(vp->offsets);
+            
+            icee_varinfo_rec_ptr_t prev = vp;
+            vp = vp->next;
+            
+            free(prev);
+        }
+    }
+
+done:
+    free(fp);
+    fp = NULL;
+}
+
+// wait until all open files have finished sending data to shutdown
+extern void 
+adios_icee_finalize(int mype, struct adios_method_struct *method) 
+{
+    log_debug ("%s\n", __FUNCTION__);
+
+    if (adios_icee_initialized)
+    {
+        CManager_close(icee_write_cm);
+
+        if (icee_num_parallel > 1)
+        {
+            int i, k;
+            for (i=0; i<max_client; i++)
+                for (k=0; k<remote_info[i].num_parallel; k++)
+                    CManager_close(cm[i][k]);
+            
+            free(cm);
+            free(source);
+        }
+        adios_icee_initialized = 0;
+    }
+}
+
+// provides unknown functionality
+extern enum ADIOS_FLAG 
+adios_icee_should_buffer (struct adios_file_struct * fd,struct adios_method_struct * method) 
+{
+    return adios_flag_no;
+}
+
+// provides unknown functionality
+extern void 
+adios_icee_end_iteration(struct adios_method_struct *method) 
+{
+}
+
+// provides unknown functionality
+extern void 
+adios_icee_start_calculation(struct adios_method_struct *method) 
+{
+}
+
+// provides unknown functionality
+extern void 
+adios_icee_stop_calculation(struct adios_method_struct *method) 
+{
+}
+
+// provides unknown functionality
+extern void 
+adios_icee_get_write_buffer(struct adios_file_struct *fd, 
+                            struct adios_var_struct *v, 
+                            uint64_t *size, 
+                            void **buffer, 
+                            struct adios_method_struct *method) 
+{
+}
+
+// should not be called from write, reason for inclusion here unknown
+void 
+adios_icee_read(struct adios_file_struct *fd, 
+                struct adios_var_struct *f, 
+                void *buffer, 
+                uint64_t buffer_size, 
+                struct adios_method_struct *method) 
+{
+}
+
+#else // print empty version of all functions (if HAVE_ICEE == 0)
+
+void 
+adios_icee_read(struct adios_file_struct *fd, 
+                struct adios_var_struct *f, 
+                void *buffer, 
+                struct adios_method_struct *method) 
+{
+}
+
+extern void 
+adios_icee_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_icee_stop_calculation(struct adios_method_struct *method) 
+{
+}
+
+extern void 
+adios_icee_start_calculation(struct adios_method_struct *method) 
+{
+}
+
+extern void 
+adios_icee_end_iteration(struct adios_method_struct *method) 
+{
+}
+
+#endif
+
diff --git a/src/write/adios_mpi_amr.c b/src/write/adios_mpi_amr.c
index e312410..af043dc 100644
--- a/src/write/adios_mpi_amr.c
+++ b/src/write/adios_mpi_amr.c
@@ -30,6 +30,10 @@
 #include "core/util.h"
 #include "core/adios_logger.h"
 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#include "core/adios_timing.h"
+#endif
+
 
 enum ADIOS_MPI_AMR_IO_TYPE
 {
@@ -59,14 +63,14 @@ static int adios_mpi_amr_initialized = 0;
 
 
 
-#ifdef SKEL_TIMING
-#define START_TIMER(t) adios_timing_go (fd->timing_obj, (t) ) 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define START_TIMER(t) adios_timing_go (fd->group->timing_obj, (t) ) 
 #else
 #define START_TIMER(t) ; 
 #endif
 
-#ifdef SKEL_TIMING
-#define STOP_TIMER(t) adios_timing_stop (fd->timing_obj, (t) )
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define STOP_TIMER(t) adios_timing_stop (fd->group->timing_obj, (t) )
 #else
 #define STOP_TIMER(t) ;
 #endif
@@ -100,11 +104,14 @@ struct adios_MPI_data_struct
     int is_color_set; // whether 'color' is set from XML.
     int g_color1;
     int g_color2;
+    MPI_Comm g_comm1;
+    MPI_Comm g_comm2;
     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;
+    struct adios_MPI_thread_data_reopen * reopen_thread_data;
     enum ADIOS_MPI_AMR_IO_TYPE g_io_type;
 };
 
@@ -114,6 +121,12 @@ struct adios_MPI_thread_data_open
     char * parameters;
 };
 
+struct adios_MPI_thread_data_reopen
+{
+    struct adios_MPI_data_struct * md;
+    struct adios_file_struct * fd;
+};
+
 struct adios_MPI_thread_data_write
 {
     MPI_File * fh;
@@ -246,33 +259,50 @@ int * parseOSTSkipping (int * ost_list, char * str, int n_ost)
 #ifdef HAVE_FGR
 int find_myost (MPI_Comm comm)
 {
-    uint32_t * nids, * osts, myid;
-    int i, nnids = get_unique_nids (comm, nids);
+    uint32_t * nids, * osts, myid, ost_id;
+    int i, nnids = get_unique_nids (comm, &nids);
+
     osts = (uint32_t *) malloc (nnids * 4);
 
     if (fgr_nid2ost (nids, osts, nnids, ATLAS) == true)
     {
-        uint32_t mynid = nid_atoi();
+/*
+int rank;
+MPI_Comm_rank (MPI_COMM_WORLD, &rank);
+if (rank == 0)
+{         
+        printf ("nids:");
+        for (i = 0; i < nnids; i++)
+        {
+            printf ("%d:%d ", nids[i], osts[i]);
+        }
+        printf ("\n");
+}
+*/
+        myid = nid_atoi();
         for (i = 0; i < nnids; i++)
         {
             if (nids[i] == myid)
             {
+                ost_id = osts[i];
                 break;
             }
         }
 
         if (i == nnids)
         {
+printf ("something is wrong\n");
             // something is wrong
         }
 
         free (nids);
         free (osts);
-    
-        return i;
+#define ATLAS_OFFSET 1008
+        return (ost_id >= ATLAS_OFFSET ? ost_id - ATLAS_OFFSET : ost_id);
     }
     else
     {
+printf ("something is wrong with FGR\n");
         free (nids);
         free (osts);
         return -1;
@@ -416,13 +446,14 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
         }
 
 #ifdef HAVE_FGR
-       int ost_id = find_myost (md->group_comm);
+       int ost_id = find_myost (md->g_comm2);
        if (ost_id >= 0)
        {
            lum.lmm_stripe_offset = ost_id;
        }
        else
        {
+printf ("why is here\n");
            lum.lmm_stripe_offset = (random_offset_flag ? -1 : i);
        }
 #else
@@ -439,7 +470,9 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
         close(fd);
     }
     else
-        log_warn("MPI_AMR method: open to set lustre striping failed on file %s %s.\n",filename,strerror(errno));
+    {
+        log_warn("MPI_AMR method: open to set lustre striping failed on file %s %s rank = %d.\n",filename,strerror(errno), md->rank);
+    }
 }
 
 static void
@@ -690,13 +723,14 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
                 md->g_color2 = (rank - (aggr_group_size + 1) * remain)% aggr_group_size;
             }
         }
+
+        MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &md->g_comm1);
+        MPI_Comm_split (md->group_comm, md->g_color2, md->rank, &md->g_comm2);
     }
     else // if color is set
     {
-        MPI_Comm new_comm;
-
-        MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &new_comm);
-        MPI_Comm_rank (new_comm, &md->g_color2);
+        MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &md->g_comm1);
+        MPI_Comm_rank (md->g_comm1, &md->g_color2);
     }
 }
 
@@ -814,13 +848,21 @@ 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_struct_v1 * index
+void adios_mpi_amr_add_offset (uint64_t pg_offset_to_add, 
+                               uint64_t var_offset_to_add,
+                               uint64_t attr_offset_to_add,
+                               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;
+    while (pg_root)
+    {
+        pg_root->offset_in_file += pg_offset_to_add;
+        pg_root = pg_root->next;
+    }
+
     while (vars_root)
     {
         vars_root->characteristics [0].offset += var_offset_to_add;
@@ -942,6 +984,98 @@ void * adios_mpi_amr_do_open_thread (void * param)
     return NULL;
 }
 
+// reopen a subfile for append and read/build the existing index
+void * adios_mpi_amr_do_reopen_thread (void * param)
+{
+    struct adios_MPI_thread_data_reopen * td = (struct adios_MPI_thread_data_reopen *) param;
+    struct adios_MPI_data_struct * md = td->md;
+    struct adios_file_struct * fd = td->fd;
+    int err;
+
+    // open for read/write because we keep it open for all writing later
+    err = MPI_File_open (MPI_COMM_SELF, td->md->subfile_name, 
+                         MPI_MODE_RDWR, MPI_INFO_NULL, &td->md->fh);
+
+    if (err == MPI_SUCCESS) 
+    {
+        // read in the index
+        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->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->index->pg_root;
+        while (p)
+        {
+            if (p->time_index > max_time_index)
+                max_time_index = p->time_index;
+            p = p->next;
+        }
+        fd->group->time_index = ++max_time_index;
+
+        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->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, 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->index->attrs_root);
+
+        fd->base_offset = md->b.end_of_pgs;
+        fd->pg_start_in_file = fd->base_offset;
+        /*log_debug ("rank %d: APPEND: end_of_pgs=%llu bytes_written=%llu pg_start_in_file=%llu"
+                  "  write_size_bytes=%llu  pg_index_offset=%llu\n", md->rank, 
+                  md->b.end_of_pgs, fd->bytes_written, td->fd->pg_start_in_file, 
+                  td->fd->write_size_bytes, md->b.pg_index_offset);*/
+    } 
+    else 
+    {
+        // create as write-only now
+        err = MPI_File_open (MPI_COMM_SELF, td->md->subfile_name
+                ,MPI_MODE_WRONLY | MPI_MODE_CREATE
+                ,MPI_INFO_NULL
+                ,&td->md->fh
+                );
+
+        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",
+                    td->md->subfile_name, e);
+            td->md->fh = NULL;
+        }
+        /* FIXME: how does this error propagate back to the user and later adios calls? */
+
+        md->b.file_size = 0;
+    }
+
+    return NULL;
+}
 
 void * adios_mpi_amr_do_write_thread (void * param)
 {
@@ -1002,6 +1136,7 @@ void adios_mpi_amr_init (const PairStruct * parameters
     md->g_offsets = 0;
     md->g_ost_skipping_list = 0;
     md->open_thread_data = 0;
+    md->reopen_thread_data = 0;
     md->g_io_type = ADIOS_MPI_AMR_IO_BG;
 
     adios_buffer_struct_init (&md->b);
@@ -1016,7 +1151,7 @@ void adios_mpi_amr_init (const PairStruct * parameters
 
 
 
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 // 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;
@@ -1042,7 +1177,8 @@ int adios_mpi_amr_open (struct adios_file_struct * fd
     }
 
     fd->group->process_id = md->rank;
-#ifdef SKEL_TIMING
+    
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     int timer_count = 6;
     char ** timer_names = (char**) malloc (timer_count * sizeof (char*) );
     timer_names [0] = "Communication";
@@ -1052,9 +1188,25 @@ int adios_mpi_amr_open (struct adios_file_struct * fd
     timer_names [4] = "ad_close";
     timer_names [5] = "ad_should_buffer";
 
-    fd->timing_obj = adios_timing_create (timer_count, timer_names);
+
+    // Ensure both timing objects exist
+    // timing_obj should get created at every open
+    // prev_timing_obj should only be created at the first open
+    if (fd->group)
+    {
+        if (!fd->group->timing_obj)
+            fd->group->timing_obj = adios_timing_create (timer_count, timer_names);
+
+        if (!fd->group->prev_timing_obj)
+            fd->group->prev_timing_obj = adios_timing_create (timer_count, timer_names);
+    }
+
+
 #endif
 
+    // need to dealloc/realloc buffer because of supporting append mode
+    // b.length and others won't be re-initialized otherwise.
+    adios_buffer_struct_clear (&md->b);
 
     // we have to wait for the group_size (should_buffer)
     // to calculate stripe sizes from output sizes of the processes
@@ -1096,6 +1248,29 @@ void build_offsets (struct adios_bp_buffer_struct_v1 * b
 }
 */
 
+static char * get_subfile_name (char *base_path, char *filename, int color)
+{
+    char *ch, *name_no_path, *subfilename;
+    // Check if fd->name contains path
+    if ( (ch = strrchr (filename, '/')) )
+    {
+        name_no_path = malloc (strlen (ch + 1) + 1); 
+        strcpy (name_no_path, ch + 1); 
+    }
+    else
+    {
+        name_no_path = malloc (strlen (filename) + 1);
+        strcpy (name_no_path, filename);
+    }
+
+    subfilename = malloc (strlen (base_path) + strlen (filename) + 5 + 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 (subfilename, "%s%s%s%s.%d", base_path, filename, ".dir/", name_no_path, color);
+    free (name_no_path);
+    return subfilename;
+}
+
 enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                             ,struct adios_method_struct * method
                                             )
@@ -1192,28 +1367,14 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                         adios_mpi_amr_do_mkdir (name);
                     }
                 }
+            
+                MPI_Barrier (md->g_comm2);
             }
 
-            // Check if fd->name contains path
-            if ( (ch = strrchr (fd->name, '/')) )
-            {
-                name_no_path = malloc (strlen (ch + 1) + 1); 
-                strcpy (name_no_path, ch + 1); 
-            }
-            else
-            {
-                name_no_path = malloc (strlen (fd->name) + 1);
-                strcpy (name_no_path, fd->name);
-            }
 
-            name = realloc (name, strlen (method->base_path) + strlen (fd->name) + 5 + 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", method->base_path, fd->name, ".dir/", name_no_path, md->g_color1);
-            md->subfile_name = strdup (name);
+            md->subfile_name = get_subfile_name (method->base_path, fd->name, md->g_color1);
             fd->subfile_index = (uint32_t)md->g_color1;
 
-            free (name_no_path);
 
             if (is_aggregator(md->rank))
             {
@@ -1285,251 +1446,114 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                 md->b.pg_index_offset = fd->write_size_bytes;
             }
 
+            /*log_debug ("rank %d: WRITE: end_of_pgs=%llu bytes_written=%llu pg_start_in_file=%llu"
+                      "  write_size_bytes=%llu  pg_index_offset=%llu\n", md->rank,
+                      md->b.end_of_pgs, fd->bytes_written, fd->pg_start_in_file, 
+                      fd->write_size_bytes, md->b.pg_index_offset);*/
             break;
         }
 
         case adios_mode_append:
         {
-            adios_error (err_invalid_file_mode, "MPI_AGGREGATE method: Append mode is not supported.\n");
-            break;
-#if 0
-            int previous;
-            int current;
-            int next;
-
-            if (md->rank == md->size - 1)
-                next = -1;
-            else
-                next = md->rank + 1;
-            previous = md->rank - 1;
-            current = md->rank;
-
-            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
-                                );
-
-            if (err != MPI_SUCCESS)
+            // rank 0 opens the global metadata (if that exists)
+            // we throw away the content because it's a replica of metadata present in subfiles
+            // so the index merging procedure will result in a complete metadata again
+            if (md->rank == 0)
             {
-                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)
-                {
-                    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;
-                }
-            }
+                struct lov_user_md lum;
+                int f;
+                md->g_num_ost = 1024; // default num_ost, maybe updated below
 
-            if (old_file)
-            {
-                if (md->group_comm == MPI_COMM_NULL || md->rank == 0)
+                // open metadata file
+                adios_mpi_amr_set_have_mdf (method->parameters, md);
+                if (md->g_have_mdf)
                 {
-                    if (err != MPI_SUCCESS)
+                    f = open(name, O_RDWR, 0644);
+                    if (f == -1)
                     {
-                        md->b.file_size = 0;
+                        adios_error (err_file_open_error,"MPI_AMR method: open() failed at append: %s\n", name);
+                        return -1;
                     }
-                    else
+
+#ifdef HAVE_LUSTRE
+                    struct obd_uuid uuids[1024];
+                    int rc;
+                    rc = llapi_lov_get_uuids(f, uuids, &md->g_num_ost);
+                    if (rc != 0)
                     {
-                        MPI_Offset file_size;
-                        MPI_File_get_size (md->fh, &file_size);
-                        md->b.file_size = file_size;
+                        log_warn ("MPI_AMR method: Lustre get uuids failed after opening the file: %s\n" ,
+                                  strerror(errno));
                     }
 
-                    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->index->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->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
-                                  ,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->index->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;
+#endif 
+                    close (f);
+                    MPI_File_open (MPI_COMM_SELF, name, MPI_MODE_WRONLY ,MPI_INFO_NULL ,&md->mfh);
                 }
-
-                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
-                                    );
-                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
-                                    );
-            }
+            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); // is_aggregator() works after this
 
-            if (err != MPI_SUCCESS)
+            // Every aggregator opens a subfile and reads in the metadata
+            md->subfile_name = get_subfile_name (method->base_path, fd->name, md->g_color1);
+            fd->subfile_index = (uint32_t)md->g_color1;
+
+            if (fd->shared_buffer == adios_flag_no)
             {
-                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);
+                        "MPI_AMR method: append mode with no buffering is not implemented. File is %s\n", 
+                        name);
                 free (name);
 
                 return adios_flag_no;
-            }
-
-            if (md->group_comm != MPI_COMM_NULL)
+            } 
+            else // (fd->shared_buffer == adios_flag_yes)
             {
-                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
-                               );
-
-                    uint64_t last_offset = offsets [0];
-                    offsets [0] = fd->base_offset;
-                    for (i = 1; i < md->size; i++)
+                if (is_aggregator(md->rank))
+                {
+                    // open subfiles
+                    md->reopen_thread_data = (struct adios_MPI_thread_data_reopen *) 
+                        malloc (sizeof (struct adios_MPI_thread_data_reopen));
+                    md->reopen_thread_data->md = md;
+                    md->reopen_thread_data->fd = fd;
+
+                    // there is a MPI_Bcast in the function below, so this cannot be threaded as is now
+                    /*
+                       if (md->g_threading)
+                       {
+                       pthread_create (&md->g_sot, NULL,
+                       adios_mpi_amr_do_reopen_thread,
+                       (void *) md->reopen_thread_data);
+                       }
+                       else
+                     */
                     {
-                        uint64_t this_offset = offsets [i];
-                        offsets [i] = offsets [i - 1] + last_offset;
-                        last_offset = this_offset;
+                        //log_debug ("rank %d: APPEND: reopen subfile...\n", md->rank);
+                        adios_mpi_amr_do_reopen_thread ((void *) md->reopen_thread_data);
                     }
-                    md->b.pg_index_offset =   offsets [md->size - 1]
-                                            + last_offset;
-                    MPI_Scatter (offsets, 1, MPI_LONG_LONG
-                                ,MPI_IN_PLACE, 1, MPI_LONG_LONG
-                                ,0, md->group_comm
-                                );
-                    fd->base_offset = offsets [0];
+
+                    MPI_Bcast (&fd->group->time_index, 1, MPI_INT, 0, md->g_comm1);
+                    MPI_Bcast (&md->b.pg_index_offset, 1, MPI_INT, 0, md->g_comm1);
+                } 
+                else //non-aggregators
+                {
+                    fd->base_offset = 0;
                     fd->pg_start_in_file = fd->base_offset;
-                    free (offsets);
+                    MPI_Bcast (&fd->group->time_index, 1, MPI_INT, 0, md->g_comm1);
+                    MPI_Bcast (&md->b.pg_index_offset, 1, MPI_INT, 0, md->g_comm1);
                 }
-                else
-                {
-                    MPI_Offset offset;
-                    if (fd->write_size_bytes % md->striping_unit)
-                        offset =  (fd->write_size_bytes / md->striping_unit + 1)
-                                     * md->striping_unit;
-                    else
-                        offset = fd->write_size_bytes;
-
-
-                    MPI_Gather (&offset, 1, MPI_LONG_LONG
-                               ,0, 1, MPI_LONG_LONG
-                               ,0, md->group_comm
-                               );
 
-                    MPI_Scatter (0, 1, MPI_LONG_LONG
-                                ,&offset, 1, MPI_LONG_LONG
-                                ,0, md->group_comm
-                                );
-                    fd->base_offset = offset;
-                    fd->pg_start_in_file = fd->base_offset;
+                if (md->group_comm == MPI_COMM_NULL)
+                {
+                    // FIXME: what is this?
+                    md->b.pg_index_offset = fd->write_size_bytes;
                 }
             }
-            else
-            {
-                md->b.pg_index_offset = fd->write_size_bytes;
-            }
-
             break;
-#endif
         }
 
         default:
@@ -1616,7 +1640,6 @@ 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;
 
@@ -1624,16 +1647,16 @@ void adios_mpi_amr_write (struct adios_file_struct * fd
         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);
+        //MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &md->g_comm1);
+        MPI_Comm_rank (md->g_comm1, &new_rank);
+        MPI_Comm_size (md->g_comm1, &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);
+                   ,0, md->g_comm1);
 
         disp[0] = 0;
         for (i = 1; i < new_group_size; i++)
@@ -1659,7 +1682,7 @@ void adios_mpi_amr_write (struct adios_file_struct * fd
   
         MPI_Gatherv (fd->buffer, fd->bytes_written, MPI_BYTE
                     ,aggr_buff, bytes_written, disp, MPI_BYTE
-                    ,0, new_comm);
+                    ,0, md->g_comm1);
 
         fd->vars_written += new_group_size - 1;
 
@@ -1699,7 +1722,7 @@ void adios_mpi_amr_write (struct adios_file_struct * fd
             }
         }
 
-        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, new_comm);
+        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, md->g_comm1);
         v->write_offset = new_offsets[new_rank];
 
         fd->base_offset += count;
@@ -1923,33 +1946,31 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
     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_AMR Brigade IO\n");
             break;
         }
+        case adios_mode_append:
         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;
+            uint64_t index_start1;
             int * pg_sizes = 0, * disp = 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_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_color1, md->rank, &md->g_comm1);
+            MPI_Comm_rank (md->g_comm1, &new_rank);
+            MPI_Comm_size (md->g_comm1, &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);
+            //MPI_Comm_split (md->group_comm, md->g_color2, md->rank, &md->g_comm2);
+            MPI_Comm_rank (md->g_comm2, &new_rank2);
+            MPI_Comm_size (md->g_comm2, &new_group_size2);
             STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
             if (fd->shared_buffer == adios_flag_no)
@@ -2009,7 +2030,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gather (&fd->bytes_written, 1, MPI_INT
                                 ,bytes_written, 1, MPI_INT
-                                ,0, new_comm
+                                ,0, md->g_comm1
                                 );
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2036,7 +2057,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         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);
+                                ,0, md->g_comm1);
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         if (is_aggregator (md->rank))
@@ -2069,7 +2090,7 @@ void adios_mpi_amr_bg_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);
+                        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, md->g_comm1);
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         a->write_offset = new_offsets[new_rank];
 
@@ -2135,7 +2156,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Allgather (&pg_size, 1, MPI_INT
                               ,pg_sizes, 1, MPI_INT
-                              ,new_comm);
+                              ,md->g_comm1);
                 STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                 disp[0] = 0;
@@ -2149,38 +2170,28 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                 if (is_aggregator (md->rank))
                 {
-                    if (2 * max_data_size > MAX_AGG_BUF)
-                    {
-                        log_warn ("MPI_AMR method (BG): The max allowed aggregation "
-                                "buffer is %d bytes.\n"
-                                "But this ADIOS method needs %d bytes for aggregation\n",
-                                MAX_AGG_BUF, 2 * max_data_size);
-                    }
-
                     aggr_buff = malloc (max_data_size);
                     recv_buff = malloc (max_data_size);
                     if (aggr_buff == 0 || recv_buff == 0)
                     {
-                        adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
-                                    "2 x %d bytes for aggregation buffers.\n", 
+                        adios_error (err_no_memory, "MPI_AMR method (with brigade strategy): Cannot allocate "
+                                    "2 x %d bytes for aggregation buffers. "
+                                    "An aggregator process needs a buffer to hold one process' output for writing, "
+                                    "while it needs another buffer to concurrently receive another process' output for "
+                                    "subsequent writing.\n", 
                                     max_data_size);
                         return;
                     }
                 }
                 else
                 {
-                    if (max_data_size > MAX_AGG_BUF)
-                    {
-                        log_warn ("MPI_AMR method (BG): The max allowed aggregation "
-                                  "buffer is %d bytes.\n",
-                                  MAX_AGG_BUF);
-                    }
-
                     recv_buff = malloc (max_data_size);
                     if (recv_buff == 0)
                     {
-                        adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
-                                    "%d bytes for receive buffer.\n", 
+                        adios_error (err_no_memory, "MPI_AMR method (with brigade strategy): Cannot allocate "
+                                    "%d bytes for receive buffer in a non-aggregator process. "
+                                    "This method needs an extra buffer in every process to pass data along "
+                                    "towards the aggregator.\n", 
                                     max_data_size);
                         return;
                     }
@@ -2196,14 +2207,14 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         pthread_join (md->g_sot, NULL);
                     }
 
-                    index_start1 = 0;
+                    index_start1 = fd->pg_start_in_file;
                     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);
+                                      ,0, md->g_comm1, &request);
                             STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         }
 
@@ -2212,6 +2223,9 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         write_thread_data.aggr_buff = (i == 0) ? fd->buffer : aggr_buff;
                         write_thread_data.total_data_size = &pg_sizes[i];
 
+                        /*log_debug ("rank %d: Write PG to subfile %d, offset=%llu, size=%u\n", md->rank,
+                               fd->subfile_index, *write_thread_data.base_offset, 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);
@@ -2235,7 +2249,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     {
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Send (fd->buffer, pg_size, MPI_BYTE, new_rank - 1
-                                 ,0, new_comm);
+                                 ,0, md->g_comm1);
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     }
                     else
@@ -2245,17 +2259,17 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                             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->g_comm1, &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->g_comm1);
 
                             MPI_Wait (&request, &status);
                             // Send it to downstream rank
                             MPI_Send (recv_buff, pg_sizes[i], MPI_BYTE, new_rank - 1
-                                     ,0, new_comm);
+                                     ,0, md->g_comm1);
                             STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         }
                     }
@@ -2272,18 +2286,19 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             {
                 if (!is_aggregator(md->rank))
                 {
-                    uint64_t var_offset_to_add = 0, attr_offset_to_add = 0;
+                    uint64_t var_offset_to_add = md->b.pg_index_offset; // aggregator's starting offset (!0 on append)
+                    uint64_t attr_offset_to_add = md->b.pg_index_offset;
+                    uint64_t pg_offset_to_add = md->b.pg_index_offset;
 
                     for (i = 0; i < new_rank; i++)
                     {
                         attr_offset_to_add += pg_sizes[i];
                         var_offset_to_add += pg_sizes[i];
+                        pg_offset_to_add += pg_sizes[i];
                     }
 
-                    adios_mpi_amr_add_offset (var_offset_to_add
-                                             ,attr_offset_to_add
-                                             ,md->index
-                                             );
+                    adios_mpi_amr_add_offset (pg_offset_to_add, var_offset_to_add,
+                                              attr_offset_to_add, md->index);
                 }
 
                 // pg_sizes, disp are no longer needed from this point on.
@@ -2306,7 +2321,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
-                               ,0, new_comm
+                               ,0, md->g_comm1
                                );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2321,7 +2336,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     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->g_comm1
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2362,16 +2377,17 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 }
                 else
                 {
+
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
                                          ,0, md->index);
 
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
-                               ,0, new_comm
+                               ,0, md->g_comm1
                                );
                     MPI_Gatherv (buffer, buffer_size, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
-                                ,0, new_comm
+                                ,0, md->g_comm1
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 }
@@ -2380,8 +2396,22 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             // write out indexes in each subfile
             if (is_aggregator (md->rank))
             {
+
                 uint32_t flag = 0;
-                index_start = total_data_size;
+                uint64_t index_start; // = end of PGs, where the index starts
+                index_start  = md->b.pg_index_offset; // = end of PGs of previous timesteps
+                index_start += total_data_size; //old index start before append + currently written PGs
+                /*DEBUG*/
+                /*log_debug ("rank %d: write index start=%llu  pg_index_offset=%llu  total_data_size=%u\n", 
+                        md->rank, index_start, md->b.pg_index_offset, total_data_size);
+
+                struct adios_index_process_group_struct_v1 *pg_root = md->index->pg_root;
+                i=0;
+                while (pg_root) {
+                    log_debug ("rank %d: pg %d offset=%llu\n", md->rank, i, pg_root->offset_in_file);
+                    pg_root = pg_root->next;
+                    i++;
+                }*/
 
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
@@ -2430,7 +2460,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gather (&size, 1, MPI_INT
                                    ,index_sizes, 1, MPI_INT
-                                   ,0, new_comm2
+                                   ,0, md->g_comm2
                                    );
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2445,7 +2475,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gatherv (&size, 0, MPI_BYTE
                                     ,recv_buffer, index_sizes, index_offsets
-                                    ,MPI_BYTE, 0, new_comm2
+                                    ,MPI_BYTE, 0, md->g_comm2
                                     );
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2469,6 +2499,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                             adios_merge_index_v1 (md->index, new_pg_root, 
                                                   new_vars_root, new_attrs_root);
+                            // Note: timesteps are unsorted after this merge (in case of multiple steps (append))
                             new_pg_root = 0;
                             new_vars_root = 0;
                             new_attrs_root = 0;
@@ -2494,11 +2525,11 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gather (&buffer_size2, 1, MPI_INT
                                    ,0, 0, MPI_INT
-                                   ,0, new_comm2
+                                   ,0, md->g_comm2
                                    );
                         MPI_Gatherv (buffer2, buffer_size2, MPI_BYTE
                                     ,0, 0, 0, MPI_BYTE
-                                    ,0, new_comm2
+                                    ,0, md->g_comm2
                                     );
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2521,6 +2552,15 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     uint64_t global_index_start = 0;
                     uint16_t flag = 0;
 
+                    if (fd->mode == adios_mode_append)
+                    {
+                        double t=MPI_Wtime();
+                        // global index become unsorted on main aggregator during merging 
+                        adios_sort_index_v1 (&md->index->pg_root
+                                ,&md->index->vars_root ,&md->index->attrs_root);
+                        log_debug ("MPI_AGGREGATE: Index sorting time = %g sec\n", MPI_Wtime()-t);
+                    }
+
                     adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                          ,&global_index_buffer_offset, global_index_start
                                          ,md->index
@@ -2578,6 +2618,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             FREE (md->g_is_aggregator);
             FREE (md->g_offsets);
             FREE (md->open_thread_data);
+            FREE (md->reopen_thread_data);
         }
 
         break;
@@ -2625,32 +2666,31 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
     switch (fd->mode)
     {
         case adios_mode_read:
-        case adios_mode_append:
         {
             adios_error (err_invalid_file_mode, 
                         "Only \"w\" mode is supported by MPI_AMR Aggregation IO\n");
             break;
         }
+        case adios_mode_append:
         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;
+            uint64_t index_start1;
             int * pg_sizes = 0, * disp = 0, * sendbuf = 0, * recvbuf = 0, * attr_sizes = 0;
             void * aggr_buff = 0;
             struct adios_MPI_thread_data_write write_thread_data;
             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_color1, md->rank, &new_comm);
+            MPI_Comm_rank (md->g_comm1, &new_rank);
+            MPI_Comm_size (md->g_comm1, &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);
+            //MPI_Comm_split (md->group_comm, md->g_color2, md->rank, &new_comm2);
+            MPI_Comm_rank (md->g_comm2, &new_rank2);
+            MPI_Comm_size (md->g_comm2, &new_group_size2);
             STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
             if (fd->shared_buffer == adios_flag_no)
@@ -2711,7 +2751,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gather (&fd->bytes_written, 1, MPI_INT
                                 ,bytes_written, 1, MPI_INT
-                                ,0, new_comm
+                                ,0, md->g_comm1
                                 );
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -2739,7 +2779,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         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);
+                                ,0, md->g_comm1);
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         if (is_aggregator (md->rank))
@@ -2773,7 +2813,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);
+                        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, md->g_comm1);
                         STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         a->write_offset = new_offsets[new_rank];
@@ -2842,7 +2882,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Allgather (&pg_size, 1, MPI_INT
                               ,pg_sizes, 1, MPI_INT
-                              ,new_comm);
+                              ,md->g_comm1);
                 STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                 disp[0] = 0;
@@ -2879,7 +2919,7 @@ 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);
+                            ,0, md->g_comm1);
                 STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
             }
 
@@ -2956,7 +2996,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Allgather (sendbuf, 2, MPI_INT
                               ,recvbuf, 2, MPI_INT
-                              ,new_comm);
+                              ,md->g_comm1);
                 STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                 for (i = 0; i < new_group_size; i++)
@@ -3001,7 +3041,7 @@ 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);
+                                ,0, md->g_comm1);
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     for (i= 0; i < new_group_size; i++)
@@ -3079,7 +3119,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     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);
+                                ,0, md->g_comm1);
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 }
 
@@ -3130,18 +3170,19 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             {
                 if (!is_aggregator(md->rank))
                 {
-                    uint64_t var_offset_to_add = 0, attr_offset_to_add = 0;
+                    uint64_t var_offset_to_add = md->b.pg_index_offset;
+                    uint64_t attr_offset_to_add = md->b.pg_index_offset;
+                    uint64_t pg_offset_to_add = md->b.pg_index_offset;
 
                     for (i = 0; i < new_rank; i++)
                     {
                         attr_offset_to_add += pg_sizes[i];
                         var_offset_to_add += pg_sizes[i];
+                        pg_offset_to_add += pg_sizes[i];
                     }
 
-                    adios_mpi_amr_add_offset (var_offset_to_add
-                                              ,attr_offset_to_add
-                                              ,md->index
-                                              );
+                    adios_mpi_amr_add_offset (pg_offset_to_add, var_offset_to_add,
+                                              attr_offset_to_add, md->index);
                 }
 
                 // pg_sizes, disp are no longer needed from this point on.
@@ -3183,10 +3224,8 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         var_offset_to_add += pg_sizes[i] - attr_sizes[i]; 
                     }
 
-                    adios_mpi_amr_add_offset (var_offset_to_add
-                                              ,attr_offset_to_add
-                                              ,md->index
-                                              );
+                    adios_mpi_amr_add_offset (0, var_offset_to_add, 
+                                              attr_offset_to_add, md->index);
                 }
 
                 // pg_sizes, attr_sizs, disp are no longer needed from this point on.
@@ -3210,7 +3249,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
-                               ,0, new_comm
+                               ,0, md->g_comm1
                                );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -3225,7 +3264,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     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->g_comm1
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -3271,11 +3310,11 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
-                               ,0, new_comm
+                               ,0, md->g_comm1
                                );
                     MPI_Gatherv (buffer, buffer_size, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
-                                ,0, new_comm
+                                ,0, md->g_comm1
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 }
@@ -3294,9 +3333,20 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                 MPI_File_get_position (md->fh, (MPI_Offset *)&index_start);
 #endif
-#if 1
-                index_start = total_data_size;
-#endif
+                uint64_t index_start; // = end of PGs, where the index starts
+                index_start  = md->b.pg_index_offset; // = end of PGs of previous timesteps
+                index_start += total_data_size; //old index start before append + currently written PGs
+                /*DEBUG*/
+                /*log_warn ("rank %d: write index start=%llu  pg_index_offset=%llu  total_data_size=%u\n", 
+                        md->rank, index_start, md->b.pg_index_offset, total_data_size);
+                struct adios_index_process_group_struct_v1 *pg_root = md->index->pg_root;
+                i=0;
+                while (pg_root) {
+                    log_warn ("rank %d: pg %d offset=%llu\n", md->rank, i, pg_root->offset_in_file);
+                    pg_root = pg_root->next;
+                    i++;
+                }*/
+
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
                                      ,md->index);
@@ -3315,7 +3365,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         pthread_join (md->g_sot, NULL);
                     }
 
-                    index_start1 = 0;
+                    index_start1 = fd->pg_start_in_file;
                     total_data_size1 = total_data_size + buffer_offset;
 
                     write_thread_data.fh = &md->fh;
@@ -3361,7 +3411,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
-                               ,0, new_comm2
+                               ,0, md->g_comm2
                                );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -3376,7 +3426,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
-                                ,MPI_BYTE, 0, new_comm2
+                                ,MPI_BYTE, 0, md->g_comm2
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -3425,11 +3475,11 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size2, 1, MPI_INT
                                ,0, 0, MPI_INT
-                               ,0, new_comm2
+                               ,0, md->g_comm2
                                );
                     MPI_Gatherv (buffer2, buffer_size2, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
-                                ,0, new_comm2
+                                ,0, md->g_comm2
                                 );
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
@@ -3452,6 +3502,15 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 uint64_t global_index_start = 0;
                 uint16_t flag = 0;
 
+                if (fd->mode == adios_mode_append)
+                {
+                    double t=MPI_Wtime();
+                    // global index become unsorted on main aggregator during merging 
+                    adios_sort_index_v1 (&md->index->pg_root
+                            ,&md->index->vars_root ,&md->index->attrs_root);
+                    log_warn ("Index sorting time = %g sec\n", MPI_Wtime()-t);
+                }
+
                 adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                      ,&global_index_buffer_offset, global_index_start
                                      ,md->index
@@ -3520,6 +3579,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             FREE (md->g_ost_skipping_list);
             FREE (md->g_offsets);
             FREE (md->open_thread_data);
+            FREE (md->reopen_thread_data);
             break;
         }
 
@@ -3580,6 +3640,19 @@ void adios_mpi_amr_close (struct adios_file_struct * fd
         return;
     }
     STOP_TIMER (ADIOS_TIMER_MPI_AMR_AD_CLOSE);
+
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+
+    //Finished timing this cycle, swap the timing buffers
+    adios_timing_destroy(fd->group->prev_timing_obj);
+    fd->group->prev_timing_obj = fd->group->timing_obj;
+    fd->group->timing_obj = 0;
+
+    // prev_timing_obj points to unwritten timing info, timing_obj is
+    // ready to allocate at the next open
+
+#endif
+
 }
 
 void adios_mpi_amr_finalize (int mype, struct adios_method_struct * method)
diff --git a/src/write/adios_mpi_bgq.c b/src/write/adios_mpi_bgq.c
index c6b6b99..a5ef425 100644
--- a/src/write/adios_mpi_bgq.c
+++ b/src/write/adios_mpi_bgq.c
@@ -49,8 +49,12 @@ static int adios_mpi_bgq_initialized = 0;
   }             \
 
 #define MAX_AGG_BUF      704643072
-// BLOCK_UNIT is set 8 MiB
-#define BLOCK_UNIT       8000000
+// Temporarily change BLOCK_UNIT to 1, which disable write aligment.
+// GPFS doesn't seem to support holes in a file
+// in the same way as Lustre. Setting BLOCK_UNIT to 8 MiB
+// which is GPFS block size, will inflate the file size and
+// that concerns large runs. Q. Liu, 10/19/2014
+#define BLOCK_UNIT     1
 
 struct adios_MPI_data_struct
 {
@@ -1570,7 +1574,7 @@ void adios_mpi_bgq_simple_close (struct adios_file_struct * fd
             buffer_offset = 0;
 
             adios_clear_index_v1 (md->index);
-            md->index = 0;
+            //md->index = 0;
             md->g_num_aggregators = 0;
             md->g_color2 = 0;
 
@@ -2793,7 +2797,10 @@ void adios_mpi_bgq_close (struct adios_file_struct * fd
 
 void adios_mpi_bgq_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_bgq_initialized)
         adios_mpi_bgq_initialized = 0;
 }
diff --git a/src/write/adios_mpi_lustre.c b/src/write/adios_mpi_lustre.c
index eb71250..3b048d9 100644
--- a/src/write/adios_mpi_lustre.c
+++ b/src/write/adios_mpi_lustre.c
@@ -23,14 +23,14 @@
 #include "core/buffer.h"
 #include "core/util.h"
 
-#ifdef SKEL_TIMING
-#define START_TIMER(t) adios_timing_go (fd->timing_obj, (t) ) 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define START_TIMER(t) adios_timing_go (fd->group->timing_obj, (t) ) 
 #else
 #define START_TIMER(t) ; 
 #endif
 
-#ifdef SKEL_TIMING
-#define STOP_TIMER(t) adios_timing_stop (fd->timing_obj, (t) )
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define STOP_TIMER(t) adios_timing_stop (fd->group->timing_obj, (t) )
 #else
 #define STOP_TIMER(t) ;
 #endif
@@ -518,7 +518,7 @@ void adios_mpi_lustre_init (const PairStruct * parameters
     adios_buffer_struct_init (&md->b);
 }
 
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 // Indices for the timer object
 int ADIOS_TIMER_MPI_LUSTRE_COMM = ADIOS_TIMING_MAX_USER_TIMERS + 0;
 int ADIOS_TIMER_MPI_LUSTRE_IO = ADIOS_TIMING_MAX_USER_TIMERS + 1;
@@ -548,7 +548,7 @@ int adios_mpi_lustre_open (struct adios_file_struct * fd
     }
     fd->group->process_id = md->rank;
 
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     int timer_count = 6;
     char ** timer_names = (char**) malloc (timer_count * sizeof (char*) );
     timer_names [0] = "Communication";
@@ -557,8 +557,21 @@ int adios_mpi_lustre_open (struct adios_file_struct * fd
     timer_names [3] = "ad_write";
     timer_names [4] = "ad_close";
     timer_names [5] = "ad_should_buffer";
+   
+
+    // Ensure both timing objects exist
+    // timing_obj should get created at every open
+    // prev_timing_obj should only be created at the first open 
+    if (fd->group)
+    {
+        if (!fd->group->timing_obj)
+            fd->group->timing_obj = adios_timing_create (timer_count, timer_names);
+
+        if (!fd->group->prev_timing_obj)
+            fd->group->prev_timing_obj = adios_timing_create (timer_count, timer_names);
+    }
+
 
-    fd->timing_obj = adios_timing_create (timer_count, timer_names);
 #endif
 
     // we have to wait for the group_size (should_buffer) 
@@ -2096,6 +2109,19 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
 
     STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_CLOSE);
 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+
+    //Finished timing this cycle, swap the timing buffers
+    adios_timing_destroy(fd->group->prev_timing_obj);
+    fd->group->prev_timing_obj = fd->group->timing_obj;
+    fd->group->timing_obj = 0;
+
+    // prev_timing_obj points to unwritten timing info, timing_obj is
+    // ready to allocate at the next open
+
+#endif
+
+
 #if COLLECT_METRICS
     print_metrics (md, iteration++);
 #endif
diff --git a/src/write/adios_posix.c b/src/write/adios_posix.c
index bfd85e1..5794ff9 100644
--- a/src/write/adios_posix.c
+++ b/src/write/adios_posix.c
@@ -32,14 +32,14 @@
 #    define O_LARGEFILE 0
 #endif
 
-#ifdef SKEL_TIMING
-#define START_TIMER(t) adios_timing_go (fd->timing_obj, (t) ) 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define START_TIMER(t) adios_timing_go (fd->group->timing_obj, (t) ) 
 #else
 #define START_TIMER(t) ; 
 #endif
 
-#ifdef SKEL_TIMING
-#define STOP_TIMER(t) adios_timing_stop (fd->timing_obj, (t) )
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+#define STOP_TIMER(t) adios_timing_stop (fd->group->timing_obj, (t) )
 #else
 #define STOP_TIMER(t) ;
 #endif
@@ -94,7 +94,7 @@ void adios_posix_init (const PairStruct * parameters
 
 
 // Indices for the timer object
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 int ADIOS_TIMER_POSIX_COMM = ADIOS_TIMING_MAX_USER_TIMERS + 0;
 int ADIOS_TIMER_POSIX_IO = ADIOS_TIMING_MAX_USER_TIMERS + 1;
 int ADIOS_TIMER_POSIX_MD = ADIOS_TIMING_MAX_USER_TIMERS + 2;
@@ -108,13 +108,13 @@ int adios_posix_open (struct adios_file_struct * fd
                      ,struct adios_method_struct * method, MPI_Comm comm
                      )
 {
-    char * subfile_name;
-    char * mdfile_name;
+    char * subfile_name = 0;
+    char * mdfile_name = 0;
     char * name_with_rank, rank_string[16];
     struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
                                                           method->method_data;
 
-#ifdef SKEL_TIMING
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     int timer_count = 7;
     char ** timer_names = (char**) malloc (timer_count * sizeof (char*) );
     timer_names [0] = "Communication";
@@ -125,7 +125,20 @@ int adios_posix_open (struct adios_file_struct * fd
     timer_names [5] = "ad_close";
     timer_names [6] = "ad_should_buffer";
 
-    fd->timing_obj = adios_timing_create (timer_count, timer_names);
+
+    // Ensure both timing objects exist
+    // timing_obj should get created at every open
+    // prev_timing_obj should only be created at the first open
+    if (fd->group)
+    {
+        if (!fd->group->timing_obj)
+            fd->group->timing_obj = adios_timing_create (timer_count, timer_names);
+
+        if (!fd->group->prev_timing_obj)
+            fd->group->prev_timing_obj = adios_timing_create (timer_count, timer_names);
+    }
+
+
 #endif
 
 START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
@@ -195,7 +208,9 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
         mdfile_name = 0;
     }
 
-    fd->subfile_index = p->rank;
+#ifdef HAVE_MPI
+    fd->subfile_index = p->rank; // Only if HAVE_MPI
+#endif
 
     struct stat s;
     if (stat (subfile_name, &s) == 0)
@@ -440,9 +455,16 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
         }
     }
 
-    free (subfile_name);
-    free (mdfile_name);
-    
+    if (subfile_name) 
+    {
+        free (subfile_name);
+    }
+
+    if (mdfile_name)
+    {
+        free (mdfile_name);
+    }
+
     STOP_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
 
     return 1;
@@ -1348,6 +1370,18 @@ void adios_posix_close (struct adios_file_struct * fd
 
     STOP_TIMER (ADIOS_TIMER_POSIX_AD_CLOSE);
 
+#if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
+
+    //Finished timing this cycle, swap the timing buffers
+    adios_timing_destroy(fd->group->prev_timing_obj);
+    fd->group->prev_timing_obj = fd->group->timing_obj;
+    fd->group->timing_obj = 0;
+
+    // prev_timing_obj points to unwritten timing info, timing_obj is
+    // ready to allocate at the next open
+
+#endif
+
 }
 
 void adios_posix_finalize (int mype, struct adios_method_struct * method)
diff --git a/tests/C/CMakeLists.txt b/tests/C/CMakeLists.txt
index 2fd55a7..4776b6f 100644
--- a/tests/C/CMakeLists.txt
+++ b/tests/C/CMakeLists.txt
@@ -16,3 +16,5 @@ endif()
 file(COPY config_c.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C)
 
 add_subdirectory(flexpath_tests)
+add_subdirectory(fgr_tests)
+add_subdirectory(query)
diff --git a/tests/C/Makefile.am b/tests/C/Makefile.am
index d221309..bcd3f16 100644
--- a/tests/C/Makefile.am
+++ b/tests/C/Makefile.am
@@ -1,7 +1,7 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
-SUBDIRS=flexpath_tests
+SUBDIRS=flexpath_tests fgr_tests query
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -11,7 +11,7 @@ all-local:
 noinst_PROGRAMS=adios_test_c
 
 adios_test_c_SOURCES = adios_test_c.c
-adios_test_c_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+adios_test_c_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 adios_test_c_CFLAGS = $(ADIOSLIB_CFLAGS)
 adios_test_c_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 adios_test_c_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
diff --git a/tests/C/Makefile.in b/tests/C/Makefile.in
index 2da7fd8..f08a844 100644
--- a/tests/C/Makefile.in
+++ b/tests/C/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -162,6 +168,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -219,6 +227,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -318,11 +329,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -388,12 +401,12 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
-SUBDIRS = flexpath_tests
+SUBDIRS = flexpath_tests fgr_tests query
 AUTOMAKE_OPTIONS = no-dependencies
 adios_test_c_SOURCES = adios_test_c.c
-adios_test_c_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+adios_test_c_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 adios_test_c_CFLAGS = $(ADIOSLIB_CFLAGS)
 adios_test_c_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 adios_test_c_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
diff --git a/tests/C/fgr_tests/CMakeLists.txt b/tests/C/fgr_tests/CMakeLists.txt
new file mode 100644
index 0000000..dc52e4b
--- /dev/null
+++ b/tests/C/fgr_tests/CMakeLists.txt
@@ -0,0 +1,10 @@
+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(posix_fgr posix_fgr.c)
+target_link_libraries(posix_fgr adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
diff --git a/tests/C/fgr_tests/Makefile.am b/tests/C/fgr_tests/Makefile.am
new file mode 100644
index 0000000..5354372
--- /dev/null
+++ b/tests/C/fgr_tests/Makefile.am
@@ -0,0 +1,16 @@
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS=posix_fgr
+
+posix_fgr_SOURCES = posix_fgr.c
+posix_fgr_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+posix_fgr_CFLAGS = $(ADIOSLIB_CFLAGS)
+posix_fgr_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+posix_fgr_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
+
+CLEANFILES = posix_fgr.bp
+CC=$(MPICC)
+
diff --git a/utils/bp2ascii/Makefile.in b/tests/C/fgr_tests/Makefile.in
similarity index 88%
copy from utils/bp2ascii/Makefile.in
copy to tests/C/fgr_tests/Makefile.in
index 841d2cb..ebf2a93 100644
--- a/utils/bp2ascii/Makefile.in
+++ b/tests/C/fgr_tests/Makefile.in
@@ -34,8 +34,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = bp2ascii$(EXEEXT)
-subdir = utils/bp2ascii
+noinst_PROGRAMS = posix_fgr$(EXEEXT)
+subdir = tests/C/fgr_tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -77,14 +83,14 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_bp2ascii_OBJECTS = bp2ascii-bp2ascii.$(OBJEXT)
-bp2ascii_OBJECTS = $(am_bp2ascii_OBJECTS)
+am_posix_fgr_OBJECTS = posix_fgr-posix_fgr.$(OBJEXT)
+posix_fgr_OBJECTS = $(am_posix_fgr_OBJECTS)
 am__DEPENDENCIES_1 =
-bp2ascii_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
+posix_fgr_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-bp2ascii_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bp2ascii_LDFLAGS) \
-	$(LDFLAGS) -o $@
+posix_fgr_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(posix_fgr_CFLAGS) \
+	$(CFLAGS) $(posix_fgr_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -97,8 +103,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(bp2ascii_SOURCES)
-DIST_SOURCES = $(bp2ascii_SOURCES)
+SOURCES = $(posix_fgr_SOURCES)
+DIST_SOURCES = $(posix_fgr_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -124,6 +130,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -139,8 +147,7 @@ AWK = @AWK@
 BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
 BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
 BZIP2_LIBS = @BZIP2_LIBS@
-CC = @CC@
- at USE_PARALLEL_COMPILER_TRUE@CC = $(MPICC)
+CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CPP = @CPP@
@@ -153,7 +160,6 @@ CRAY_UGNI_LDFLAGS = @CRAY_UGNI_LDFLAGS@
 CRAY_UGNI_LIBS = @CRAY_UGNI_LIBS@
 CSH = @CSH@
 CXX = @CXX@
- at USE_PARALLEL_COMPILER_TRUE@CXX = $(MPICXX)
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
@@ -183,6 +189,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -282,11 +291,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -352,14 +363,15 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
-bp2ascii_SOURCES = bp2ascii.c 
-bp2ascii_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
-bp2ascii_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
-bp2ascii_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
-	$(ADIOSLIB_INT_LDADD)
+posix_fgr_SOURCES = posix_fgr.c
+posix_fgr_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+posix_fgr_CFLAGS = $(ADIOSLIB_CFLAGS)
+posix_fgr_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+posix_fgr_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
+CLEANFILES = posix_fgr.bp
 all: all-am
 
 .SUFFIXES:
@@ -373,9 +385,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bp2ascii/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/fgr_tests/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bp2ascii/Makefile
+	  $(AUTOMAKE) --gnu tests/C/fgr_tests/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -403,9 +415,9 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bp2ascii$(EXEEXT): $(bp2ascii_OBJECTS) $(bp2ascii_DEPENDENCIES) 
-	@rm -f bp2ascii$(EXEEXT)
-	$(bp2ascii_LINK) $(bp2ascii_OBJECTS) $(bp2ascii_LDADD) $(LIBS)
+posix_fgr$(EXEEXT): $(posix_fgr_OBJECTS) $(posix_fgr_DEPENDENCIES) 
+	@rm -f posix_fgr$(EXEEXT)
+	$(posix_fgr_LINK) $(posix_fgr_OBJECTS) $(posix_fgr_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -422,11 +434,11 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
-bp2ascii-bp2ascii.o: bp2ascii.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bp2ascii_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bp2ascii-bp2ascii.o `test -f 'bp2ascii.c' || echo '$(srcdir)/'`bp2ascii.c
+posix_fgr-posix_fgr.o: posix_fgr.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(posix_fgr_CPPFLAGS) $(CPPFLAGS) $(posix_fgr_CFLAGS) $(CFLAGS) -c -o posix_fgr-posix_fgr.o `test -f 'posix_fgr.c' || echo '$(srcdir)/'`posix_fgr.c
 
-bp2ascii-bp2ascii.obj: bp2ascii.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bp2ascii_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bp2ascii-bp2ascii.obj `if test -f 'bp2ascii.c'; then $(CYGPATH_W) 'bp2ascii.c'; else $(CYGPATH_W) '$(srcdir)/bp2ascii.c'; fi`
+posix_fgr-posix_fgr.obj: posix_fgr.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(posix_fgr_CPPFLAGS) $(CPPFLAGS) $(posix_fgr_CFLAGS) $(CFLAGS) -c -o posix_fgr-posix_fgr.obj `if test -f 'posix_fgr.c'; then $(CYGPATH_W) 'posix_fgr.c'; else $(CYGPATH_W) '$(srcdir)/posix_fgr.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -537,6 +549,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
diff --git a/tests/C/fgr_tests/posix_fgr.c b/tests/C/fgr_tests/posix_fgr.c
new file mode 100644
index 0000000..4427bca
--- /dev/null
+++ b/tests/C/fgr_tests/posix_fgr.c
@@ -0,0 +1,129 @@
+/* 
+ * 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 <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdint.h>
+#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];
+};
+
+#include "mpi.h"
+#ifdef HAVE_FGR
+#include "fgr.h"
+#endif
+
+int main (int argc, char ** argv) 
+{
+	char        filename [256];
+	int         rank, size, i;
+	int         NX = 262144*2*2*2*2*2*2*2*2*2;
+	double      t[NX];
+	MPI_Comm    comm = MPI_COMM_WORLD;
+        struct lov_user_md lum;
+        int f;
+
+	MPI_Init (&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+#ifdef HAVE_FGR
+        if (fgr_init (0) == false)
+        {
+            fprintf (stderr, "fgr_init() error\n");
+        }
+#endif
+	for (i = 0; i < NX; i++)
+		t[i] = rank*NX + i;
+
+        sprintf (filename, "%s.%d", "posix_fgr.bin", rank);
+
+        MPI_Barrier (MPI_COMM_WORLD);
+        double start_time = MPI_Wtime();
+
+        f = open(filename, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
+        if (f == -1)
+        {
+            fprintf (stderr,"open() failed: %s\n", filename);
+            return -1;
+        }
+
+        lum.lmm_magic = LOV_USER_MAGIC;
+        lum.lmm_pattern = 0;
+        lum.lmm_stripe_size = NX * 8;
+        lum.lmm_stripe_count = 1;
+#ifdef HAVE_FGR
+        lum.lmm_stripe_offset = find_myost(comm);
+//        lum.lmm_stripe_offset = rank;
+#else
+        lum.lmm_stripe_offset = -1;
+#endif
+
+        ioctl (f, LL_IOC_LOV_SETSTRIPE ,(void *) &lum);
+
+        for (i = 0; i < 10; i++)
+        {
+	    if (write(f, t, NX*8) == -1)
+            {
+                fprintf (stderr, "write() error.\n");
+            }
+        }
+
+        close (f);
+
+        double io_time = MPI_Wtime() - start_time;
+        double max;
+
+        MPI_Reduce(&io_time, &max, 1,
+                   MPI_DOUBLE, MPI_MAX, 0,
+                   MPI_COMM_WORLD);
+
+        if (rank == 0)
+            printf ("time = %4.2f\n", max);
+#ifdef HAVE_FGR
+        fgr_finalize();
+#endif
+	MPI_Finalize ();
+
+	return 0;
+}
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.am b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
index 5a43924..a7877b4 100644
--- a/tests/C/flexpath_tests/1D_arr_global/Makefile.am
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.in b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
index bf660c7..29f7ec8 100644
--- a/tests/C/flexpath_tests/1D_arr_global/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 writer_global_SOURCES = writer.c ../common/utils.c
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
index 6547e03..fd5d416 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
index 4b4487c..8d87feb 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -134,6 +140,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -191,6 +199,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -290,11 +301,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -360,7 +373,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 writer_global_noxml_SOURCES = writer.c ../common/utils.c
diff --git a/tests/C/flexpath_tests/Makefile.in b/tests/C/flexpath_tests/Makefile.in
index 47c8feb..1b01bab 100644
--- a/tests/C/flexpath_tests/Makefile.in
+++ b/tests/C/flexpath_tests/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/tests/C/flexpath_tests/global_range_select/Makefile.am b/tests/C/flexpath_tests/global_range_select/Makefile.am
index f22cd24..6a6167c 100644
--- a/tests/C/flexpath_tests/global_range_select/Makefile.am
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/global_range_select/Makefile.in b/tests/C/flexpath_tests/global_range_select/Makefile.in
index 2a3ae3d..c54ee4e 100644
--- a/tests/C/flexpath_tests/global_range_select/Makefile.in
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.am b/tests/C/flexpath_tests/maya_append/Makefile.am
index 758b39e..034c175 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.am
+++ b/tests/C/flexpath_tests/maya_append/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/tests/C/flexpath_tests/maya_append/Makefile.in
index f614d4c..ab0bce3 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/tests/C/flexpath_tests/maya_append/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 writer_maya_SOURCES = writer.c ../common/utils.c
diff --git a/tests/C/flexpath_tests/maya_noxml/Makefile.am b/tests/C/flexpath_tests/maya_noxml/Makefile.am
index 173b867..e875bd3 100644
--- a/tests/C/flexpath_tests/maya_noxml/Makefile.am
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/maya_noxml/Makefile.in b/tests/C/flexpath_tests/maya_noxml/Makefile.in
index 0ca4cab..b647e28 100644
--- a/tests/C/flexpath_tests/maya_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -133,6 +139,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -190,6 +198,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -289,11 +300,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -359,7 +372,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 writer_maya_noxml_SOURCES = writer.c ../common/utils.c
diff --git a/tests/C/flexpath_tests/scalar/Makefile.am b/tests/C/flexpath_tests/scalar/Makefile.am
index a68efca..f976ecf 100644
--- a/tests/C/flexpath_tests/scalar/Makefile.am
+++ b/tests/C/flexpath_tests/scalar/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/tests/C/flexpath_tests/scalar/Makefile.in b/tests/C/flexpath_tests/scalar/Makefile.in
index fc9a457..dad98d1 100644
--- a/tests/C/flexpath_tests/scalar/Makefile.in
+++ b/tests/C/flexpath_tests/scalar/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -131,6 +137,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,7 +370,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 writer_scalar_SOURCES = writer.c ../common/utils.c
diff --git a/tests/C/query/CMakeLists.txt b/tests/C/query/CMakeLists.txt
new file mode 100644
index 0000000..d3e6148
--- /dev/null
+++ b/tests/C/query/CMakeLists.txt
@@ -0,0 +1,12 @@
+add_subdirectory(common)
+
+if(HAVE_ALACRITY)
+  add_subdirectory(alacrity)
+endif()
+
+if(HAVE_FASTBIT)
+  add_subdirectory(fastbit)
+endif()
+
+file(COPY query-xmls
+     DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/tests/C/query/Makefile.am b/tests/C/query/Makefile.am
new file mode 100644
index 0000000..d5c4f9e
--- /dev/null
+++ b/tests/C/query/Makefile.am
@@ -0,0 +1,19 @@
+SUBDIRS = common
+
+if HAVE_ALACRITY
+SUBDIRS += alacrity
+endif
+
+if HAVE_FASTBIT
+SUBDIRS += fastbit
+endif
+
+#if HAVE_ALACRITY && HAVE_FASTBIT
+#SUBDIRS=alacrity fastbit
+#endif
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/query-xmls $(builddir)
+
+EXTRA_DIST = query-xmls
+
diff --git a/tests/suite/Makefile.in b/tests/C/query/Makefile.in
similarity index 95%
copy from tests/suite/Makefile.in
copy to tests/C/query/Makefile.in
index 7065d67..bb00be3 100644
--- a/tests/suite/Makefile.in
+++ b/tests/C/query/Makefile.in
@@ -33,7 +33,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-subdir = tests/suite
+ at HAVE_ALACRITY_TRUE@am__append_1 = alacrity
+ at HAVE_FASTBIT_TRUE@am__append_2 = fastbit
+subdir = tests/C/query
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -47,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -90,7 +98,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
+DIST_SUBDIRS = common alacrity fastbit
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -139,6 +147,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +206,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +308,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -365,14 +380,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = programs 
-EXTRA_DIST = HOWTO-Add-new-test \
-             HOWTO-Run          \
-             cleanup.sh         \
-             reference/*        \
-             test.sh            \
-             tests/*
-
+SUBDIRS = common $(am__append_1) $(am__append_2)
+EXTRA_DIST = query-xmls
 all: all-recursive
 
 .SUFFIXES:
@@ -385,9 +394,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/suite/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/query/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/suite/Makefile
+	  $(AUTOMAKE) --gnu tests/C/query/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -720,11 +729,12 @@ uninstall-am:
 	tags tags-recursive uninstall uninstall-am
 
 
+#if HAVE_ALACRITY && HAVE_FASTBIT
+#SUBDIRS=alacrity fastbit
+#endif
+
 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)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/query-xmls $(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/query/alacrity/CMakeLists.txt b/tests/C/query/alacrity/CMakeLists.txt
new file mode 100644
index 0000000..b747434
--- /dev/null
+++ b/tests/C/query/alacrity/CMakeLists.txt
@@ -0,0 +1,29 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}../common)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(adios_read_block adios_read_block.c)
+target_link_libraries(adios_read_block adios ${ADIOSLIB_LDADD})
+set_target_properties(adios_read_block PROPERTIES COMPILE_FLAGS "${ALACRITY_CPPFLAGS}")
+
+add_executable(adios_read_ext_test adios_read_ext_test.c)
+target_link_libraries(adios_read_ext_test adios ${ADIOSLIB_LDADD}) 
+set_target_properties(adios_read_ext_test PROPERTIES COMPILE_FLAGS "${ALACRITY_CPPFLAGS}")
+
+add_executable(adios_build_alac_index adios_build_alac_index.c)
+target_link_libraries(adios_build_alac_index adios ${ADIOSLIB_LDADD})
+set_target_properties(adios_build_alac_index PROPERTIES COMPILE_FLAGS "${ALACRITY_CPPFLAGS}")
+
+add_executable(adios_alac_query adios_alac_query.c)
+target_link_libraries(adios_alac_query parse_test_query_xml adios ${ADIOSLIB_LDADD})
+set_target_properties(adios_alac_query PROPERTIES COMPILE_FLAGS "${ALACRITY_CPPFLAGS}")
+
+add_executable(adios_show_bp_file adios_show_bp_file.c)
+target_link_libraries(adios_show_bp_file adios ${ADIOSLIB_LDADD})
+
+file(COPY xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/C/query/alacrity)
diff --git a/tests/C/query/alacrity/Makefile.am b/tests/C/query/alacrity/Makefile.am
new file mode 100644
index 0000000..805d677
--- /dev/null
+++ b/tests/C/query/alacrity/Makefile.am
@@ -0,0 +1,51 @@
+INCLUDES = $(all_includes)
+INCLUDES += $(ADIOSLIB_CPPFLAGS)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../common/
+
+AUTOMAKE_OPTIONS = no-dependencies
+if HAVE_ALACRITY
+
+noinst_PROGRAMS = adios_read_ext_test adios_build_alac_index adios_alac_query adios_show_bp_file adios_read_block
+#alac_internal_test 
+
+#alac_internal_test_SOURCES = test_query_alac_internal.c 
+#alac_internal_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+#alac_internal_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+#alac_internal_test_CPPFLAGS = $(ALACRITY_CPPFLAGS) -I$(top_srcdir)/src/core
+
+
+
+adios_read_block_SOURCES = adios_read_block.c
+adios_read_block_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+adios_read_block_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_block_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+
+
+
+adios_read_ext_test_SOURCES = adios_read_ext_test.c
+adios_read_ext_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+adios_read_ext_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_ext_test_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+
+
+adios_build_alac_index_SOURCES = adios_build_alac_index.c
+adios_build_alac_index_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+adios_build_alac_index_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_build_alac_index_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+
+adios_alac_query_SOURCES = adios_alac_query.c
+adios_alac_query_LDADD = $(top_builddir)/tests/C/query/common/libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+adios_alac_query_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_alac_query_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+
+adios_show_bp_file_SOURCES = adios_show_bp_file.c
+adios_show_bp_file_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDFLAGS) 
+
+adios_show_bp_file_LDADD += $(ADIOSLIB_LDADD)
+  
+
+endif
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+#EXTRA_DIST = test_config_flex.xml 
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/tests/C/query/alacrity/Makefile.in
similarity index 64%
copy from tests/C/flexpath_tests/maya_append/Makefile.in
copy to tests/C/query/alacrity/Makefile.in
index f614d4c..faa2eec 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/tests/C/query/alacrity/Makefile.in
@@ -34,8 +34,12 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = writer_maya$(EXEEXT) reader_maya$(EXEEXT)
-subdir = tests/C/flexpath_tests/maya_append
+ at HAVE_ALACRITY_TRUE@noinst_PROGRAMS = adios_read_ext_test$(EXEEXT) \
+ at HAVE_ALACRITY_TRUE@	adios_build_alac_index$(EXEEXT) \
+ at HAVE_ALACRITY_TRUE@	adios_alac_query$(EXEEXT) \
+ at HAVE_ALACRITY_TRUE@	adios_show_bp_file$(EXEEXT) \
+ at HAVE_ALACRITY_TRUE@	adios_read_block$(EXEEXT)
+subdir = tests/C/query/alacrity
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +53,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +70,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -77,21 +87,51 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_reader_maya_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
-reader_maya_OBJECTS = $(am_reader_maya_OBJECTS)
+am__adios_alac_query_SOURCES_DIST = adios_alac_query.c
+ at HAVE_ALACRITY_TRUE@am_adios_alac_query_OBJECTS = adios_alac_query-adios_alac_query.$(OBJEXT)
+adios_alac_query_OBJECTS = $(am_adios_alac_query_OBJECTS)
 am__DEPENDENCIES_1 =
-reader_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-reader_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ at HAVE_ALACRITY_TRUE@adios_alac_query_DEPENDENCIES = $(top_builddir)/tests/C/query/common/libparse_test_query_xml.a \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1)
+adios_alac_query_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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)
-writer_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(adios_alac_query_LDFLAGS) $(LDFLAGS) -o $@
+am__adios_build_alac_index_SOURCES_DIST = adios_build_alac_index.c
+ at HAVE_ALACRITY_TRUE@am_adios_build_alac_index_OBJECTS = adios_build_alac_index-adios_build_alac_index.$(OBJEXT)
+adios_build_alac_index_OBJECTS = $(am_adios_build_alac_index_OBJECTS)
+ at HAVE_ALACRITY_TRUE@adios_build_alac_index_DEPENDENCIES =  \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1)
+adios_build_alac_index_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(writer_maya_LDFLAGS) $(LDFLAGS) -o $@
+	$(adios_build_alac_index_LDFLAGS) $(LDFLAGS) -o $@
+am__adios_read_block_SOURCES_DIST = adios_read_block.c
+ at HAVE_ALACRITY_TRUE@am_adios_read_block_OBJECTS = adios_read_block-adios_read_block.$(OBJEXT)
+adios_read_block_OBJECTS = $(am_adios_read_block_OBJECTS)
+ at HAVE_ALACRITY_TRUE@adios_read_block_DEPENDENCIES =  \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1)
+adios_read_block_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(adios_read_block_LDFLAGS) $(LDFLAGS) -o $@
+am__adios_read_ext_test_SOURCES_DIST = adios_read_ext_test.c
+ at HAVE_ALACRITY_TRUE@am_adios_read_ext_test_OBJECTS = adios_read_ext_test-adios_read_ext_test.$(OBJEXT)
+adios_read_ext_test_OBJECTS = $(am_adios_read_ext_test_OBJECTS)
+ at HAVE_ALACRITY_TRUE@adios_read_ext_test_DEPENDENCIES =  \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1)
+adios_read_ext_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(adios_read_ext_test_LDFLAGS) $(LDFLAGS) -o $@
+am__adios_show_bp_file_SOURCES_DIST = adios_show_bp_file.c
+ at HAVE_ALACRITY_TRUE@am_adios_show_bp_file_OBJECTS =  \
+ at HAVE_ALACRITY_TRUE@	adios_show_bp_file.$(OBJEXT)
+adios_show_bp_file_OBJECTS = $(am_adios_show_bp_file_OBJECTS)
+ at HAVE_ALACRITY_TRUE@adios_show_bp_file_DEPENDENCIES =  \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1) \
+ at HAVE_ALACRITY_TRUE@	$(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -104,8 +144,14 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
-DIST_SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
+SOURCES = $(adios_alac_query_SOURCES) \
+	$(adios_build_alac_index_SOURCES) $(adios_read_block_SOURCES) \
+	$(adios_read_ext_test_SOURCES) $(adios_show_bp_file_SOURCES)
+DIST_SOURCES = $(am__adios_alac_query_SOURCES_DIST) \
+	$(am__adios_build_alac_index_SOURCES_DIST) \
+	$(am__adios_read_block_SOURCES_DIST) \
+	$(am__adios_read_ext_test_SOURCES_DIST) \
+	$(am__adios_show_bp_file_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -131,6 +177,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +236,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +338,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,17 +410,36 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/public -I$(srcdir)/../include
+INCLUDES = $(all_includes) $(ADIOSLIB_CPPFLAGS) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../common/
 AUTOMAKE_OPTIONS = no-dependencies
-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)
+#alac_internal_test 
+
+#alac_internal_test_SOURCES = test_query_alac_internal.c 
+#alac_internal_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+#alac_internal_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+#alac_internal_test_CPPFLAGS = $(ALACRITY_CPPFLAGS) -I$(top_srcdir)/src/core
+ at HAVE_ALACRITY_TRUE@adios_read_block_SOURCES = adios_read_block.c
+ at HAVE_ALACRITY_TRUE@adios_read_block_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+ at HAVE_ALACRITY_TRUE@adios_read_block_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_read_block_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_read_ext_test_SOURCES = adios_read_ext_test.c
+ at HAVE_ALACRITY_TRUE@adios_read_ext_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+ at HAVE_ALACRITY_TRUE@adios_read_ext_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_read_ext_test_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_build_alac_index_SOURCES = adios_build_alac_index.c
+ at HAVE_ALACRITY_TRUE@adios_build_alac_index_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+ at HAVE_ALACRITY_TRUE@adios_build_alac_index_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_build_alac_index_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_alac_query_SOURCES = adios_alac_query.c
+ at HAVE_ALACRITY_TRUE@adios_alac_query_LDADD = $(top_builddir)/tests/C/query/common/libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+ at HAVE_ALACRITY_TRUE@adios_alac_query_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_alac_query_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+ at HAVE_ALACRITY_TRUE@adios_show_bp_file_SOURCES = adios_show_bp_file.c
+ at HAVE_ALACRITY_TRUE@adios_show_bp_file_LDADD =  \
+ at HAVE_ALACRITY_TRUE@	$(top_builddir)/src/libadios.a \
+ at HAVE_ALACRITY_TRUE@	$(ADIOSLIB_LDFLAGS) $(ADIOSLIB_LDADD)
 CLEANFILES = *.bp
-EXTRA_DIST = cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
@@ -381,9 +453,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/query/alacrity/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile
+	  $(AUTOMAKE) --gnu tests/C/query/alacrity/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -411,12 +483,21 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-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)
+adios_alac_query$(EXEEXT): $(adios_alac_query_OBJECTS) $(adios_alac_query_DEPENDENCIES) 
+	@rm -f adios_alac_query$(EXEEXT)
+	$(adios_alac_query_LINK) $(adios_alac_query_OBJECTS) $(adios_alac_query_LDADD) $(LIBS)
+adios_build_alac_index$(EXEEXT): $(adios_build_alac_index_OBJECTS) $(adios_build_alac_index_DEPENDENCIES) 
+	@rm -f adios_build_alac_index$(EXEEXT)
+	$(adios_build_alac_index_LINK) $(adios_build_alac_index_OBJECTS) $(adios_build_alac_index_LDADD) $(LIBS)
+adios_read_block$(EXEEXT): $(adios_read_block_OBJECTS) $(adios_read_block_DEPENDENCIES) 
+	@rm -f adios_read_block$(EXEEXT)
+	$(adios_read_block_LINK) $(adios_read_block_OBJECTS) $(adios_read_block_LDADD) $(LIBS)
+adios_read_ext_test$(EXEEXT): $(adios_read_ext_test_OBJECTS) $(adios_read_ext_test_DEPENDENCIES) 
+	@rm -f adios_read_ext_test$(EXEEXT)
+	$(adios_read_ext_test_LINK) $(adios_read_ext_test_OBJECTS) $(adios_read_ext_test_LDADD) $(LIBS)
+adios_show_bp_file$(EXEEXT): $(adios_show_bp_file_OBJECTS) $(adios_show_bp_file_DEPENDENCIES) 
+	@rm -f adios_show_bp_file$(EXEEXT)
+	$(LINK) $(adios_show_bp_file_OBJECTS) $(adios_show_bp_file_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -433,11 +514,29 @@ 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
+adios_alac_query-adios_alac_query.o: adios_alac_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_alac_query_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_alac_query-adios_alac_query.o `test -f 'adios_alac_query.c' || echo '$(srcdir)/'`adios_alac_query.c
+
+adios_alac_query-adios_alac_query.obj: adios_alac_query.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_alac_query_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_alac_query-adios_alac_query.obj `if test -f 'adios_alac_query.c'; then $(CYGPATH_W) 'adios_alac_query.c'; else $(CYGPATH_W) '$(srcdir)/adios_alac_query.c'; fi`
+
+adios_build_alac_index-adios_build_alac_index.o: adios_build_alac_index.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_build_alac_index_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_build_alac_index-adios_build_alac_index.o `test -f 'adios_build_alac_index.c' || echo '$(srcdir)/'`adios_build_alac_index.c
+
+adios_build_alac_index-adios_build_alac_index.obj: adios_build_alac_index.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_build_alac_index_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_build_alac_index-adios_build_alac_index.obj `if test -f 'adios_build_alac_index.c'; then $(CYGPATH_W) 'adios_build_alac_index.c'; else $(CYGPATH_W) '$(srcdir)/adios_build_alac_index.c'; fi`
+
+adios_read_block-adios_read_block.o: adios_read_block.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_read_block_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_read_block-adios_read_block.o `test -f 'adios_read_block.c' || echo '$(srcdir)/'`adios_read_block.c
+
+adios_read_block-adios_read_block.obj: adios_read_block.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_read_block_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_read_block-adios_read_block.obj `if test -f 'adios_read_block.c'; then $(CYGPATH_W) 'adios_read_block.c'; else $(CYGPATH_W) '$(srcdir)/adios_read_block.c'; fi`
+
+adios_read_ext_test-adios_read_ext_test.o: adios_read_ext_test.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_read_ext_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_read_ext_test-adios_read_ext_test.o `test -f 'adios_read_ext_test.c' || echo '$(srcdir)/'`adios_read_ext_test.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`
+adios_read_ext_test-adios_read_ext_test.obj: adios_read_ext_test.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_read_ext_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_read_ext_test-adios_read_ext_test.obj `if test -f 'adios_read_ext_test.c'; then $(CYGPATH_W) 'adios_read_ext_test.c'; else $(CYGPATH_W) '$(srcdir)/adios_read_ext_test.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -641,6 +740,7 @@ uninstall-am:
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags uninstall uninstall-am
 
+#EXTRA_DIST = test_config_flex.xml 
 
 # 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/query/alacrity/adios_alac_query.c b/tests/C/query/alacrity/adios_alac_query.c
new file mode 100644
index 0000000..527a4b7
--- /dev/null
+++ b/tests/C/query/alacrity/adios_alac_query.c
@@ -0,0 +1,167 @@
+/*
+ * 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 <inttypes.h>
+#include <string.h>
+#include <assert.h>
+#include "adios_selection.h"
+#include "adios_query.h"
+#include <mxml.h>
+#include <sys/stat.h>
+#include "adios_query_xml_parse.h"
+
+void printRids(const ADIOS_SELECTION_POINTS_STRUCT * pts,  uint64_t *deststart, uint64_t *destcount) {
+    uint64_t i = 0, rid=0;
+    if (pts->ndim == 3) {
+        for (i = 0; i < pts->npoints; i++) {
+            rid =  (pts->points[i * 3 + 2] - deststart[2]) + (pts->points[i * 3 + 1] - deststart[1])  * destcount[2] +  (pts->points[i * 3] - deststart[0]) * destcount[2] * destcount[1];
+            fprintf(stdout,"[ %"PRIu64" ] ,", rid);
+        }
+    }
+
+    if (pts->ndim == 2) {
+        for (i = 0; i < pts->npoints; i++) {
+            rid =  (pts->points[i * 2 + 1] - deststart[1]) + (pts->points[i * 2 ] - deststart[0])  * destcount[1];
+            fprintf(stdout,"[ %"PRIu64" ] ,", rid);
+        }
+    }
+    fprintf(stdout,"\n");
+}
+
+void printPoints(const ADIOS_SELECTION_POINTS_STRUCT * pts, const int timestep) {
+    uint64_t i = 0;
+    int j;
+    for (i = 0; i < pts->npoints; i++) {
+        // first print timestep
+        fprintf(stdout,"%d", timestep);
+
+        for (j = 0; j < pts->ndim; j++) {
+            fprintf(stdout," %"PRIu64"", pts->points[i * pts->ndim + j]);
+        }
+        printf("\n");
+
+    }
+}
+
+int performQuery(ADIOS_QUERY_TEST_INFO *queryInfo, ADIOS_FILE *f)
+{
+    int i = 0, timestep = 0 ;
+    ADIOS_VARINFO * tempVar = adios_inq_var(f, queryInfo->varName);
+    fprintf(stderr,"times steps for variable is: [%d, %d], batch size is %llu\n", queryInfo->fromStep, queryInfo->fromStep + queryInfo->numSteps, queryInfo->batchSize);
+    for (timestep = queryInfo->fromStep; timestep < queryInfo->fromStep + queryInfo->numSteps; timestep ++) {
+        fprintf(stderr,"querying on timestep %d \n", timestep );
+
+        ADIOS_SELECTION* currBatch = NULL;
+        while ( adios_query_evaluate(queryInfo->query, queryInfo->outputSelection, timestep, queryInfo->batchSize, &currBatch)) {
+
+            assert(currBatch->type ==ADIOS_SELECTION_POINTS);
+            const ADIOS_SELECTION_POINTS_STRUCT * retrievedPts = &(currBatch->u.points);
+            fprintf(stderr,"retrieved points %" PRIu64 " \n", retrievedPts->npoints);
+
+            printPoints(retrievedPts, timestep);
+
+            int elmSize = adios_type_size(tempVar->type, NULL);
+            void *data = malloc(retrievedPts->npoints * elmSize);
+
+            // check returned temp data
+            adios_schedule_read_byid(f, currBatch, tempVar->varid, timestep , 1, data);
+            adios_schedule_read (f, currBatch, queryInfo->varName, timestep , 1, data);
+            adios_perform_reads(f, 1);
+
+            fprintf(stderr,"Total data retrieved:%"PRIu64"\n", retrievedPts->npoints);
+            if (tempVar->type == adios_double) {
+                for (i = 0; i < retrievedPts->npoints; i++) {
+                    fprintf(stderr,"%.6f\t", ((double*)data)[i]);
+                }
+                fprintf(stderr,"\n");
+            }
+            else if (tempVar->type == adios_real) {
+                for (i = 0; i < retrievedPts->npoints; i++) {
+                    fprintf(stderr,"%.6f\t", ((float*)data)[i]);
+                }
+                fprintf(stderr,"\n");
+            }
+
+
+            free(data);
+            adios_selection_delete(currBatch);
+            currBatch = NULL;
+
+        }
+
+    }
+
+    adios_query_free(queryInfo->query);
+}
+
+int main(int argc, char ** argv) {
+
+    int i, j, datasize, if_any;
+    char xmlFileName[256];
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    ADIOS_QUERY_TEST_INFO *queryInfo;
+    ADIOS_FILE *f;
+
+
+    MPI_Init(&argc, &argv);
+
+    if (argc != 4) {
+        fprintf(stderr," usage: %s {input bp file} {xml file} {query engine (ALACRITY/FASTBIT)}\n", argv[0]);
+        MPI_Finalize();
+        exit(-1);
+    }
+    else {
+        strcpy(xmlFileName,  argv[2]);
+    }
+
+    enum ADIOS_QUERY_METHOD query_method = ADIOS_QUERY_METHOD_UNKNOWN;
+    if (strcmp(argv[3], "ALACRITY") == 0) {
+    	query_method = ADIOS_QUERY_METHOD_ALACRITY;
+    	abort();
+    }
+    else if (strcmp(argv[3], "FASTBIT") == 0) {
+    	query_method = ADIOS_QUERY_METHOD_FASTBIT;
+    }
+    else {
+        printf("Unsupported query engine, exiting...\n");
+        MPI_Finalize();
+        exit(-1);
+    }
+
+    // ADIOS init
+    adios_read_init_method(method, comm, NULL);
+
+    f = adios_read_open_file(argv[1], method, comm);
+    if (f == NULL) {
+        MPI_Finalize();
+        fprintf(stderr," can not open file %s \n", argv[1]);
+        exit(-1);
+    }
+
+    // Parse the xml file to generate query info
+    queryInfo = parseXml(xmlFileName, f);
+
+    // perform query
+    adios_query_set_method(queryInfo->query, query_method);
+    performQuery(queryInfo, f);
+
+
+    adios_read_close(f);
+    adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/tests/C/query/alacrity/adios_build_alac_index.c b/tests/C/query/alacrity/adios_build_alac_index.c
new file mode 100644
index 0000000..4de7689
--- /dev/null
+++ b/tests/C/query/alacrity/adios_build_alac_index.c
@@ -0,0 +1,729 @@
+/*
+ * 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 <inttypes.h>
+#include <mxml.h>
+#include <sys/stat.h>
+//#include "core/adios_internals.c"
+
+//#define GET_ATTR(n,attr,var,en)
+#define GET_ATTR2(n,attr,var,en)                                 \
+    if (!strcasecmp (n, attr->name)) {                           \
+        if (!var)                                                \
+        {                                                        \
+            var = attr->value;                                   \
+            continue;                                            \
+        }                                                        \
+        else                                                     \
+        {                                                        \
+            printf ("xml: duplicate attribute %s on %s (ignored)",n,en); \
+            continue;                                            \
+        }                                                        \
+    }   
+
+
+void trim_spaces2 (char * str)
+{
+    char * t = str, * p = NULL;
+    while (*t != '\0')
+    {
+        if (*t == ' ')
+        {
+            p = t + 1;
+            strcpy (t, p);
+        }
+        else
+            t++;
+    }
+
+}
+
+void tokenize_dimensions2 (const char * str, char *** tokens, int * count)
+{
+    if (!str)
+    {
+        *tokens = 0;
+        *count = 0;
+
+        return;
+    }
+
+    char * save_str = strdup (str);
+    char * t = save_str;
+    int i;
+
+    trim_spaces (save_str);
+
+    if (strlen (save_str) > 0)
+        *count = 1;
+    else
+    {
+        *tokens = 0;
+        *count = 0;
+        free (save_str);
+
+        return;
+    }
+
+    while (*t)
+    {
+        if (*t == ',')
+            (*count)++;
+        t++;
+    }
+
+    *tokens = (char **) malloc (sizeof (char **) * *count);
+    (*tokens) [0] = strdup (strtok (save_str, ","));
+    for (i = 1; i < *count; i++)
+    {
+        (*tokens) [i] = strdup (strtok (NULL, ","));
+    }
+
+    free (save_str);
+}
+//end of stolen functions
+
+struct dimensions {
+    uint8_t ndims;
+    uint32_t * dims ;
+    uint8_t element_size;
+};
+
+typedef struct dimensions dim_t;
+
+void adios_pin_timestep(uint32_t ts); // Not in the standard header, but accessible
+
+dim_t * initDimension(uint8_t ndims, uint8_t elementSize){
+	dim_t * D = (dim_t *) malloc(sizeof(dim_t));
+	D->ndims = ndims;
+	D->element_size  = elementSize;
+	D->dims = (uint32_t* ) malloc(sizeof(uint32_t) * ndims);
+	return D;
+}
+
+void freeDimension(dim_t * D){
+	free(D->dims);
+}
+
+void printDimension(dim_t *D){
+	printf("ndims[%u], element size [%u], ", D->ndims, D->element_size);
+	printf("dims [");
+	uint8_t i = 0;
+	for(i = 0; i < D->ndims; i ++){
+		if (i != D->ndims -1){
+			printf("%"PRIu32",", D->dims[i]);
+		}else {
+			printf("%"PRIu32"]", D->dims[i]);
+		}
+	}
+	printf("\n");
+}
+void printListVars(char **vars, int numVars){
+	int i = 0;
+	printf("[");
+	for (i = 0; i < numVars; i ++){
+		if ( i != numVars -1){
+			printf("%s,", vars[i]);
+		}else {
+			printf("%s]", vars[i]);
+		}
+	}
+	printf("\n");
+}
+
+// Tang: add timestep and pg offset struct
+struct timesteps {
+    uint8_t nts;
+    //uint32_t * tss ;
+};
+typedef struct timesteps ts_t;
+
+ts_t* initTimestep(uint8_t nts){
+    ts_t * D = (ts_t *) malloc(sizeof(ts_t));
+    D->nts = nts;
+    //D->tss = (uint32_t* ) malloc(sizeof(uint32_t) * nts);
+    return D;
+}
+
+void freeTimestep(ts_t * D){
+    //free(D->tss);
+    free(D);
+}
+
+struct pgoffset{
+    uint8_t ndims;
+    uint8_t npg;
+    uint32_t * off;
+};
+typedef struct pgoffset pgoff_t;
+
+pgoff_t* initPGoff(uint8_t npg, uint8_t ndims){
+    pgoff_t * D = (pgoff_t *) malloc(sizeof(pgoff_t));
+    D->npg   = npg;
+    D->ndims = ndims;
+    D->off   = (uint32_t* ) malloc(sizeof(uint32_t) * npg * ndims);
+    return D;
+}
+
+void freePGoff(pgoff_t* D){
+    free(D->off);
+}
+
+// Tang ^
+
+
+/*
+ * calculate the offset of each PG(rank), highest dimension is the fastest dimension
+ */
+uint32_t * calPGOffsets(const int rank , const uint32_t *dataDim, const uint32_t *pgDim, uint8_t ndims){
+
+	uint32_t pgSize = 1, tmpSize = 1;
+	uint8_t i = 0, j = 0, k = 0;
+    for (i = 0; i < ndims; i ++) {
+        pgSize *= pgDim[i];
+    }
+    uint32_t startOffset = rank * pgSize;
+    uint32_t remain = startOffset;
+    uint32_t * offsets= malloc(ndims* sizeof(uint32_t));
+	while ( j < ndims){ // j is the dimension to been set
+		k = j + 1;
+		tmpSize = 1;
+		while ( k < ndims){
+			tmpSize *= dataDim[k];
+			k++;
+		}
+		offsets[j] = remain / tmpSize ;
+		remain = remain  %  tmpSize;
+		j ++;
+	}
+	return offsets;
+}
+
+// Given the input file, you want to divide the data into different PG sizes, data is transformed by ALACRITY plugin
+// Run this program with only ONE processor.
+// this file is stolen from ../transform/adios_write_all_3D.c
+
+void adios_write_pg ( char input_dir [], char transform [], uint8_t nvars, char **vars,
+                       dim_t *data_dim, dim_t *pg_dim, ts_t *data_ts, pgoff_t *pgOff)
+{
+    int         rank, size;
+    int         i = 0,   pg = 0; // timestep
+    uint32_t    pg_var_size = pg_dim->element_size;
+    uint32_t    data_var_size = data_dim->element_size;
+
+    uint32_t    numPGs = 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);
+
+    // 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);
+
+    numPGs = 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");
+        printf("%s\n", varfile [i]);
+        if ( fp[i] == NULL){
+        	printf("can not open file %s\n", varfile[i]);
+        	return ;
+        }
+//        assert (fp [i] != 0);
+    }
+    char *pg_var_data = (char *) malloc (pg_var_size);
+
+    int timestep = 1;
+
+
+    adios_groupsize = 0;
+    adios_groupsize += 4 /*rank*/   + 4  /*size*/ ;
+    adios_groupsize += (4 * data_dim->ndims); // /* N_0 + N_{ndim -1} , entire data domain space*/
+    adios_groupsize += (4 * data_dim->ndims); // /* O_0 + O_{ndim -1} , offset of write data subspace*/
+    adios_groupsize += (4 * data_dim->ndims); // /* D_0 + D_{ndim -1} , pg dimension*/
+    adios_groupsize += nvars * ( pg_var_size ); //  total variable size
+
+    /*quick dirty fix on the incorrect data size estimation on the very small data size from transformer */
+    adios_groupsize += 10000;
+
+    printf("adios_groupsize = %"PRIu64 "\n", adios_groupsize);
+
+    char tmp[256];
+    uint8_t k  = 0;
+
+    int tsIdx;
+    for (tsIdx = 0; tsIdx < data_ts->nts; tsIdx++) {
+        printf("Writing timestep %d\n", tsIdx);
+        if (tsIdx == 0) {
+            adios_open (&adios_handle, "S3D", output_bp_file, "w", comm);
+        } else {
+            adios_open (&adios_handle, "S3D", output_bp_file, "a", comm);
+        }
+
+           adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+            //    adios_open (&adios_handle, "S3D", output_bp_file, "w", comm);
+        for (pg = 0; pg < numPGs; pg ++) {
+
+            char prefix[256];
+            strcpy(prefix, "N%d");
+            	for (k = 0; k < data_dim -> ndims ; k ++ ) {
+            		sprintf(tmp, prefix, k); // N0, N1... D0, D1 ... O0, O1, ...
+            		adios_write (adios_handle, tmp, &(data_dim->dims[k]));
+            	}
+            	strcpy(prefix, "D%d");
+            	for (k = 0; k < pg_dim -> ndims ; k ++ ) {
+            		sprintf(tmp, prefix, k); // N0, N1... D0, D1 ... O0, O1, ...
+            		adios_write (adios_handle, tmp, &(pg_dim->dims[k]));
+            	}
+            	strcpy(prefix, "O%d");
+            	for (k = 0; k < data_dim -> ndims ; k ++ ) {
+            		sprintf(tmp, prefix, k); // N0, N1... D0, D1 ... O0, O1, ...
+            		adios_write (adios_handle, tmp, &(pgOff->off[pg*(pg_dim->ndims)+k]));
+            		//adios_write (adios_handle, tmp, &(offsets[k]));
+            	}
+
+            adios_write (adios_handle, "size", &size);
+            adios_write (adios_handle, "rank", &pg);
+
+            // fread and adios_write for each variable
+            int readBytes;
+            for (i = 0; i < nvars; i ++) {
+                readBytes = fread (pg_var_data, sizeof (char), pg_var_size, fp [i]);
+                //printf("%d %x %d\n", pg_var_size, *fp [i], readBytes);
+                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 ;
+}
+
+void testCalculation(dim_t *data_dim, dim_t *pg_dim){
+    uint32_t pg_var_size = pg_dim->element_size;
+    uint32_t data_var_size = data_dim->element_size;
+    int i = 0, k;
+    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];
+    }
+    uint32_t numPGs = data_var_size / pg_var_size;
+    uint32_t j = 0;
+    uint32_t *offset;
+    for(j = 0;j < numPGs;j++){
+        offset = calPGOffsets(j, data_dim->dims, pg_dim->dims, data_dim->ndims);
+        printf("rank [%d] {", j);
+        for(k = 0;k < data_dim->ndims;k++){
+            if(k != data_dim->ndims - 1){
+                printf("%d,", offset[k]);
+            }else{
+                printf("%d}", offset[k]);
+            }
+        }
+        printf("\n");
+		free(offset);
+
+    }
+
+}
+
+/*
+ * a bunch of fixed test cases
+ */
+void testCalPGOffset(){
+	dim_t d1 ;
+	dim_t p1 ;
+	d1.ndims = 1;
+	d1.element_size = 8;
+	d1.dims [ 0] = 128;
+	p1.ndims = 1 ;
+	p1.dims[ 0] = 32;
+	p1.element_size = 8;
+	printf("testing 1 dimension \n");
+	testCalculation(&d1, &p1);
+
+	dim_t d2 ;
+	dim_t p2 ;
+	d2.ndims = 2;
+	d2.element_size = 8;
+	d2.dims [ 0] = 32;
+	d2.dims [ 1] = 32;
+	p2.ndims = 2 ;
+	p2.dims[ 0] = 16;
+	p2.dims[ 1] = 8;
+	p2.element_size = 8;
+	printf("testing 2 dimension \n");
+	testCalculation(&d2, &p2);
+
+	dim_t data_dim;
+	dim_t pg_dim;
+
+	data_dim.ndims = 3;  // data variable dimension size
+	data_dim.dims [0] = 32;  //256;
+	data_dim.dims [1] = 32 ;  //128;
+	data_dim.dims [2] = 32;   //128;
+	data_dim.element_size = 8;
+
+	pg_dim.ndims = 3; // each block dimension size
+	pg_dim.dims [0] = 16; //64
+	pg_dim.dims [1] = 16; //32
+	pg_dim.dims [2] = 16; //32
+	pg_dim.element_size = 8;
+	printf("testing 3 dimension \n");
+    testCalculation(&data_dim, &pg_dim);
+}
+
+
+int  parseInputs(char * inputxml, dim_t **dataDim, dim_t **pgDim, char*** varList, int *numVarsOut, ts_t **dataTs, pgoff_t **pgOff){
+
+	FILE * fp = fopen (inputxml,"r");
+	if (!fp){
+		printf("missing xml input file %s \n", inputxml);
+		return 1;
+	}
+	struct stat s;
+	char * buffer = NULL;
+	if (stat (inputxml, &s) == 0) {
+		buffer = malloc (s.st_size + 1);
+		buffer [s.st_size] = 0;
+	}
+
+	if (buffer)	{
+		size_t bytes_read = fread (buffer, 1, s.st_size, fp);
+
+		if (bytes_read != s.st_size) {
+			printf("error reading input xml file: %s. Expected %ld Got %ld\n"
+		                        ,inputxml, s.st_size, bytes_read );
+			fclose(fp);
+		    return 1;
+		}
+	}
+	fclose (fp);
+	mxml_node_t * doc = NULL;
+	mxml_node_t * root = NULL;
+	mxml_node_t * varsNode = NULL;
+	doc = mxmlLoadString (NULL, buffer, MXML_TEXT_CALLBACK);
+	free (buffer);
+	buffer = NULL;
+	root = doc;
+
+	 if (!doc) {
+	        printf( "unknown error parsing XML (probably structural)\n"
+	                "Did you remember to start the file with\n"
+	                "<?xml version=\"1.0\"?>\n");
+
+	        return 0;
+	    }
+	if (strcasecmp (doc->value.element.name, "adios-alac-test-inputs")) {
+	        root = mxmlFindElement (doc, doc, "adios-alac-test-inputs", NULL, NULL, MXML_DESCEND_FIRST);
+        }
+
+	varsNode = mxmlFindElement(root, root, "vars", NULL, NULL, MXML_DESCEND_FIRST);
+	mxml_node_t * varnode = NULL, *dimnode = NULL;
+	const char * varname = 0,  *dimS = 0, *dataDimS = 0, *pgDimS = 0, *numVarS=0, *elmSizeS=0;
+
+	int numVars = 0, i, j, numDim=0, countVar= 0, elmSize = 0;
+	for (i = 0; i < varsNode->value.element.num_attrs; i++) {
+		mxml_attr_t * attr = &varsNode->value.element.attrs [i];
+		GET_ATTR2("num",attr,numVarS,"vars");
+	}
+	if ( !numVarS || !strcmp ( numVarS, "")) {
+			printf("missing values for num attribute \n");
+			mxmlRelease(doc);
+			return 0;
+	}else {
+			numVars = atoi(numVarS);
+	}
+
+        // Tang: parsing timestep info
+        mxml_node_t * tsnode = NULL;                     
+        const char * tsNumS = NULL, *tsS = NULL;               
+        int tsNum = 0;                                   
+        tsnode = mxmlFindElement(varsNode, varsNode, "timestep", NULL, NULL, MXML_DESCEND_FIRST);
+	if ( !tsnode) {
+	    printf("missing timestep element under vars \n");
+	    mxmlRelease(doc);
+	    return 0;
+	}
+	for (i = 0; i < tsnode->value.element.num_attrs; i++) {
+	    mxml_attr_t * attr = &tsnode->value.element.attrs [i];
+	    GET_ATTR2("tsnum",attr,tsNumS,"timestep");
+	}
+	if ( !tsNumS || !strcmp ( tsNumS, "")) {
+	    printf("missing values for tsNum attribute on timestep element\n");
+	    mxmlRelease(doc);
+	    return 0;
+	}
+        else {
+	    tsNum = atoi(tsNumS);
+	}
+
+        (*dataTs) = initTimestep(tsNum); 
+
+        // Tang: ^
+
+	dimnode = mxmlFindElement(varsNode, varsNode, "dimension", NULL, NULL, MXML_DESCEND_FIRST);
+	if ( !dimnode) {
+		printf("missing dimension element under vars \n");
+		mxmlRelease(doc);
+		return 0;
+	}
+
+	uint32_t * inputDataDim, * inputPGDim ;
+	for (i = 0; i < dimnode->value.element.num_attrs; i++) {
+		mxml_attr_t * attr = &dimnode->value.element.attrs [i];
+		GET_ATTR2("dim",attr,dimS,"dimension");
+		GET_ATTR2("elementSize",attr,elmSizeS,"dimension");
+		GET_ATTR2("dataDim",attr,dataDimS,"dimension");
+		GET_ATTR2("pgDim",attr,pgDimS,"dimension");
+
+	}
+	if ( !dimS || !strcmp ( dimS, "")) {
+		printf("missing values for dim attribute on dimension element\n");
+		mxmlRelease(doc);
+		return 0;
+	}else{
+		numDim = atoi(dimS);
+	}
+	if ( !elmSizeS || !strcmp ( elmSizeS, "")) {
+				printf("missing values for elementSize attribute on dimension element \n");
+				mxmlRelease(doc);
+				return 0;
+	}else{
+		elmSize = atoi(elmSizeS);
+	}
+
+
+	int dim_count, pgCount;
+	char ** dim_tokens = 0, **pgDimTokens = 0;
+	if ( !dataDimS || !strcmp ( dataDimS, "")) {
+		printf("missing values for dataDim attribute on dimension element  \n");
+		mxmlRelease(doc);
+		return 0;
+	}
+
+	if ( !pgDimS || !strcmp ( pgDimS, "")) {
+		printf("missing values for pgDim attribute \n");
+		mxmlRelease(doc);
+		return 0;
+	}
+	tokenize_dimensions2 (dataDimS, &dim_tokens, &dim_count);
+	tokenize_dimensions2 (pgDimS, &pgDimTokens, &pgCount);
+	if (dim_count != numDim || pgCount != numDim){
+		printf("input dimension does not match expected number dimension \n");
+		mxmlRelease(doc);
+		return 0;
+	}
+	inputDataDim = (uint32_t *) malloc(sizeof(uint32_t)*numDim);
+	inputPGDim = (uint32_t *) malloc(sizeof(uint32_t)*numDim);
+
+	for (j = 0; j < numDim ; j ++){
+		inputDataDim[j] = atoi(dim_tokens[j]);
+		inputPGDim[j] = atoi(pgDimTokens[j]);
+	}
+
+	(*dataDim) = initDimension(numDim, elmSize);
+	memcpy((*dataDim)->dims, inputDataDim, sizeof(uint32_t)* (*dataDim)->ndims);
+	(*pgDim )= initDimension(numDim, elmSize);
+	memcpy((*pgDim)->dims, inputPGDim, sizeof(uint32_t)* (*pgDim)->ndims);
+
+	(*varList) = (char **) malloc(sizeof(char*) * numVars);
+	for(i= 0; i < numVars;  i ++){
+		(*varList)[i] = (char*) malloc(256);
+	}
+	for (varnode = mxmlWalkNext (varsNode, doc, MXML_DESCEND_FIRST)
+	           ;varnode
+	           ;varnode = mxmlWalkNext (varnode, varsNode, MXML_NO_DESCEND) ){
+	        if (varnode->type != MXML_ELEMENT) {
+	                   continue;
+	        }
+	        if (!strcasecmp (varnode->value.element.name, "var")) {
+	       	 for (i = 0; i < varnode->value.element.num_attrs; i++) {
+	       		 mxml_attr_t * attr = &varnode->value.element.attrs [i];
+	       		 if (!strcmp(attr->name, "name")){
+	       			 strcpy((*varList)[countVar], attr->value);
+	       			 countVar ++;
+	       		 }
+	       	 }
+
+	        }
+	}
+
+        *numVarsOut = numVars;
+	
+        
+        // Tang: Parsing pg offset info, assuming we have already know dim dataDim and pgDim
+        // from parsed result of <dimension/>
+        int nPG = 1;
+        for (i = 0; i < numDim; i++) {
+            nPG *= ((*dataDim)->dims[i] / (*pgDim)->dims[i]); 
+        }
+
+
+        mxml_node_t * pgoffnode = NULL;                     
+        const char * pgoffNumS = NULL, *pgoffS = NULL;               
+        int pgoffNum= 0;                                   
+        pgoffnode = mxmlFindElement(varsNode, varsNode, "pgoffset", NULL, NULL, MXML_DESCEND_FIRST);
+
+	if ( !pgoffnode) {
+	    printf("missing pgoffset element under vars \n");
+	    mxmlRelease(doc);
+	    return 0;
+	}
+
+	for (i = 0; i < pgoffnode->value.element.num_attrs; i++) {
+	    mxml_attr_t * attr = &pgoffnode->value.element.attrs [i];
+	    GET_ATTR2("pgNum",attr,pgoffNumS,"pgoffset");
+	}
+
+	if ( !pgoffNumS || !strcmp ( pgoffNumS, "")) {
+	    printf("missing values for tsNum attribute on timestep element\n");
+	    mxmlRelease(doc);
+	    return 0;
+	}
+        else {
+	    pgoffNum = atoi(pgoffNumS);
+	}
+
+        if (pgoffNum != nPG) {
+	    printf("pgNum from pgoffset doesn't match the number of pgs calculated from dataDim/pgDim \n");
+	    mxmlRelease(doc);
+	    return 0;
+        }
+
+        (*pgOff) = initPGoff(nPG, numDim);
+
+        char pgoffName[16];
+        char** pgoffValueS;
+        char** pgoffValue_tokens=NULL;
+        pgoffValueS = (char**)malloc(sizeof(char*) * nPG);
+        for (i = 0; i < nPG; i++) {
+            pgoffValueS[i] = NULL;
+        }
+        pgoffnode = mxmlFindElement(varsNode, varsNode, "pgoffset", NULL, NULL, MXML_DESCEND_FIRST);
+	for (i = 0; i < pgoffnode->value.element.num_attrs; i++) {
+	    mxml_attr_t * attr = &pgoffnode->value.element.attrs [i];
+            for (j = 0; j < nPG; j++) {
+                sprintf(pgoffName,"pg_%d", j);
+                if (pgoffValueS[j] != NULL) {
+                    continue;
+                }
+	        GET_ATTR2(pgoffName,attr,pgoffValueS[j],"pgoffset");
+            }
+	}
+
+        for (i = 0; i < nPG; i++) {
+            tokenize_dimensions2 (pgoffValueS[i], &pgoffValue_tokens, &numDim);
+            for (j = 0; j < numDim; j++) {
+                (*pgOff)->off[i*numDim+j] = atoi(pgoffValue_tokens[j]);
+            }
+        }
+
+        for (i = 0; i < nPG; i++) {
+            printf("PG offset_%d: ",i);
+            for (j = 0; j < numDim; j++) {
+                printf("%d ",(*pgOff)->off[i*numDim+j]);
+            }
+            printf("\n");
+        }
+
+        free(pgoffValueS);
+	free(inputDataDim);
+	free(inputPGDim);
+	return 0;
+}
+/*
+ * ./adios_build_alac_index ./xml alacrity-1var ./xml/build-alac-index-input.xml
+ */
+int main (int argc, char ** argv)
+{
+    MPI_Init (&argc, &argv);
+
+  if (argc >= 4) {
+	 dim_t *dataDim , *pgDim ;
+         ts_t *dataTs;              // Tang: add for timestep
+         pgoff_t *pgOff;            // Tang: add for pg offsets
+	 char **vars ;
+	 int numVar;
+	 //if ( parseInputs(argv[3],&dataDim,&pgDim, &vars , &numVar) ){
+	 if ( parseInputs(argv[3],&dataDim,&pgDim, &vars , &numVar, &dataTs, &pgOff) ){
+		 printf("errors in the input xml file parse \n");
+		 return 0;
+	 }else {
+		 printf("XML Inputs info \n");
+		 printf("data space: ");
+		 printDimension(dataDim);
+		 printf("PG space: ");
+		 printDimension(pgDim);
+		 printListVars(vars, numVar);
+	 }
+	 printf("Write BP file \n");
+	 //adios_write_pg (argv [1], argv [2], numVar, vars, dataDim, pgDim);
+	 adios_write_pg (argv [1], argv [2], numVar, vars, dataDim, pgDim, dataTs, pgOff);
+	 freeDimension(dataDim);
+	 freeDimension(pgDim);
+         freeTimestep(dataTs);     // Tang: free dataTs
+         freePGoff(pgOff);
+
+  } else {
+	  printf ("Usage: %s <base directory> <transform> <input xml> \n Example: ./adios_build_alac_index ./xml alacrity-1var ./xml/build-alac-index-input.xml \n", argv [0]);
+ }
+
+
+    MPI_Finalize ();
+    return 0;
+}
+
diff --git a/tests/C/query/alacrity/adios_read_block.c b/tests/C/query/alacrity/adios_read_block.c
new file mode 100644
index 0000000..dcfe5e7
--- /dev/null
+++ b/tests/C/query/alacrity/adios_read_block.c
@@ -0,0 +1,64 @@
+/*
+ * read_block.c
+ *
+ *  Created on: Dec 5, 2014
+ *      Author: xczou
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <string.h>
+#include <assert.h>
+#include "adios_selection.h"
+#include "adios_query.h"
+#include "adios_error.h"
+#include <mxml.h>
+#include <sys/stat.h>
+#include "adios_query_xml_parse.h"
+
+int main(int argc, char ** argv) {
+
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    ADIOS_QUERY_TEST_INFO *queryInfo;
+    ADIOS_FILE *f;
+
+
+    MPI_Init(&argc, &argv);
+
+
+   f = adios_read_open_file(argv[1], method, comm);
+   if (f == NULL) {
+	   fprintf(stderr," can not open file %s \n", argv[1]);
+	   MPI_Abort(comm, 1);
+   }
+
+   int block = 111;
+
+   if (argc >=3) {
+	   block = atoi(argv[2]);
+   }
+	void *data = malloc(sizeof(double) * 44*36*22);
+
+   ADIOS_SELECTION* currBatch = adios_selection_writeblock(block);
+
+   adios_schedule_read (f, currBatch , "/temp", 0, 1, data);
+   adios_perform_reads(f, 1);
+
+   int i = 0;
+   for (i = 0; i <44 * 36 *22; i++) {
+        fprintf(stdout,"%.6f\n", ((double*)data)[i]);
+   }
+
+   adios_selection_delete(currBatch);
+   free(data);
+   adios_read_close(f);
+   adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+
+   MPI_Finalize();
+
+}
diff --git a/tests/C/query/alacrity/adios_read_ext_test.c b/tests/C/query/alacrity/adios_read_ext_test.c
new file mode 100644
index 0000000..880a59a
--- /dev/null
+++ b/tests/C/query/alacrity/adios_read_ext_test.c
@@ -0,0 +1,165 @@
+/*
+ * adios_read_ext_test.c
+ *
+ *  Created on: Jun 15, 2014
+ *      Author: xczou
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+#include "adios_read_ext.h"
+
+void test_adios_inq_var_transform(ADIOS_FILE *fp, ADIOS_VARINFO *v)
+{
+    int blockId = 0;
+    //======For this example, it only has one block =========/
+    ADIOS_VARTRANSFORM *tfv = adios_inq_var_transform(fp, v);
+    ADIOS_TRANSFORM_METADATA *tmetas = tfv->transform_metadatas;
+    ADIOS_TRANSFORM_METADATA tmeta = tmetas[blockId];
+    assert(tmeta.length == 24);
+    uint64_t *threeData = (uint64_t*)tmeta.content;
+    printf("meta size: %" PRIu64 ", index size: %" PRIu64
+			", data size: %" PRIu64 "\n"
+			, threeData[0], threeData[1], threeData[2]);
+
+    adios_free_var_transform(tfv);
+}
+
+
+/*
+ * ADIOS_PG_INTERSECTIONS * adios_find_intersecting_pgs(
+		const ADIOS_FILE *fp, int varid, const ADIOS_SELECTION *sel
+		, const int from_step, const int nsteps);
+ */
+
+void test_adios_find_intersecting_pgs(ADIOS_FILE *fp, ADIOS_VARINFO *v ){
+
+	int from_step =0;
+	int nsteps =1, i = 0,j =0;
+
+	uint64_t start[3] = {128,64,64};
+	uint64_t count[3] = {1,1,1};
+	ADIOS_SELECTION *emtpySel =  adios_selection_boundingbox(3, start, count);
+	ADIOS_PG_INTERSECTIONS* intersectedPGs = adios_find_intersecting_pgs(
+			fp, v->varid, emtpySel, from_step, nsteps);
+
+	assert(intersectedPGs->npg == 0);
+//  if there is no bounding box,  intersections is still non-NULL
+//	assert(intersectedPGs->intersections == NULL);
+	adios_selection_delete(emtpySel);
+	printf("passed emtpy selelction \n");
+	adios_free_pg_intersections(&intersectedPGs);
+
+	//TODO: free ADIOS_PG_INTERSECTIONS
+
+
+	start[0]= 12; start[1] = 10; start[2] =46;
+	count[0]= 188; count[1]=20; count[2]=3;
+	ADIOS_SELECTION *overlapSel =  adios_selection_boundingbox(3, start, count);
+	ADIOS_PG_INTERSECTIONS* intersectedPGs2 = adios_find_intersecting_pgs(
+				fp, v->varid, overlapSel, from_step, nsteps);
+	int totalnpg = intersectedPGs2->npg;
+	ADIOS_PG_INTERSECTION *  PGs = intersectedPGs2->intersections;
+
+
+	printf("user's input selection box: ");
+	if (overlapSel->type == ADIOS_SELECTION_BOUNDINGBOX ){
+			const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *olBB = &(overlapSel->u.bb);
+			for(i=0; i < olBB->ndim; i++){
+				printf("(%" PRIu64 ": %"PRIu64"), " , olBB->start[i], olBB->count[i] );
+			}
+			printf("\n");
+	}
+
+	printf("intersected # of PGs: %d \n", totalnpg);
+	ADIOS_PG_INTERSECTION pg;
+	for(j= 0; j < totalnpg; j ++){
+		pg = PGs[j];
+		printf("intersected PG[%d], timestep[%d], PG id in TS[%d]\n", pg.blockidx, pg.timestep, pg.blockidx_in_timestep);
+		ADIOS_SELECTION * pgSelBox = pg.pg_bounds_sel;
+
+		printf("overlapped PG bounding box: ");
+		if (pgSelBox->type == ADIOS_SELECTION_BOUNDINGBOX ){
+			const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgBB = &(pgSelBox->u.bb);
+				for(i=0; i < pgBB->ndim; i++){
+					printf("(%" PRIu64 ": %"PRIu64"), " , pgBB->start[i], pgBB->count[i] );
+				}
+				printf("\n");
+		}
+		ADIOS_SELECTION * intersectedBox = pg.intersection_sel;
+		printf("intersected bounding box: ");
+		if (intersectedBox->type == ADIOS_SELECTION_BOUNDINGBOX ){
+				const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *interBB = &(intersectedBox->u.bb);
+					for(i=0; i < interBB->ndim; i++){
+						printf("(%" PRIu64 ": %"PRIu64"), " , interBB->start[i], interBB->count[i] );
+					}
+					printf("\n");
+		}
+	}
+
+	adios_selection_delete(overlapSel);
+	adios_free_pg_intersections(&intersectedPGs2);
+
+}
+
+
+/*
+ * RUN with one processor is enough
+ */
+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);
+
+    if (argc < 2 ){
+    	printf(" usage: %s {input bp file} \n", argv[0]);
+    	return 1;
+    }
+    adios_read_init_method (method, comm, NULL);
+
+    ADIOS_FILE * fp = adios_read_open_file (argv[1], method, comm);
+
+    if ( fp == NULL){
+    	printf(" can not open file %s \n", argv[1]);
+    	return 1;
+    }
+
+    char varName[256] = "rdm";
+
+    ADIOS_VARINFO* v = adios_inq_var(fp, varName);
+    //====================start to test ==================//
+
+    data_view_t  dv = PHYSICAL_DATA_VIEW;
+    adios_read_set_data_view(fp, dv);
+    test_adios_inq_var_transform(fp, v);
+
+
+
+    dv = LOGICAL_DATA_VIEW;
+    adios_read_set_data_view(fp, dv);
+    test_adios_find_intersecting_pgs(fp,v);
+
+
+    adios_read_close (fp);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+
+
+    MPI_Finalize ();
+    return 0;
+}
+
diff --git a/tests/C/query/alacrity/adios_show_bp_file.c b/tests/C/query/alacrity/adios_show_bp_file.c
new file mode 100644
index 0000000..19cc061
--- /dev/null
+++ b/tests/C/query/alacrity/adios_show_bp_file.c
@@ -0,0 +1,117 @@
+/*
+ * adios_show_bp_file.c
+ *
+ *  Created on: Jun 21, 2014
+ *      Author: xczou
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+#include "adios_read_ext.h"
+
+void showBPFile(ADIOS_FILE * fp, char *varName );
+
+void showBPFile(ADIOS_FILE * fp, char *varName ){
+	int i  = 0, j = 0;
+	 printf("adios file : ");
+	    printf("nvar %d", fp->nvars);
+	    for(i=0; i < fp->nvars; i++) {
+	    	printf(" { %s }", fp->var_namelist[i]);
+	    }
+	    printf(" || nattrs %d", fp->nattrs);
+	    for(i=0; i < fp->nattrs; i++) {
+	       	printf(" { %s }", fp->attr_namelist[i]);
+	    }
+	    printf("\n");
+
+
+		ADIOS_VARINFO* v = adios_inq_var(fp, varName);
+		if (v == NULL) {
+			printf(" Error! no such var:%s \n", varName);
+			return ;
+		}
+
+		printf("var info: ");
+		printf("varId: %d, type: %d, ndim: %d, nsteps: %d, total nblocks: %d, ",
+				v->varid, v->type, v->ndim, v->nsteps, v->sum_nblocks);
+
+		printf("dims: {");
+		for(i = 0; i < v->ndim; i++){
+			printf("%" PRIu64 ",", v->dims[i]);
+		}
+		printf("}\n");
+
+		i = adios_inq_var_blockinfo(fp, v);
+		if (i != 0){
+			printf("error from adios_inq_var_blockinfo \n");
+			return ;
+		}
+
+		printf("number of blocks in each timestep: {");
+		for(i = 0 ; i < v->nsteps; i++){
+			printf ("%d,", v->nblocks[i]); // it is an array of length n->nsteps;
+		}
+		printf("}\n");
+
+		ADIOS_VARBLOCK * bi = v->blockinfo;
+		printf("block info: ");
+		for(i=0; i< v->sum_nblocks; i++){
+			printf("{ ");
+			for(j = 0; j < v->ndim; j ++){
+				printf("%" PRIu64 ": %"PRIu64 " , ", bi[i].start[j], bi[i].count[j]);
+			}
+			printf(" }");
+		}
+		printf("\n");
+}
+
+
+/*
+ * RUN with one processor is enough
+ */
+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);
+
+    if (argc < 3 ){
+    	printf(" usage: %s {input bp file} {variable name} \n", argv[0]);
+    	return 1;
+    }
+    adios_read_init_method (method, comm, NULL);
+
+    ADIOS_FILE * fp = adios_read_open_file (argv[1], method, comm);
+
+    if ( fp == NULL){
+    	printf(" can not open file %s \n", argv[1]);
+    	return 1;
+    }
+
+    char varName[256];
+    strcpy(varName, argv[2]);
+    ADIOS_VARINFO* v = adios_inq_var(fp, varName);
+    showBPFile(fp, varName);
+
+    adios_read_close (fp);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+
+
+    MPI_Finalize ();
+    return 0;
+}
+
diff --git a/tests/C/query/common/CMakeLists.txt b/tests/C/query/common/CMakeLists.txt
new file mode 100644
index 0000000..f8f7fa1
--- /dev/null
+++ b/tests/C/query/common/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+include_directories(${MXML_INCLUDE_DIR})
+
+add_library(parse_test_query_xml adios_query_xml_parse.c adios_query_xml_parse.h)
+target_link_libraries(parse_test_query_xml adios)
+
+add_executable(compute_expected_query_results compute_expected_query_results.c)
+target_link_libraries(compute_expected_query_results parse_test_query_xml adios ${ADIOSLIB_LDADD}) 
+
+add_executable(adios_query_test adios_query_test.c)
+target_link_libraries(adios_query_test parse_test_query_xml adios ${ADIOSLIB_LDADD})
+set_target_properties(adios_query_test PROPERTIES COMPILE_FLAGS "${ALACRITY_CPPFLAGS}")
diff --git a/tests/C/query/common/Makefile.am b/tests/C/query/common/Makefile.am
new file mode 100644
index 0000000..a657f25
--- /dev/null
+++ b/tests/C/query/common/Makefile.am
@@ -0,0 +1,25 @@
+INCLUDES = $(all_includes)
+INCLUDES += $(ADIOSLIB_CPPFLAGS)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS = compute_expected_query_results adios_query_test
+noinst_LIBRARIES = libparse_test_query_xml.a
+
+libparse_test_query_xml_a_SOURCES = adios_query_xml_parse.c adios_query_xml_parse.h
+libparse_test_query_xml_a_LIBADD = $(top_builddir)/src/libadios.a
+
+compute_expected_query_results_SOURCES = compute_expected_query_results.c
+compute_expected_query_results_LDADD = $(builddir)/libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+compute_expected_query_results_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+adios_query_test_SOURCES = adios_query_test.c
+adios_query_test_LDADD = libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_query_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_query_test_CPPFLAGS = $(ALACRITY_CPPFLAGS)
+
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+#EXTRA_DIST = test_config_flex.xml 
diff --git a/examples/C/compression_test/Makefile.in b/tests/C/query/common/Makefile.in
similarity index 78%
rename from examples/C/compression_test/Makefile.in
rename to tests/C/query/common/Makefile.in
index 3940142..5f4e073 100644
--- a/examples/C/compression_test/Makefile.in
+++ b/tests/C/query/common/Makefile.in
@@ -15,6 +15,7 @@
 
 @SET_MAKE@
 
+
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -34,9 +35,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = adios_global$(EXEEXT) adios_read_box$(EXEEXT) \
-	adios_read_points$(EXEEXT) genarray3D$(EXEEXT)
-subdir = examples/C/compression_test
+noinst_PROGRAMS = compute_expected_query_results$(EXEEXT) \
+	adios_query_test$(EXEEXT)
+subdir = tests/C/query/common
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -50,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,47 +68,52 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libparse_test_query_xml_a_AR = $(AR) $(ARFLAGS)
+libparse_test_query_xml_a_DEPENDENCIES =  \
+	$(top_builddir)/src/libadios.a
+am_libparse_test_query_xml_a_OBJECTS =  \
+	adios_query_xml_parse.$(OBJEXT)
+libparse_test_query_xml_a_OBJECTS =  \
+	$(am_libparse_test_query_xml_a_OBJECTS)
 PROGRAMS = $(noinst_PROGRAMS)
-am_adios_global_OBJECTS = adios_global.$(OBJEXT)
-adios_global_OBJECTS = $(am_adios_global_OBJECTS)
+am_adios_query_test_OBJECTS =  \
+	adios_query_test-adios_query_test.$(OBJEXT)
+adios_query_test_OBJECTS = $(am_adios_query_test_OBJECTS)
 am__DEPENDENCIES_1 =
-adios_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-adios_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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)
-adios_read_box_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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)
-adios_read_points_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_query_test_DEPENDENCIES = libparse_test_query_xml.a \
+	$(top_builddir)/src/libadios.a $(am__DEPENDENCIES_1)
+adios_query_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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)
-genarray3D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(genarray3D_LDFLAGS) $(LDFLAGS) -o $@
+	$(adios_query_test_LDFLAGS) $(LDFLAGS) -o $@
+am_compute_expected_query_results_OBJECTS =  \
+	compute_expected_query_results.$(OBJEXT)
+compute_expected_query_results_OBJECTS =  \
+	$(am_compute_expected_query_results_OBJECTS)
+compute_expected_query_results_DEPENDENCIES =  \
+	$(builddir)/libparse_test_query_xml.a \
+	$(top_builddir)/src/libadios.a $(am__DEPENDENCIES_1)
+compute_expected_query_results_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) \
+	$(compute_expected_query_results_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -119,10 +126,12 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-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)
+SOURCES = $(libparse_test_query_xml_a_SOURCES) \
+	$(adios_query_test_SOURCES) \
+	$(compute_expected_query_results_SOURCES)
+DIST_SOURCES = $(libparse_test_query_xml_a_SOURCES) \
+	$(adios_query_test_SOURCES) \
+	$(compute_expected_query_results_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -148,6 +157,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -205,6 +216,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -304,11 +318,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -374,29 +390,20 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+INCLUDES = $(all_includes) $(ADIOSLIB_CPPFLAGS) -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)
-adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-adios_read_box_SOURCES = adios_read_box.c
-adios_read_box_LDADD = $(top_builddir)/src/libadiosread.a \
-	$(ADIOSLIB_LDADD)
-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)
-adios_read_points_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-genarray3D_SOURCES = genarray3D.c
-genarray3D_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-genarray3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+noinst_LIBRARIES = libparse_test_query_xml.a
+libparse_test_query_xml_a_SOURCES = adios_query_xml_parse.c adios_query_xml_parse.h
+libparse_test_query_xml_a_LIBADD = $(top_builddir)/src/libadios.a
+compute_expected_query_results_SOURCES = compute_expected_query_results.c
+compute_expected_query_results_LDADD = $(builddir)/libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+compute_expected_query_results_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_query_test_SOURCES = adios_query_test.c
+adios_query_test_LDADD = libparse_test_query_xml.a $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_query_test_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_query_test_CPPFLAGS = $(ALACRITY_CPPFLAGS)
 CLEANFILES = *.bp
-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:
@@ -410,9 +417,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/compression_test/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/query/common/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/compression_test/Makefile
+	  $(AUTOMAKE) --gnu tests/C/query/common/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -432,6 +439,13 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
 
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libparse_test_query_xml.a: $(libparse_test_query_xml_a_OBJECTS) $(libparse_test_query_xml_a_DEPENDENCIES) 
+	-rm -f libparse_test_query_xml.a
+	$(libparse_test_query_xml_a_AR) libparse_test_query_xml.a $(libparse_test_query_xml_a_OBJECTS) $(libparse_test_query_xml_a_LIBADD)
+	$(RANLIB) libparse_test_query_xml.a
+
 clean-noinstPROGRAMS:
 	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
 	echo " rm -f" $$list; \
@@ -440,18 +454,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-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)
+adios_query_test$(EXEEXT): $(adios_query_test_OBJECTS) $(adios_query_test_DEPENDENCIES) 
+	@rm -f adios_query_test$(EXEEXT)
+	$(adios_query_test_LINK) $(adios_query_test_OBJECTS) $(adios_query_test_LDADD) $(LIBS)
+compute_expected_query_results$(EXEEXT): $(compute_expected_query_results_OBJECTS) $(compute_expected_query_results_DEPENDENCIES) 
+	@rm -f compute_expected_query_results$(EXEEXT)
+	$(compute_expected_query_results_LINK) $(compute_expected_query_results_OBJECTS) $(compute_expected_query_results_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -468,6 +476,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+adios_query_test-adios_query_test.o: adios_query_test.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_query_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_query_test-adios_query_test.o `test -f 'adios_query_test.c' || echo '$(srcdir)/'`adios_query_test.c
+
+adios_query_test-adios_query_test.obj: adios_query_test.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_query_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_query_test-adios_query_test.obj `if test -f 'adios_query_test.c'; then $(CYGPATH_W) 'adios_query_test.c'; else $(CYGPATH_W) '$(srcdir)/adios_query_test.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -558,7 +572,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS) all-local
+all-am: Makefile $(LIBRARIES) $(PROGRAMS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -588,8 +602,8 @@ maintainer-clean-generic:
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+	clean-noinstPROGRAMS mostlyclean-am
 
 distclean: distclean-am
 	-rm -f Makefile
@@ -657,8 +671,8 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
-	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLIBRARIES 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 \
@@ -671,11 +685,7 @@ uninstall-am:
 	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)
+#EXTRA_DIST = test_config_flex.xml 
 
 # 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/query/common/adios_query_test.c b/tests/C/query/common/adios_query_test.c
new file mode 100644
index 0000000..39c373f
--- /dev/null
+++ b/tests/C/query/common/adios_query_test.c
@@ -0,0 +1,193 @@
+/*
+ * adios_query_test.c
+ *
+ *  Created on: Oct 2, 2014
+ *      Author: Houjun Tang
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <string.h>
+#include <assert.h>
+#include "adios_selection.h"
+#include "adios_query.h"
+#include "adios_error.h"
+#include <mxml.h>
+#include <sys/stat.h>
+#include "adios_query_xml_parse.h"
+
+void printRids(const ADIOS_SELECTION_POINTS_STRUCT * pts,  uint64_t *deststart, uint64_t *destcount) {
+    uint64_t i = 0, rid=0;
+    if (pts->ndim == 3) {
+        for (i = 0; i < pts->npoints; i++) {
+            rid =  (pts->points[i * 3 + 2] - deststart[2]) + (pts->points[i * 3 + 1] - deststart[1])  * destcount[2] +  (pts->points[i * 3] - deststart[0]) * destcount[2] * destcount[1];
+            fprintf(stdout,"[ %"PRIu64" ] ,", rid);
+        }
+    }
+
+    if (pts->ndim == 2) {
+        for (i = 0; i < pts->npoints; i++) {
+            rid =  (pts->points[i * 2 + 1] - deststart[1]) + (pts->points[i * 2 ] - deststart[0])  * destcount[1];
+            fprintf(stdout,"[ %"PRIu64" ] ,", rid);
+        }
+    }
+    fprintf(stdout,"\n");
+}
+
+void printPoints(const ADIOS_SELECTION_POINTS_STRUCT * pts, const int timestep) {
+    uint64_t i = 0;
+    int j;
+    for (i = 0; i < pts->npoints; i++) {
+        // first print timestep
+        fprintf(stdout,"%d", timestep);
+
+        for (j = 0; j < pts->ndim; j++) {
+            fprintf(stdout," %"PRIu64"", pts->points[i * pts->ndim + j]);
+        }
+        printf("\n");
+
+    }
+}
+
+int performQuery(ADIOS_QUERY_TEST_INFO *queryInfo, ADIOS_FILE *f, int use_streaming, int print_points, int read_results)
+{
+    int i = 0, timestep = 0 ;
+    ADIOS_VARINFO * tempVar = adios_inq_var(f, queryInfo->varName);
+
+    if (use_streaming)
+    	for (timestep = 0; timestep < queryInfo->fromStep; ++timestep)
+    		assert(adios_advance_step(f, 0, 0) == 0);
+
+    fprintf(stderr,"times steps for variable is: [%d, %d], batch size is %llu\n", queryInfo->fromStep, queryInfo->fromStep + queryInfo->numSteps, queryInfo->batchSize);
+    for (timestep = queryInfo->fromStep; timestep < queryInfo->fromStep + queryInfo->numSteps; timestep ++) {
+        fprintf(stderr, "querying on timestep %d \n", timestep);
+
+        ADIOS_SELECTION* currBatch = NULL;
+
+        while (adios_query_evaluate(queryInfo->query, queryInfo->outputSelection, use_streaming ? 0 : timestep, queryInfo->batchSize, &currBatch) >= 0) {
+        	if (currBatch == NULL) {
+        		break;
+        	}
+        	assert(currBatch->type ==ADIOS_SELECTION_POINTS);
+        	const ADIOS_SELECTION_POINTS_STRUCT * retrievedPts = &(currBatch->u.points);
+        	/* fprintf(stderr,"retrieved points %" PRIu64 " \n", retrievedPts->npoints); */
+
+        	if (print_points) {
+        		printPoints(retrievedPts, timestep);
+        	}
+
+        	if (read_results) {
+        		int elmSize = adios_type_size(tempVar->type, NULL);
+        		void *data = malloc(retrievedPts->npoints * elmSize);
+
+        		// read returned temp data
+        		adios_schedule_read (f, currBatch, queryInfo->varName, use_streaming ? 0 : timestep, 1, data);
+        		adios_perform_reads(f, 1);
+
+        		free(data);
+        	}
+
+        	fprintf(stderr,"Total data retrieved:%"PRIu64"\n", retrievedPts->npoints);
+        	/* if (tempVar->type == adios_double) { */
+        	/*     for (i = 0; i < retrievedPts->npoints; i++) { */
+        	/*         fprintf(stderr,"%.6f\t", ((double*)data)[i]); */
+        	/*     } */
+        	/*     fprintf(stderr,"\n"); */
+        	/* } */
+        	/* else if (tempVar->type == adios_real) { */
+        	/*     for (i = 0; i < retrievedPts->npoints; i++) { */
+        	/*         fprintf(stderr,"%.6f\t", ((float*)data)[i]); */
+        	/*     } */
+        	/*     fprintf(stderr,"\n"); */
+        	/* } */
+
+        	adios_selection_delete(currBatch);
+        	currBatch = NULL;
+        }
+
+        if (use_streaming) {
+        	const int err = adios_advance_step(f, 0, 0);
+        	if (timestep < queryInfo->fromStep + queryInfo->numSteps - 1) {
+        		assert(err == 0);
+        	} else {
+        		assert(err == err_end_of_stream || err == err_step_notready);
+        	}
+        }
+    }
+
+    adios_query_free(queryInfo->query);
+}
+
+int main(int argc, char ** argv) {
+
+    int i, j, datasize, if_any;
+    char xmlFileName[256];
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    ADIOS_QUERY_TEST_INFO *queryInfo;
+    ADIOS_FILE *f;
+
+
+    MPI_Init(&argc, &argv);
+
+    if (argc < 4 || argc > 7) {
+        fprintf(stderr," usage: %s {input bp file} {xml file} {query engine (ALACRITY/FASTBIT)} [mode (FILE/stream)] [print points? (TRUE/false)] [read results? (true/FALSE)]\n", argv[0]);
+        MPI_Abort(comm, 1);
+    }
+    else {
+        strcpy(xmlFileName,  argv[2]);
+    }
+
+    enum ADIOS_QUERY_METHOD query_method = ADIOS_QUERY_METHOD_UNKNOWN;
+    if (strcasecmp(argv[3], "ALACRITY") == 0) {
+        // init with ALACRITY
+        //adios_query_init(ADIOS_QUERY_TOOL_ALACRITY);
+    	query_method = ADIOS_QUERY_METHOD_ALACRITY;
+    }
+    else if (strcasecmp(argv[3], "FASTBIT") == 0) {
+        // init with FastBit
+    	query_method = ADIOS_QUERY_METHOD_FASTBIT;
+    	//fprintf(stderr,"FastBit not supported in this test yet, exiting...\n");
+    	//MPI_Abort(comm, 1);
+    }
+    else {
+    	fprintf(stderr,"Unsupported query engine %s, exiting...\n", argv[3]);
+        MPI_Abort(comm, 1);
+    }
+
+    const int use_streaming = (argc >= 5) && (strcasecmp(argv[4], "stream") == 0);
+    const int read_results = (argc >= 6) && (strcasecmp(argv[5], "true") == 0);
+    const int print_points = !(argc >= 7) || (strcasecmp(argv[6], "true") == 0);
+
+    fprintf(stderr, "NOTE: Running the query in %s mode\n", use_streaming ? "STREAM" : "FILE");
+    fprintf(stderr, "NOTE: %s print query result points\n", print_points ? "WILL" : "WILL NOT");
+    fprintf(stderr, "NOTE: %s read data using query result point selection\n", read_results ? "WILL" : "WILL NOT");
+
+    // ADIOS init
+    adios_read_init_method(method, comm, NULL);
+
+    f = use_streaming ?
+    		adios_read_open(argv[1], method, comm, ADIOS_LOCKMODE_ALL, -1) :
+    		adios_read_open_file(argv[1], method, comm);
+    if (f == NULL) {
+        fprintf(stderr," can not open file %s \n", argv[1]);
+        MPI_Abort(comm, 1);
+    }
+
+    // Parse the xml file to generate query info
+    queryInfo = parseXml(xmlFileName, f);
+
+    // perform query
+    adios_query_set_method(queryInfo->query, query_method);
+    performQuery(queryInfo, f, use_streaming, print_points, read_results);
+
+
+    adios_read_close(f);
+    adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/tests/C/query/common/adios_query_xml_parse.c b/tests/C/query/common/adios_query_xml_parse.c
new file mode 100644
index 0000000..866a3c9
--- /dev/null
+++ b/tests/C/query/common/adios_query_xml_parse.c
@@ -0,0 +1,463 @@
+/*
+ * adios_query_xml_parse.c
+ *
+ *  Created on: Sep 30, 2014
+ *      Author: Houjun Tang
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <string.h>
+#include <assert.h>
+#include "adios_selection.h"
+#include "adios_query.h"
+#include <mxml.h>
+#include <sys/stat.h>
+
+#include "adios_query_xml_parse.h"
+
+#define MAXDIM    10
+#define MAXQUERY  1000
+
+#define GET_ATTR2(n,attr,var,en)                                 \
+    if (!strcasecmp (n, attr->name)) {                           \
+        if (!var)                                                \
+        {                                                        \
+            var = attr->value;                                   \
+            continue;                                            \
+        }                                                        \
+        else                                                     \
+        {                                                        \
+            printf ("xml: duplicate attribute %s on %s (ignored)",n,en); \
+            continue;                                            \
+        }                                                        \
+    }
+
+// Stack for storing queries
+typedef struct {
+    int size;
+    ADIOS_QUERY *stack[MAXQUERY];
+} QueryStack;
+
+// init query stack
+static void queryStackInit(QueryStack* queryStack)
+{
+    queryStack->size=0;
+}
+
+static void queryPush(QueryStack* queryStack, ADIOS_QUERY *q)
+{
+    if (queryStack->size>=MAXQUERY) {
+        fprintf(stderr, "Query number exceeds MAXQUERY, exiting\n");
+        abort();
+    }
+    queryStack->stack[queryStack->size++] = q;
+
+}
+
+static int queryStackSize(QueryStack* queryStack)
+{
+    return queryStack->size;
+}
+
+static ADIOS_QUERY * queryPop(QueryStack* queryStack)
+{
+    if (queryStackSize(queryStack)==0) {
+        fprintf(stderr, "Error: popping empty query stack, exiting...\n");
+        abort();
+    }
+    return queryStack->stack[--queryStack->size];
+}
+
+void trim_spaces(char * str); // in adios_internals.c
+static void tokenize_dimensions2 (const char * str, char *** tokens, int * count) {
+    if (!str) {
+        *tokens = 0;
+        *count = 0;
+
+        return;
+    }
+
+    char * save_str = strdup (str);
+    char * t = save_str;
+    int i;
+
+    trim_spaces (save_str);
+
+    if (strlen (save_str) > 0)
+        *count = 1;
+    else
+    {
+        *tokens = 0;
+        *count = 0;
+        free (save_str);
+
+        return;
+    }
+
+    while (*t)
+    {
+        if (*t == ',')
+            (*count)++;
+        t++;
+    }
+
+    *tokens = (char **) malloc (sizeof (char **) * *count);
+    (*tokens) [0] = strdup (strtok (save_str, ","));
+    for (i = 1; i < *count; i++)
+    {
+        (*tokens) [i] = strdup (strtok (NULL, ","));
+    }
+
+    free (save_str);
+}
+//end of stolen functions
+
+#define CHECK_ERROR_DATA(data, num, check) {                     \
+		 uint64_t di = 0;                                        \
+		 for(di = 0; di < (num); di++){                          \
+				if (check)                                       \
+					fprintf(stderr, "error data: %f, ", (data)[di]);      \
+		 }                                                       \
+}
+
+ADIOS_QUERY_TEST_INFO * parseXml(const char *inputxml, ADIOS_FILE* f) {
+	int i, j;
+	FILE * fp = fopen (inputxml,"r");
+	if (!fp){
+		fprintf(stderr, "missing xml input file %s \n", inputxml);
+		return NULL;
+	}
+	struct stat s;
+	char * buffer = NULL;
+	if (stat (inputxml, &s) == 0) {
+		buffer = malloc (s.st_size + 1);
+		buffer [s.st_size] = 0;
+	}
+
+	if (buffer)     {
+		size_t bytes_read = fread (buffer, 1, s.st_size, fp);
+
+		if (bytes_read != s.st_size) {
+			fprintf(stderr, "error reading input xml file: %s. Expected %ld Got %lld\n"
+					,inputxml, s.st_size, (long long int)bytes_read );
+			fclose(fp);
+			return NULL;
+		}
+	}
+	fclose (fp);
+	mxml_node_t * root = NULL;
+	root = mxmlLoadString (NULL, buffer, MXML_TEXT_CALLBACK);
+	free (buffer);
+	buffer = NULL;
+
+	if (!root) {
+		fprintf(stderr,  "unknown error parsing XML (probably structural)\n"
+				"Did you remember to start the file with\n"
+				"<?xml version=\"1.0\"?>\n");
+		return NULL;
+	}
+	if (strcasecmp(root->value.element.name, "query") != 0) {
+		root = mxmlFindElement(root, root, "query", NULL, NULL, MXML_DESCEND_FIRST);
+	}
+
+	const char *numVarS=NULL;
+	const char *fromTimestepS=NULL;
+	const char *numTimestepsS=NULL;
+	const char *batchsizeS=NULL;
+
+	int numQuery = 0;
+	int fromTimestep = 1;
+	int numTimesteps = 1;
+	uint64_t batchsize= 1;
+	for (i = 0; i < root->value.element.num_attrs; i++) {
+		mxml_attr_t * attr = &root->value.element.attrs [i];
+		GET_ATTR2("num",attr,numVarS,"query");
+		GET_ATTR2("from-timestep",attr,fromTimestepS,"query");
+		GET_ATTR2("num-timesteps",attr,numTimestepsS,"query");
+		GET_ATTR2("batchsize",attr,batchsizeS,"query");
+	}
+	if ( !numVarS || !strcmp ( numVarS, "")) {
+		fprintf(stderr, "missing values for num attribute \n");
+		mxmlRelease(root);
+		return NULL;
+	}
+	else {
+		numQuery  = atoi(numVarS);
+		fromTimestep  = atoi(fromTimestepS);
+		numTimesteps = atoi(numTimestepsS);
+		batchsize = strtoull(batchsizeS, NULL, 10);
+	}
+
+	mxml_node_t *outputNode     = NULL;
+	const char *outputTypeS=NULL, *outputDimS=NULL, *outputStartS=NULL, *outputCountS=NULL, *outputWbIndexS=NULL;
+	int outputDim;
+	int outputWbIndex;
+	int selType;
+	char** outputCountTokens=NULL;
+	char** outputStartTokens=NULL;
+	ADIOS_SELECTION *outputBox;
+
+	// Parse output selection info
+
+	outputNode = mxmlFindElement(root, root, "output", NULL, NULL, MXML_DESCEND_FIRST);
+	for (i = 0; i < outputNode->value.element.num_attrs; i++) {
+		mxml_attr_t * attr = &outputNode->value.element.attrs [i];
+		GET_ATTR2("type",attr,outputTypeS,"output");
+		if ( strcmp(outputTypeS, "ADIOS_SELECTION_BOUNDINGBOX") == 0) {
+			selType = ADIOS_SELECTION_BOUNDINGBOX;
+			GET_ATTR2("dim",attr,outputDimS,"output");
+			GET_ATTR2("start",attr,outputStartS,"output");
+			GET_ATTR2("count",attr,outputCountS,"output");
+		}
+		else if ( strcmp(outputTypeS, "ADIOS_SELECTION_WRITEBLOCK") == 0) {
+			selType = ADIOS_SELECTION_WRITEBLOCK;
+			GET_ATTR2("index",attr,outputWbIndexS,"selection");
+		}
+	}
+	if ( selType == ADIOS_SELECTION_BOUNDINGBOX ) {
+		if ( !outputTypeS || !outputDimS || !outputStartS || !outputCountS || !strcmp (outputTypeS, "")|| !strcmp (outputDimS, "") || !strcmp (outputStartS, "") || !strcmp (outputCountS, "") ) {
+			fprintf(stderr, "missing values for output attribute \n");
+			mxmlRelease(root);
+			return NULL;
+		}
+		else {
+			outputDim = atoi(outputDimS);
+			if (outputDim > MAXDIM) {
+				fprintf(stderr, "QueryDim exceeds 10, readjust MAXDIM to larger value, exiting...\n");
+				abort();
+			}
+
+			tokenize_dimensions2(outputStartS, &outputStartTokens, &outputDim);
+			tokenize_dimensions2(outputCountS, &outputCountTokens, &outputDim);
+
+			// Allocate arrays to give to the bounding box constructor
+			uint64_t *outputStart = malloc(outputDim * sizeof(uint64_t));
+			uint64_t *outputCount = malloc(outputDim * sizeof(uint64_t));
+
+			for (j = 0; j < outputDim; j ++){
+				outputStart[j] = atoi(outputStartTokens[j]);
+				outputCount[j] = atoi(outputCountTokens[j]);
+				free(outputStartTokens[j]);
+				free(outputCountTokens[j]);
+			}
+			free(outputStartTokens);
+			free(outputCountTokens);
+
+			outputBox = adios_selection_boundingbox(outputDim, outputStart, outputCount);
+
+			/* fprintf(stderr, "Selected output boundingbox: dim:%d start:", outputDim); */
+			/* for (j = 0; j < outputDim; j ++){ */
+			/* 	fprintf(stderr, " %d", outputStart[j]); */
+			/* } */
+			/* fprintf(stderr, "\t count:"); */
+			/* for (j = 0; j < outputDim; j ++){ */
+			/* 	fprintf(stderr, " %d", outputCount[j]); */
+			/* } */
+			/* fprintf(stderr, "\n"); */
+
+		}
+
+	}
+	else if( selType == ADIOS_SELECTION_WRITEBLOCK ) {
+
+		if ( !outputWbIndexS || !strcmp (outputWbIndexS, "") ) {
+			fprintf(stderr, "missing values for selection attribute \n");
+			mxmlRelease(root);
+			return NULL;
+		}
+		else {
+			outputWbIndex = atoi(outputWbIndexS);
+			outputBox = adios_selection_writeblock(outputWbIndex);
+
+			/* fprintf(stderr, "Selected output writeblock: %d\n", outputWbIndex); */
+		}
+	}
+
+
+	// Iterate all combine/entry nodes in <query>
+	mxml_node_t *entryNode      = NULL;
+	mxml_node_t *selectionNode  = NULL;
+	const char *varNameS=NULL, *opS=NULL, *constraintS=NULL;
+	const char *typeS=NULL, *dimS=NULL, *startS=NULL, *countS=NULL, *wbIndexS=NULL;
+	int entryIter;
+	int queryDim;
+	int wbIndex;
+	ADIOS_SELECTION *inputSelection;
+	ADIOS_QUERY *q, *q1, *q2, *qc;
+	char** queryCountTokens=NULL;
+	char** queryStartTokens=NULL;
+	char *queryCombineOp=NULL;
+
+	// init query stack
+	QueryStack queryStack;
+	queryStackInit(&queryStack);
+
+	for (entryIter = 0; entryIter < (numQuery*2-1); entryIter++) {
+
+		// Find entry node
+		if (entryIter == 0) {
+			entryNode = mxmlFindElement(root, root, "entry", NULL, NULL, MXML_DESCEND_FIRST);
+		}
+		else {
+			// this is the only way I found for getting the next <entry> or <combine> node
+			entryNode= mxmlWalkNext(entryNode, root, MXML_NO_DESCEND);
+			entryNode= mxmlWalkNext(entryNode, root, MXML_NO_DESCEND);
+		}
+
+		// check if current node is <combine>
+		if ( strcmp( (&(entryNode->value.element.attrs[0]))->name, "op") == 0 ) {
+			queryCombineOp = (&(entryNode->value.element.attrs[0]))->value;
+			/* fprintf(stderr, "Found combine op %s\n", queryCombineOp); */
+			// pop up two query and perform the op
+			if (queryStackSize(&queryStack)<2) {
+				fprintf(stderr, "Popping with less than 2 queries in query stack, exiting...\n");
+				abort();
+			}
+
+			q1 = queryPop(&queryStack);
+			q2 = queryPop(&queryStack);
+			if (strcmp(queryCombineOp, "AND") == 0 || strcmp(queryCombineOp, "and") == 0) {
+				qc = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+			}
+			else if (strcmp(queryCombineOp, "OR") == 0 || strcmp(queryCombineOp, "or") == 0) {
+				qc = adios_query_combine(q1, ADIOS_QUERY_OP_OR, q2);
+			}
+			queryPush(&queryStack,qc);
+
+			//adios_query_free(q1);
+			//adios_query_free(q2);
+
+			continue;
+		}
+
+
+		// Make sure all *S are NULL for verification
+		varNameS=NULL, opS=NULL, constraintS=NULL;
+		typeS=NULL, dimS=NULL, startS=NULL, countS=NULL, wbIndexS=NULL;
+
+		for (i = 0; i < entryNode->value.element.num_attrs; i++) {
+			mxml_attr_t * attr = &entryNode->value.element.attrs [i];
+			GET_ATTR2("var",attr,varNameS,"entry");
+			GET_ATTR2("op",attr,opS,"entry");
+			GET_ATTR2("constraint",attr,constraintS,"entry");
+		}
+		if ( !varNameS || !opS || !constraintS || !strcmp (varNameS, "")|| !strcmp (opS, "") || !strcmp (constraintS, "") ) {
+			fprintf(stderr, "missing values for entry attribute \n");
+			mxmlRelease(root);
+			return NULL;
+		}
+
+		// Parse selection
+		selectionNode = mxmlFindElement(entryNode, entryNode, "selection", NULL, NULL, MXML_DESCEND_FIRST);
+
+                if (selectionNode == NULL) {
+                    inputSelection = NULL;
+                }
+                else {
+                    // selection is not NULL
+
+		        for (i = 0; i < selectionNode->value.element.num_attrs; i++) {
+		        	mxml_attr_t * attr = &selectionNode->value.element.attrs [i];
+		        	GET_ATTR2("type",attr,typeS,"selection");
+		        	if ( strcmp(typeS, "ADIOS_SELECTION_BOUNDINGBOX") == 0) {
+		        		selType = ADIOS_SELECTION_BOUNDINGBOX;
+		        		GET_ATTR2("dim",attr,dimS,"selection");
+		        		GET_ATTR2("start",attr,startS,"selection");
+		        		GET_ATTR2("count",attr,countS,"selection");
+		        	}
+		        	else if ( strcmp(typeS, "ADIOS_SELECTION_WRITEBLOCK") == 0) {
+		        		selType = ADIOS_SELECTION_WRITEBLOCK;
+		        		GET_ATTR2("index",attr,wbIndexS,"selection");
+		        	}
+		        }
+        		if ( selType == ADIOS_SELECTION_BOUNDINGBOX ) {
+        
+        			if ( !typeS || !dimS || !startS || !countS || !strcmp (typeS, "")|| !strcmp (dimS, "") || !strcmp (startS, "") || !strcmp (countS, "") ) {
+        				fprintf(stderr, "missing values for selection attribute \n");
+        				mxmlRelease(root);
+        				return NULL;
+        			}
+        			else {
+        				queryDim = atoi(dimS);
+        				if (queryDim > MAXDIM) {
+        					fprintf(stderr, "QueryDim exceeds 10, readjust MAXDIM to larger value, exiting...\n");
+        					abort();
+        				}
+        
+        				tokenize_dimensions2(startS, &queryStartTokens, &queryDim);
+        				tokenize_dimensions2(countS, &queryCountTokens, &queryDim);
+        
+        				// Allocate arrays to give to the bounding box constructor
+        				uint64_t *queryStart = malloc(queryDim * sizeof(uint64_t));
+        				uint64_t *queryCount = malloc(queryDim * sizeof(uint64_t));
+        
+        				for (j = 0; j < queryDim; j ++){
+        					queryStart[j] = atoi(queryStartTokens[j]);
+        					queryCount[j] = atoi(queryCountTokens[j]);
+        					free(queryStartTokens[j]);
+        					free(queryCountTokens[j]);
+        				}
+        				free(queryStartTokens);
+        				free(queryCountTokens);
+        
+        				inputSelection = adios_selection_boundingbox(queryDim, queryStart, queryCount);
+                                }
+        
+				/* fprintf(stderr, "Selected input bounding box:  dim:%d start:", queryDim); */
+				/* for (j = 0; j < queryDim; j ++){ */
+				/* 	fprintf(stderr, " %d", queryStart[j]); */
+				/* } */
+				/* fprintf(stderr, "\t count:"); */
+				/* for (j = 0; j < queryDim; j ++){ */
+				/* 	fprintf(stderr, " %d", queryCount[j]); */
+				/* } */
+				/* fprintf(stderr, "\n"); */
+
+        		} // end of selType == ADIOS_SELECTION_BOUNDINGBOX
+		        else {
+			        // selType == ADIOS_SELECTION_WRITEBLOCK
+                                if ( !wbIndexS || !strcmp (wbIndexS, "") ) {
+			        	fprintf(stderr, "missing values for selection attribute \n");
+			        	mxmlRelease(root);
+			        	return NULL;
+			        }
+			        else {
+			        	wbIndex = atoi(wbIndexS);
+                                }
+				
+                                inputSelection = adios_selection_writeblock(wbIndex);
+                        }
+                }// end of selection is not NULL
+        
+
+		if( strcmp(opS, "<=") == 0 )
+	                q = adios_query_create(f, inputSelection, varNameS, ADIOS_LTEQ, constraintS);
+		else if( strcmp(opS, "<") == 0 )
+		        q = adios_query_create(f, inputSelection, varNameS, ADIOS_LT, constraintS);
+		else if( strcmp(opS, ">=") == 0 )
+			q = adios_query_create(f, inputSelection, varNameS, ADIOS_GTEQ, constraintS);
+		else if( strcmp(opS, ">") == 0 )
+			q = adios_query_create(f, inputSelection, varNameS, ADIOS_GT, constraintS);
+		else {
+			fprintf(stderr, "Unsupported entry op %s\n", opS);
+			return NULL;
+		}
+
+	        queryPush(&queryStack,q);
+
+		/* fprintf(stderr, "Parsed entry: var=%s op=%s constraint=%s\n", varNameS, opS, constraintS); */
+	}
+
+	ADIOS_QUERY_TEST_INFO *retval = (ADIOS_QUERY_TEST_INFO *)malloc(sizeof(ADIOS_QUERY_TEST_INFO));
+	*retval = (ADIOS_QUERY_TEST_INFO){
+		.query           = queryPop(&queryStack),
+		.outputSelection = outputBox,
+		.fromStep        = fromTimestep,
+		.numSteps        = numTimesteps,
+        .batchSize       = batchsize,
+        .varName         = varNameS,
+	};
+	return retval;
+}
diff --git a/tests/C/query/common/adios_query_xml_parse.h b/tests/C/query/common/adios_query_xml_parse.h
new file mode 100644
index 0000000..c48fec9
--- /dev/null
+++ b/tests/C/query/common/adios_query_xml_parse.h
@@ -0,0 +1,26 @@
+/*
+ * adios_query_xml_parse.h
+ *
+ *  Created on: Sep 30, 2014
+ *      Author: Houjun Tang
+ */
+#ifndef ADIOS_QUERY_XML_PARSE_H_
+#define ADIOS_QUERY_XML_PARSE_H_
+
+#include "adios_query.h"
+
+typedef struct {
+	ADIOS_QUERY *query;
+	ADIOS_SELECTION *outputSelection;
+	int fromStep;
+	int numSteps;
+	uint64_t batchSize;
+    const char *varName;
+} ADIOS_QUERY_TEST_INFO;
+
+/*
+ * Parses the given XML file to extract the ADIOS_QUERY object described therein.
+ */
+ADIOS_QUERY_TEST_INFO * parseXml(const char *inputxml, ADIOS_FILE* f);
+
+#endif /* ADIOS_QUERY_XML_PARSE_H_ */
diff --git a/tests/C/query/common/compute_expected_query_results.c b/tests/C/query/common/compute_expected_query_results.c
new file mode 100644
index 0000000..d6814b9
--- /dev/null
+++ b/tests/C/query/common/compute_expected_query_results.c
@@ -0,0 +1,615 @@
+/*
+ * compute_expected_query_results.c
+ *
+ *  Created on: Sep 30, 2014
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include <adios_read.h>
+#include <adios_read_ext.h>
+#include <adios_query.h>
+#include <adios_error.h>
+#include <core/adios_logger.h>
+#include "adios_query_xml_parse.h"
+
+#define max(a,b) ((a)>(b)?(a):(b))
+
+// Returned ADIOS selection must be freed after use, and will only be valid as long as the supplied varinfo struct is valid
+static ADIOS_SELECTION * convertWBToBB(ADIOS_SELECTION *sel, int timestep, ADIOS_FILE *fp, ADIOS_VARINFO *varinfo) {
+	assert(sel->type == ADIOS_SELECTION_WRITEBLOCK);
+
+	const int wbindex = sel->u.block.index;
+	const int abs_wbindex = adios_get_absolute_writeblock_index(varinfo, wbindex, timestep);
+
+	if (!varinfo->blockinfo) {
+		const data_view_t old_view = adios_read_set_data_view(fp, LOGICAL_DATA_VIEW);
+		adios_read_bp_inq_var_blockinfo(fp, varinfo);
+		adios_read_set_data_view(fp, old_view);
+	}
+	ADIOS_VARBLOCK *vb = &varinfo->blockinfo[abs_wbindex];
+
+	return adios_selection_boundingbox(varinfo->ndim, vb->start, vb->count);
+}
+
+static uint64_t computeSelectionSizeInElements(ADIOS_SELECTION *sel) {
+	switch (sel->type) {
+	case ADIOS_SELECTION_BOUNDINGBOX: {
+		int i;
+		ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &sel->u.bb;
+		uint64_t size = 1;
+		for (i = 0; i < bb->ndim; ++i)
+			size *= bb->count[i];
+		return size;
+	}
+	default:
+		fprintf(stderr, "Unsupported selection type %d at %s:%s", sel->type, __FILE__, __LINE__);
+		exit(1);
+		return 0;
+	}
+}
+
+enum REDUCED_DATATYPE { RD_UNKNOWN = -1, RD_SIGNED_INT, RD_UNSIGNED_INT, RD_DOUBLE, RD_LONG_DOUBLE, RD_STRING, RD_DOUBLE_COMPLEX };
+static enum REDUCED_DATATYPE getReducedDatatype(enum ADIOS_DATATYPES datatype) {
+	switch (datatype) {
+	case adios_byte:
+	case adios_short:
+	case adios_integer:
+	case adios_long:
+		return RD_SIGNED_INT;
+	case adios_unsigned_byte:
+	case adios_unsigned_short:
+	case adios_unsigned_integer:
+	case adios_unsigned_long:
+		return RD_UNSIGNED_INT;
+	case adios_real:
+	case adios_double:
+		return RD_DOUBLE;
+	case adios_long_double:
+		return RD_LONG_DOUBLE;
+	case adios_string:
+		return RD_STRING;
+	case adios_complex:
+	case adios_double_complex:
+		return RD_DOUBLE_COMPLEX;
+	}
+	return RD_UNKNOWN;
+}
+
+#define ALLOCATE_REDUCED_DATATYPE(type) (type*)malloc(sizeof(type))
+static void * allocateReducedDatatype(enum REDUCED_DATATYPE reduced_datatype, int maxstrlen) {
+	switch (reduced_datatype) {
+	case RD_SIGNED_INT:		return ALLOCATE_REDUCED_DATATYPE(int64_t);
+	case RD_UNSIGNED_INT:	return ALLOCATE_REDUCED_DATATYPE(uint64_t);
+	case RD_DOUBLE:			return ALLOCATE_REDUCED_DATATYPE(double);
+	case RD_LONG_DOUBLE:	return ALLOCATE_REDUCED_DATATYPE(long double);
+	case RD_STRING:			return (char*)malloc(maxstrlen + 1);
+	case RD_DOUBLE_COMPLEX:
+		fprintf(stderr, "Cannot handle complex or double complex datatypes (at %s:%s)\n", __FILE__, __LINE__);
+		exit(1);
+		return NULL;
+	}
+}
+
+#define RETURN_REDUCED_DATATYPE(type, val) { type *rd = (type *)malloc(sizeof(type)); *rd = (val); return rd; }
+static void * parseStringAsReducedDatatype(const char *str, enum REDUCED_DATATYPE reduced_datatype) {
+	switch (reduced_datatype) {
+	case RD_SIGNED_INT:		RETURN_REDUCED_DATATYPE(int64_t, strtoll(str, NULL, 0)); break;
+	case RD_UNSIGNED_INT:	RETURN_REDUCED_DATATYPE(uint64_t, strtoull(str, NULL, 0)); break;
+	case RD_DOUBLE:			RETURN_REDUCED_DATATYPE(double, strtod(str, NULL)); break;
+	case RD_LONG_DOUBLE:	RETURN_REDUCED_DATATYPE(long double, strtold(str, NULL)); break;
+	case RD_STRING:			return strdup(str);
+	case RD_DOUBLE_COMPLEX:
+		fprintf(stderr, "Cannot handle complex or double complex datatypes (at %s:%s)\n", __FILE__, __LINE__);
+		exit(1);
+		return NULL;
+	}
+}
+
+static void castToReducedDatatype(const void *value, enum ADIOS_DATATYPES datatype, void *outValue) {
+	switch (datatype) {
+	case adios_byte:				*(int64_t*)outValue = *(const int8_t*)value; break;
+	case adios_short:				*(int64_t*)outValue = *(const int16_t*)value; break;
+	case adios_integer:				*(int64_t*)outValue = *(const int32_t*)value; break;
+	case adios_long:				*(int64_t*)outValue = *(const int64_t*)value; break;
+	case adios_unsigned_byte:		*(uint64_t*)outValue = *(const uint8_t*)value; break;
+	case adios_unsigned_short:		*(uint64_t*)outValue = *(const uint16_t*)value; break;
+	case adios_unsigned_integer:	*(uint64_t*)outValue = *(const uint32_t*)value; break;
+	case adios_unsigned_long:		*(uint64_t*)outValue = *(const uint64_t*)value; break;
+	case adios_real:				*(double*)outValue = *(const float*)value; break;
+	case adios_double:				*(double*)outValue = *(const double*)value; break;
+	case adios_long_double:			*(long double*)outValue = *(const long double*)value; break;
+	case adios_string:				strcpy((char*)outValue, (const char*)value); break;
+	case adios_complex:
+	case adios_double_complex:
+	default:
+		fprintf(stderr, "Unsupported or invalid reduced datatype %d at %s:%s\n", datatype, __FILE__, __LINE__);
+		exit(1);
+	}
+}
+
+#define RETURN_COMPARE_PTRS_CAST_TO_TYPE(ptr1, ptr2, type) { const type __v1 = *(const type*)(ptr1), __v2 = *(const type*)(ptr2); return __v1 < __v2 ? -1 : __v1 > __v2 ? 1 : 0; }
+static int compareReducedDatatypeValues(const void *v1, const void *v2, enum REDUCED_DATATYPE datatype) {
+	switch (datatype) {
+	case RD_SIGNED_INT:		RETURN_COMPARE_PTRS_CAST_TO_TYPE(v1, v2, int64_t); break;
+	case RD_UNSIGNED_INT:	RETURN_COMPARE_PTRS_CAST_TO_TYPE(v1, v2, int64_t); break;
+	case RD_DOUBLE:			RETURN_COMPARE_PTRS_CAST_TO_TYPE(v1, v2, double); break;
+	case RD_LONG_DOUBLE:	RETURN_COMPARE_PTRS_CAST_TO_TYPE(v1, v2, long double); break;
+	case RD_STRING:			return strcmp((const char*)v1, (const char*)v2);
+	case RD_DOUBLE_COMPLEX:
+	default:
+		fprintf(stderr, "Unsupported or invalid reduced datatype %d at %s:%s\n", datatype, __FILE__, __LINE__);
+		exit(1);
+		return 0;
+	}
+}
+
+// NOTE: both bound and value must be (the same) reduced datatype
+static int compareConstraintBoundValue(const void *bound, const void *value, enum REDUCED_DATATYPE reducedDatatype, enum ADIOS_PREDICATE_MODE comparison) {
+	int compare = compareReducedDatatypeValues(value, bound, reducedDatatype);
+
+	switch (comparison) {
+	case ADIOS_LT: return compare < 0;
+	case ADIOS_LTEQ: return compare <= 0;
+	case ADIOS_GT: return compare > 0;
+	case ADIOS_GTEQ: return compare >= 0;
+	case ADIOS_EQ: return compare == 0;
+	case ADIOS_NE: return compare != 0;
+	}
+}
+
+// Returns which points in the given buffer of data (buffer) for the given selection
+// (insel) match the constraint in the given query (query), returning a list of points
+// that are relative to (insel)
+static ADIOS_SELECTION * scanBufferForMatchingPoints(const char *buffer, enum ADIOS_DATATYPES datatype, ADIOS_SELECTION *insel, ADIOS_QUERY *query) {
+	assert(insel->type == ADIOS_SELECTION_BOUNDINGBOX); // For now, only support bounding boxes (and writeblocks, since they are converted to bounding boxes earlier)
+
+	const int ndim = query->varinfo->ndim;
+	const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &insel->u.bb;
+
+	const int datatypeSize = adios_type_size(datatype, NULL);
+	const enum REDUCED_DATATYPE reducedDatatype = getReducedDatatype(datatype);
+	const enum ADIOS_PREDICATE_MODE comparison = query->predicateOp;
+
+	const void *boundValue = parseStringAsReducedDatatype(query->predicateValue, reducedDatatype);
+	void *pointValue = allocateReducedDatatype(reducedDatatype, 0);
+
+	uint64_t elemsRemaining = computeSelectionSizeInElements(insel);
+
+	uint64_t npoints = 0;
+	uint64_t pointsCapacity = 1;
+	uint64_t *points = (uint64_t *)calloc(pointsCapacity, ndim * sizeof(uint64_t)); // First coordinate is at 0,0,0,...,0, since the results should be relative to the selection box
+	assert(points);
+	uint64_t *nextPoint = points;
+
+	int i;
+	while (elemsRemaining-- > 0) {
+		// Cast the point's value to a reduced datatype
+		castToReducedDatatype(buffer, datatype, pointValue);
+
+		// Compare the point value to the bound value
+		if (compareConstraintBoundValue(boundValue, pointValue, reducedDatatype, comparison)) {
+			// Commit the current point as a real point
+			++npoints;
+
+			// Expand the point array if need be
+			if (npoints == pointsCapacity) {
+				const uint64_t next_point_offset = nextPoint - points;
+				pointsCapacity *= 2;
+				points = (uint64_t*)realloc(points, pointsCapacity * ndim * sizeof(uint64_t));
+				assert(points);
+				nextPoint = points + next_point_offset;
+			}
+
+			// Move to the next point
+			const uint64_t *curPoint = nextPoint;
+			nextPoint += ndim;
+
+			// Copy the current point's coordinates to the next point's coordinates,
+			// so they will continue to be incremented from here
+			memcpy(nextPoint, curPoint, ndim * sizeof(uint64_t));
+		}
+
+		// Increment the next point's coordinates
+		for (i = ndim - 1; i >= 0; --i) {
+			++nextPoint[i];
+			if (nextPoint[i] == bb->count[i]) {
+				nextPoint[i] = 0;
+			} else {
+				break;
+			}
+		}
+
+		// Advance in the input buffer
+		buffer += datatypeSize;
+	}
+
+	free((void*)boundValue);
+	free(pointValue);
+	return adios_selection_points(ndim, npoints, points);
+}
+
+static int pointLexCompareNumDims;
+static void setPointLexCompareNumDims(int ndim) {
+	pointLexCompareNumDims = ndim;
+}
+static int pointLexCompare(const void *left, const void *right) {
+	const int ndim = pointLexCompareNumDims;
+	const uint64_t *leftpt = (const uint64_t *)left;
+	const uint64_t *rightpt = (const uint64_t *)right;
+	int i;
+	for (i = 0; i < ndim; ++i) {
+		if (*leftpt < *rightpt)
+			return -1;
+		else if (*leftpt > *rightpt)
+			return 1;
+		++leftpt;
+		++rightpt;
+	}	return 0;
+
+}
+
+static void sortPointsLexOrder(ADIOS_SELECTION *pointsel) {
+	assert(pointsel->type == ADIOS_SELECTION_POINTS);
+	setPointLexCompareNumDims(pointsel->u.points.npoints); // Sets the ndim for pointLexCompare via global variable, since we can't pass any parameters
+	qsort(pointsel->u.points.points, pointsel->u.points.npoints, pointsel->u.points.ndim * sizeof(uint64_t), pointLexCompare);
+}
+
+// Returns a point selection with points in lexicographical order
+static ADIOS_SELECTION * evaluateConstraint(ADIOS_QUERY *query, int timestep) {
+	enum { MAX_DIMS = 32 };
+	static const uint64_t ZERO[MAX_DIMS] = { 0 }; // Initializes all elements to 0 as per C standard
+
+	assert(!query->left && !query->right);
+	assert(query->file && query->varName);
+
+	if (!query->varinfo) {
+		query->varinfo = adios_inq_var(query->file, query->varName);
+		adios_inq_var_blockinfo(query->file, query->varinfo);
+	}
+	if (!query->sel) {
+		query->sel = adios_selection_boundingbox(query->varinfo->ndim, ZERO, query->varinfo->dims);
+		query->deleteSelectionWhenFreed = 1;
+	}
+
+	assert(query->varinfo && query->file && query->sel);
+
+	ADIOS_SELECTION *insel = query->sel;
+	ADIOS_SELECTION *globalInsel;
+
+	if (insel->type == ADIOS_SELECTION_WRITEBLOCK) {
+		globalInsel = convertWBToBB(insel, timestep, query->file, query->varinfo);
+	} else {
+		globalInsel = insel;
+	}
+
+	const uint64_t buffersize = computeSelectionSizeInElements(globalInsel) * adios_type_size(query->varinfo->type, NULL);
+	char *buffer = (char *)malloc(buffersize);
+	assert(buffer);
+
+	adios_schedule_read_byid(query->file, insel, query->varinfo->varid, timestep, 1, buffer);
+	adios_perform_reads(query->file, 1);
+
+	ADIOS_SELECTION *results = scanBufferForMatchingPoints(buffer, query->varinfo->type, globalInsel, query);
+	sortPointsLexOrder(results); // Sort the matching points in lexicographical order
+
+	if (globalInsel != insel)
+		adios_selection_delete(globalInsel);
+
+	return results;
+}
+
+// Takes two point selections with points in lexicographical order, and
+// returns a combined point selection with points in lexicographical order
+static ADIOS_SELECTION * computePointListCombination(enum ADIOS_CLAUSE_OP_MODE op, ADIOS_SELECTION *leftsel, ADIOS_SELECTION *rightsel) {
+	assert(leftsel->u.points.ndim == rightsel->u.points.ndim);
+	const int ndim = leftsel->u.points.ndim;
+
+	// Allocate an array for the combined points
+	const uint64_t maxNewPoints =
+			(op == ADIOS_QUERY_OP_AND) ?
+				max(leftsel->u.points.npoints, rightsel->u.points.npoints) :
+				leftsel->u.points.npoints + rightsel->u.points.npoints;
+	uint64_t *newPoints = (uint64_t *)malloc(maxNewPoints * ndim * sizeof(uint64_t));
+	assert(newPoints);
+
+	// Set up iterator pointers
+	const uint64_t *leftHeadPoint = leftsel->u.points.points;
+	const uint64_t *rightHeadPoint = rightsel->u.points.points;
+	const uint64_t *leftPointsEnd = leftHeadPoint + ndim * leftsel->u.points.npoints;
+	const uint64_t *rightPointsEnd = rightHeadPoint + ndim * rightsel->u.points.npoints;
+
+	uint64_t newNPoints = 0;
+	uint64_t *curPoint = newPoints;
+
+	// Perform a list conjunction/disjunction on the point lists
+	setPointLexCompareNumDims(ndim);
+	while (leftHeadPoint != leftPointsEnd && rightHeadPoint != rightPointsEnd) {
+		// Compare the head points of both point lists
+		const int compare = pointLexCompare(leftHeadPoint, rightHeadPoint);
+
+		// If we are taking the OR of the lists, or we are taking the AND and
+		// the head points are equal, copy the lesser of the head points to the output
+		// (copying the lesser point works for both AND and OR cases)
+		if (op == ADIOS_QUERY_OP_OR || (op == ADIOS_QUERY_OP_AND && compare == 0)) {
+			memcpy(curPoint, (compare < 0) ? leftHeadPoint : rightHeadPoint, ndim * sizeof(uint64_t));
+			++newNPoints;
+			curPoint += ndim;
+		}
+
+		// Increment the point list with the lesser head point
+		// (or both lists if the points are equal)
+		if (compare <= 0)
+			leftHeadPoint += ndim;
+		if (compare >= 0)
+			rightHeadPoint += ndim;
+	}
+
+	// If we are in OR mode, copy any remaining points in the unexhausted
+	// list (if one of the two point lists is so)
+	if (op == ADIOS_QUERY_OP_OR) {
+		if (leftHeadPoint != leftPointsEnd) {
+			const uint64_t coordsRemaining = (leftPointsEnd - leftHeadPoint);
+			memcpy(curPoint, leftHeadPoint, coordsRemaining * sizeof(uint64_t));
+			newNPoints += coordsRemaining / ndim;
+		} else if (rightHeadPoint != rightPointsEnd) {
+			const uint64_t coordsRemaining = (rightPointsEnd - rightHeadPoint);
+			memcpy(curPoint, rightHeadPoint, coordsRemaining * sizeof(uint64_t));
+			newNPoints += coordsRemaining / ndim;
+		}
+	}
+
+	// Free the left and right point lists, since they are no longer needed
+	free(leftsel->u.points.points);
+	free(rightsel->u.points.points);
+	adios_selection_delete(leftsel);
+	adios_selection_delete(rightsel);
+
+	// Return the combined point list
+	return adios_selection_points(ndim, newNPoints, newPoints);
+}
+
+static ADIOS_SELECTION * evaluateQueryTree(ADIOS_QUERY *query, int timestep) {
+	if (!query->left && !query->right) {
+		return evaluateConstraint(query, timestep);
+	} else if (query->left && query->right) {
+		const enum ADIOS_CLAUSE_OP_MODE op = query->combineOp;
+		ADIOS_SELECTION *leftsel = evaluateQueryTree(query->left, timestep);
+		ADIOS_SELECTION *rightsel = evaluateQueryTree(query->right, timestep);
+
+		ADIOS_SELECTION *combinedsel = computePointListCombination(op, leftsel, rightsel);
+		return combinedsel;
+	} else if (query->left) {
+		return evaluateQueryTree(query->left, timestep);
+	} else if (query->right) {
+		return evaluateQueryTree(query->right, timestep);
+	}
+}
+
+static ADIOS_SELECTION * derelativizePoints(ADIOS_SELECTION *inputPointsSel, ADIOS_SELECTION *outputSelection) {
+	ADIOS_SELECTION_POINTS_STRUCT *inputPoints = &inputPointsSel->u.points;
+	const int ndim = inputPoints->ndim;
+
+	assert(outputSelection->type == ADIOS_SELECTION_BOUNDINGBOX);
+	const uint64_t *outputOffset = outputSelection->u.bb.start;
+
+	uint64_t i, j;
+	uint64_t *curPoint = inputPoints->points;
+	for (i = 0; i < inputPoints->npoints; ++i)
+		for (j = 0; j < ndim; ++j)
+			*curPoint++ += outputOffset[j];
+
+	return inputPointsSel;
+}
+
+static ADIOS_VARBLOCK * computePGBounds(ADIOS_QUERY *q, ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb, int timestep, int *out_ndim)
+{
+	if (!q->left && !q->right) {
+		// In this case, we have reached a leaf query node, so directly
+		// retrieve the varblock from the varinfo
+		assert(q->varinfo);
+
+		// Read the blockinfo if not already present
+		if (!q->varinfo->blockinfo) {
+			adios_read_set_data_view(q->file, LOGICAL_DATA_VIEW);
+			common_read_inq_var_blockinfo(q->file, q->varinfo);
+		}
+
+		// Note: adios_get_absolute_writeblock_index ensures that timestep and wbindex
+		// are both in bounds, signalling an adios_error if not. However, there will be
+		// no variable name cited in the error, so perhaps better error handling would
+		// be desirable in the future
+		//const int abs_wbindex = adios_get_absolute_writeblock_index(q->varinfo, wbindex, timestep);
+
+		int abs_wbindex;
+		if (wb->is_absolute_index) {
+			abs_wbindex = wb->index;
+		} else {
+			if (q->file->is_streaming) {
+				// In streaming mode, absolute == relative, so just use the index directly
+				abs_wbindex = wb->index;
+			} else {
+				abs_wbindex = adios_get_absolute_writeblock_index(q->varinfo, wb->index, timestep);
+			}
+		}
+
+		// Finally, return ndim and the varblock
+		*out_ndim = q->varinfo->ndim;
+		return &q->varinfo->blockinfo[abs_wbindex];
+	} else if (!q->left || !q->right) {
+		// In this case, we have only one subtree, so just return the
+		// ndim and varblock from that subtree directly, since there's
+		// nothing to compare against
+
+		ADIOS_QUERY *present_subtree = q->left ? (ADIOS_QUERY*)q->left : (ADIOS_QUERY*)q->right;
+		return computePGBounds(present_subtree, wb, timestep, out_ndim);
+	} else {
+		// In this final case, we have two subtrees, and we must compare
+		// the resultant varblock from each one to ensure they are equal
+		// before returning
+
+		ADIOS_QUERY *left = (ADIOS_QUERY *)q->left;
+		ADIOS_QUERY *right = (ADIOS_QUERY *)q->right;
+
+		// Next, retrieve the ndim and varblock for each subtree
+		int left_ndim, right_ndim;
+		ADIOS_VARBLOCK *left_vb = computePGBounds(left, wb, timestep, &left_ndim);
+		ADIOS_VARBLOCK *right_vb = computePGBounds(right, wb, timestep, &right_ndim);
+
+		// If either subtree returns an invalid (NULL) varblock, fail immediately
+		if (!left_vb || !right_vb) {
+			return NULL;
+		}
+
+		// Check that the ndims are equal, failing if not
+		int ndim;
+		if (left_ndim != right_ndim) {
+			return NULL;
+		} else {
+			ndim = left_ndim;
+		}
+
+		// Check the start/count coordinate in each dimension for equality,
+		// failing if any coordinate is not equal between the subtrees
+		int i;
+		for (i = 0; i < ndim; i++) {
+			if (left_vb->start[i] != right_vb->start[i] ||
+					left_vb->count[i] != right_vb->count[i]) {
+				return NULL;
+			}
+		}
+
+		// Finally, we have ensured that both subtrees yield valid and equal
+		// varblocks, so return the common ndim and varblock (arbitrarily use
+		// left_vb, since right and left equal)
+		*out_ndim = ndim;
+		return left_vb;
+	}
+}
+
+static ADIOS_SELECTION * convertOutputWBToBB(ADIOS_QUERY *query, ADIOS_SELECTION_WRITEBLOCK_STRUCT *outputWB, int timestep) {
+	int ndim;
+	const ADIOS_VARBLOCK *outputWBBounds = computePGBounds(query, outputWB, timestep, &ndim);
+
+	if (outputWBBounds) {
+		return adios_selection_boundingbox(ndim, outputWBBounds->start, outputWBBounds->count);
+	} else {
+		return NULL;
+	}
+}
+
+static ADIOS_SELECTION * computeExpectedQueryResults(ADIOS_QUERY *query, ADIOS_SELECTION *outputSelection, int timestep) {
+	ADIOS_SELECTION *resultPointsSel = evaluateQueryTree(query, timestep);
+
+	ADIOS_SELECTION *globalOutputSelection;
+	if (outputSelection->type == ADIOS_SELECTION_WRITEBLOCK) {
+		globalOutputSelection = convertOutputWBToBB(query, &outputSelection->u.block, timestep);
+	} else {
+		globalOutputSelection = outputSelection;
+	}
+
+	derelativizePoints(resultPointsSel, globalOutputSelection);
+
+	if (globalOutputSelection != outputSelection)
+		adios_selection_delete(globalOutputSelection);
+
+	return resultPointsSel;
+}
+
+static void printPointSelection(int timestep, ADIOS_SELECTION *sel) {
+	assert(sel->type == ADIOS_SELECTION_POINTS);
+
+	const ADIOS_SELECTION_POINTS_STRUCT *pstruct = &sel->u.points;
+	const int ndim = pstruct->ndim;
+	const uint64_t npoints = pstruct->npoints;
+	const uint64_t *points = pstruct->points;
+
+	uint64_t i;
+	int j;
+	for (i = 0; i < npoints; ++i) {
+		printf("%d", timestep);
+		for (j = 0; j < ndim; ++j) {
+			printf(" %llu", *points++);
+		}
+		printf("\n");
+	}
+}
+
+static void usage(const char *cmd) {
+	fprintf(stderr, "Usage: %s <input BP file> <query XML file> [stream]", cmd);
+}
+
+#define SHIFT_N(n) { argc -= (n); argv += (n); }
+#define SHIFT SHIFT_N(1)
+int main(int argc, char **argv) {
+	const char *cmd = *argv; SHIFT;
+	if (argc < 2 || argc > 3) {
+		usage(cmd);
+		exit(1);
+	}
+
+	const char *bp_filename = *argv; SHIFT;
+	const char *inputxml_filename = *argv; SHIFT;
+	const int use_streaming = argc && (strcasecmp(*argv, "stream") == 0);
+
+	const MPI_Comm comm = MPI_COMM_WORLD;
+
+	MPI_Init(&argc, &argv);
+	adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "");
+
+	ADIOS_FILE *bp_file =
+			use_streaming ?
+					adios_read_open(bp_filename, ADIOS_READ_METHOD_BP, comm, ADIOS_LOCKMODE_ALL, -1) :
+					adios_read_open_file(bp_filename, ADIOS_READ_METHOD_BP, comm);
+
+	if (bp_file == NULL) {
+		log_error("Error: could not read input dataset %s\n", bp_filename);
+		exit(1);
+	}
+
+	ADIOS_QUERY_TEST_INFO *testinfo = parseXml(inputxml_filename, bp_file);
+	if (testinfo == NULL) {
+		log_error("Error: could not read query XML file %s\n", inputxml_filename);
+		exit(1);
+	}
+
+	fprintf(stderr, "NOTE: Running the query in %s mode\n", use_streaming ? "STREAM" : "FILE");
+
+	// If we are in streaming mode, skip to the desired timestep
+	int timestep;
+	if (use_streaming)
+		for (timestep = 0; timestep < testinfo->fromStep; ++timestep)
+			assert(adios_advance_step(bp_file, 0, 0) == 0);
+
+	for (timestep = testinfo->fromStep; timestep < testinfo->fromStep + testinfo->numSteps; ++timestep) {
+		ADIOS_SELECTION *result = computeExpectedQueryResults(testinfo->query, testinfo->outputSelection, use_streaming ? 0 : timestep);
+		printPointSelection(timestep, result);
+
+		free(result->u.points.points);
+		adios_selection_delete(result);
+
+		// If we are in streaming mode, advance to the next step
+		if (use_streaming) {
+			const int err = adios_advance_step(bp_file, 0, 0);
+			if (timestep < testinfo->fromStep + testinfo->numSteps - 1) {
+				assert(err == 0);
+			} else {
+				assert(err == err_end_of_stream || err == err_step_notready);
+			}
+		}
+	}
+
+	adios_selection_delete(testinfo->outputSelection); // TODO: leaks start[] and count[] if it's a BB
+	adios_query_free(testinfo->query);
+	free(testinfo);
+	adios_read_close(bp_file);
+
+	adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+	MPI_Finalize();
+}
+
diff --git a/tests/C/query/fastbit/CMakeLists.txt b/tests/C/query/fastbit/CMakeLists.txt
new file mode 100644
index 0000000..ef31d9b
--- /dev/null
+++ b/tests/C/query/fastbit/CMakeLists.txt
@@ -0,0 +1,14 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}../common)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+include_directories(${MXML_INCLUDE_DIR})
+
+add_executable(fastbit_tests fastbit_tests.c)
+target_link_libraries(fastbit_tests adiosread_nompi adios_nompi ${ADIOSREADLIB_LDADD} ${MXML_LIBS})
+set_target_properties(fastbit_tests PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}_NOMPI")
+
+file(COPY query.xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/C/query/fastbit)
diff --git a/tests/C/query/fastbit/Makefile.am b/tests/C/query/fastbit/Makefile.am
new file mode 100644
index 0000000..31d70fa
--- /dev/null
+++ b/tests/C/query/fastbit/Makefile.am
@@ -0,0 +1,24 @@
+INCLUDES = $(all_includes)
+#
+# ${ADIOSREADLIB_CPPFLAGS} has all the flags like -DFASTBIT -DALACRITY
+# as well as related includes, so it is needed here
+# 
+INCLUDES += -I$(top_srcdir)/src/ -I$(top_srcdir)/src/public/ $(MXML_CPPFLAGS)
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS = 
+
+# Only compile these test programs if we have FastBit, since they rely on FastBit
+if HAVE_FASTBIT
+CC=$(MPICC)
+
+noinst_PROGRAMS += fastbit_tests
+
+fastbit_tests_SOURCES = fastbit_tests.c
+fastbit_tests_CPPFLAGS = ${MACRODEFFLAG}_NOMPI 
+fastbit_tests_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(top_builddir)/src/libadios_nompi.a $(ADIOSREADLIB_LDADD) ${MXML_LIBS}
+fastbit_tests_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) ${MXML_LDFLAGS}
+
+endif # HAVE_FASTBIT
+CC=$(MPICC)
\ No newline at end of file
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/tests/C/query/fastbit/Makefile.in
similarity index 85%
copy from tests/C/flexpath_tests/maya_append/Makefile.in
copy to tests/C/query/fastbit/Makefile.in
index f614d4c..0a8a243 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/tests/C/query/fastbit/Makefile.in
@@ -34,8 +34,9 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = writer_maya$(EXEEXT) reader_maya$(EXEEXT)
-subdir = tests/C/flexpath_tests/maya_append
+noinst_PROGRAMS = $(am__EXEEXT_1)
+ at HAVE_FASTBIT_TRUE@am__append_1 = fastbit_tests
+subdir = tests/C/query/fastbit
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,33 +67,36 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+ at HAVE_FASTBIT_TRUE@am__EXEEXT_1 = fastbit_tests$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
-am_reader_maya_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
-reader_maya_OBJECTS = $(am_reader_maya_OBJECTS)
+am__fastbit_tests_SOURCES_DIST = fastbit_tests.c
+ at HAVE_FASTBIT_TRUE@am_fastbit_tests_OBJECTS =  \
+ at HAVE_FASTBIT_TRUE@	fastbit_tests-fastbit_tests.$(OBJEXT)
+fastbit_tests_OBJECTS = $(am_fastbit_tests_OBJECTS)
 am__DEPENDENCIES_1 =
-reader_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-reader_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ at HAVE_FASTBIT_TRUE@fastbit_tests_DEPENDENCIES =  \
+ at HAVE_FASTBIT_TRUE@	$(top_builddir)/src/libadiosread_nompi.a \
+ at HAVE_FASTBIT_TRUE@	$(top_builddir)/src/libadios_nompi.a \
+ at HAVE_FASTBIT_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+fastbit_tests_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(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)
-writer_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(writer_maya_LDFLAGS) $(LDFLAGS) -o $@
+	$(fastbit_tests_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -104,8 +109,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
-DIST_SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
+SOURCES = $(fastbit_tests_SOURCES)
+DIST_SOURCES = $(am__fastbit_tests_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -131,6 +136,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -146,6 +153,9 @@ AWK = @AWK@
 BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
 BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
 BZIP2_LIBS = @BZIP2_LIBS@
+
+# Only compile these test programs if we have FastBit, since they rely on FastBit
+ at HAVE_FASTBIT_TRUE@CC = $(MPICC)
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +198,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +300,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,17 +372,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/public -I$(srcdir)/../include
+#
+# ${ADIOSREADLIB_CPPFLAGS} has all the flags like -DFASTBIT -DALACRITY
+# as well as related includes, so it is needed here
+# 
+INCLUDES = $(all_includes) -I$(top_srcdir)/src/ \
+	-I$(top_srcdir)/src/public/ $(MXML_CPPFLAGS)
 AUTOMAKE_OPTIONS = no-dependencies
-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 = cfg.h readme.txt
+ at HAVE_FASTBIT_TRUE@fastbit_tests_SOURCES = fastbit_tests.c
+ at HAVE_FASTBIT_TRUE@fastbit_tests_CPPFLAGS = ${MACRODEFFLAG}_NOMPI 
+ at HAVE_FASTBIT_TRUE@fastbit_tests_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(top_builddir)/src/libadios_nompi.a $(ADIOSREADLIB_LDADD) ${MXML_LIBS}
+ at HAVE_FASTBIT_TRUE@fastbit_tests_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) ${MXML_LDFLAGS}
 all: all-am
 
 .SUFFIXES:
@@ -381,9 +396,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/query/fastbit/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile
+	  $(AUTOMAKE) --gnu tests/C/query/fastbit/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -411,12 +426,9 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-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)
+fastbit_tests$(EXEEXT): $(fastbit_tests_OBJECTS) $(fastbit_tests_DEPENDENCIES) 
+	@rm -f fastbit_tests$(EXEEXT)
+	$(fastbit_tests_LINK) $(fastbit_tests_OBJECTS) $(fastbit_tests_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -433,11 +445,11 @@ 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
+fastbit_tests-fastbit_tests.o: fastbit_tests.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastbit_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastbit_tests-fastbit_tests.o `test -f 'fastbit_tests.c' || echo '$(srcdir)/'`fastbit_tests.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`
+fastbit_tests-fastbit_tests.obj: fastbit_tests.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fastbit_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fastbit_tests-fastbit_tests.obj `if test -f 'fastbit_tests.c'; then $(CYGPATH_W) 'fastbit_tests.c'; else $(CYGPATH_W) '$(srcdir)/fastbit_tests.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -548,7 +560,6 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
diff --git a/tests/C/query/fastbit/fastbit_tests.c b/tests/C/query/fastbit/fastbit_tests.c
new file mode 100644
index 0000000..462c072
--- /dev/null
+++ b/tests/C/query/fastbit/fastbit_tests.c
@@ -0,0 +1,1019 @@
+#include <string.h>
+#include <inttypes.h>
+
+#include <mxml.h>
+#include <adios_read.h>
+#include <adios_query.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+/*
+static int mybmreader(void *ctx, uint64_t start,uint64_t count, uint32_t *buf) {
+  const uint32_t *bms = (uint32_t*)ctx + start;
+  unsigned j;
+  for (j = 0; j < count; ++ j) {
+    buf[j] = bms[j];
+  }
+  return 0;
+} // mybmreader  
+*/
+
+char _gTagQuery[20] = "query";
+char _gTagSel[20] = "selection";
+char _gTagEntry[20] = "entry";
+char _gTagOutput[20] = "output";
+
+char _gAttrAction[20] = "action";
+char _gAttrBPFile[20] = "bpFile";
+char _gAttrBatchSize[20] = "batchSize";
+char _gAttrQueryName[20] = "name";
+char _gAttrVarName[20] = "varName";
+char _gAttrVarValue[20] = "value";
+char _gAttrOperand[20] = "op";
+char _gAttrSelType[20] = "type";
+char _gAttrSelDim[20] = "dim";
+char _gAttrSelID[20] = "id";
+char _gAttrSelStart[20] = "start";
+char _gAttrSelCount[20] = "count";
+char _gAttrNode[20] = "node";
+
+
+long _stageRefreshMillis = 0;
+long _lastMeasuredMillis = 0;
+long _queryStartMillis = 0;
+
+void logReport(int stage) {
+  long ms = fastbit_adios_getCurrentTimeMillis();
+
+  if (stage == -1) { // init                                                                                                                                             
+      _lastMeasuredMillis = ms;
+      _stageRefreshMillis = ms;
+      _queryStartMillis   = ms;
+  } else if (stage == 0) { // query                                                                                                               
+      printf("\n==> Total time spent to process this query: %ld millis.\n", ms - _queryStartMillis);
+  }
+}
+
+
+void logTimeMillis(const char* notes)
+{
+  long ms = fastbit_adios_getCurrentTimeMillis();
+
+  if (notes == NULL) {
+    printf("\n");
+    _stageRefreshMillis = ms;
+  } else {
+    long d = ms - _lastMeasuredMillis;
+    printf("   ELAPSED millis: %ld \t%s\n", d, notes);
+  }
+  _lastMeasuredMillis = ms;
+}
+
+
+static int getTotalByteSize (ADIOS_FILE* f, ADIOS_VARINFO* v, ADIOS_SELECTION* sel,
+                             uint64_t* total_byte_size, uint64_t* dataSize, int timestep)
+{
+  *total_byte_size = common_read_type_size (v->type, v->value);
+  *dataSize = 1;
+
+  if (sel == 0) {
+    uint64_t s = 0;
+    for (s=0; s<v->ndim; s++) {
+      *total_byte_size *=v->dims[s];
+      *dataSize *= v->dims[s];
+      //     log_debug(" dim %" PRIu64 "default count %" PRIu64 "\n", s, v->dims[s]);                                                                       
+    }
+    return 0;
+  }
+
+  switch (sel->type) {
+  case  ADIOS_SELECTION_BOUNDINGBOX:
+    {
+      const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(sel->u.bb);
+      uint64_t* count = bb->count;
+      uint64_t* start = bb->start;
+
+      int s=0;
+
+      for (s=0; s<v->ndim; s++) {
+	if (start[s]+count[s] > v->dims[s]) {
+	  printf(" Invalid bounding box at %dth dim: start %" PRIu64 " + count %" PRIu64 " exceeds dim size: %" PRIu64 "\n", 
+		 s, start[s], count[s], v->dims[s]);		 
+	  return -1;
+	}
+	*total_byte_size *=count[s];
+	*dataSize *= count[s];
+      }
+
+      break;
+    }
+  case ADIOS_SELECTION_POINTS:
+    {
+      const ADIOS_SELECTION_POINTS_STRUCT *pts = &(sel->u.points);
+      *total_byte_size *= pts->npoints;
+      *dataSize = pts->npoints;
+      break;
+    }
+  case ADIOS_SELECTION_WRITEBLOCK:
+    {
+      const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &(sel->u.block);
+
+      common_read_inq_var_blockinfo(f, v);
+      int i=0;
+      int min = v->nblocks[0];
+      int absBlockCounter = wb->index;
+
+      if (v->nsteps > 1) {      // all timesteps are known, can get abs                                                                                        
+        for (i=0; i<v->nsteps; i++)
+          {
+            int nBlocksAtStep = v->nblocks[i];
+            if (nBlocksAtStep < min) {
+              min = nBlocksAtStep;
+            }
+            printf("\t\t   currstep=%d nblocks=%d\n", i, nBlocksAtStep);
+            if (i < timestep) {
+              absBlockCounter += nBlocksAtStep;
+            }
+          }
+      }
+
+      if (wb->index > min) {
+	printf("Error: Unable to handle this block index %d over all the timesteps. Stop.\n", wb->index);
+	return -1;
+      }
+      int j=0;
+      for (j=0; j<v->ndim; j++)
+        {
+          *total_byte_size *= v->blockinfo[absBlockCounter].count[j];
+          *dataSize *= v->blockinfo[absBlockCounter].count[j];
+        }
+
+      printf("\t\t   block %d, abs id:%d, bytes: %" PRIu64 ", size =  %" PRIu64 " \n", wb->index, absBlockCounter, *total_byte_size, *dataSize);
+
+      break;
+    }
+  default:
+    break;
+  }
+  return 0;
+}
+
+void recursive_free(ADIOS_QUERY* q) {
+  ADIOS_QUERY* left = q->left;
+  ADIOS_QUERY* right = q->right;
+
+  if (q->sel != NULL) {
+    if (q->sel->type == ADIOS_SELECTION_BOUNDINGBOX) {    
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &(q->sel->u.bb);
+	free(bb->start);
+	free(bb->count);
+    }
+    adios_selection_delete(q->sel);
+  }
+
+  if (left != NULL) {
+    recursive_free(left);
+    recursive_free(right);
+  }
+
+  adios_query_free(q); 
+}
+
+int getInput(char* input, const char* delim, uint64_t** result, int dim)
+{
+  int i=0;
+  char* token = strtok(input, delim);
+
+  while (token) {
+    (*result)[i] = atol(token);
+    i++;
+    if (i>=dim) {
+      break;
+    }
+    token = strtok(0, delim);
+  }
+
+  if (i == dim) {    
+    return 0;
+  }
+  return -1;
+}
+
+
+ADIOS_SELECTION* getSelFromSelectionNode(mxml_node_t* selNode) {
+    const char* type = mxmlElementGetAttr(selNode, _gAttrSelType);
+    if (type == NULL) {
+      printf("No type specified, treat as NULL\n");
+      return NULL;
+    }
+
+    if (strstr(type, "BOX") != NULL) {
+      const char* dimStr = mxmlElementGetAttr(selNode, _gAttrSelDim);
+      char* startStr = mxmlElementGetAttr(selNode, _gAttrSelStart);
+      char* countStr = mxmlElementGetAttr(selNode, _gAttrSelCount);
+      if ((dimStr == NULL) || ( startStr == NULL) || (countStr == NULL)) {
+	printf("One of dim/count/start is not specified in BOUNDINGBOX, treat as NULL\n");
+	return NULL;
+      }
+      
+      int dim = atoi(dimStr);
+      if (dim == 0) {
+	printf("Invalid dim str %s: expecting to be > 0 \n", dimStr);
+	exit(EXIT_FAILURE);
+      }
+      
+      uint64_t* count = malloc(dim*sizeof(uint64_t));
+      uint64_t* start = malloc(dim*sizeof(uint64_t));
+
+      if (getInput(startStr, ",", &start, dim) != 0) {
+	free(start);
+	return NULL;
+      }
+      if (getInput(countStr, ",", &count, dim) != 0) {
+	free(count);
+	return NULL;
+      }
+      return adios_selection_boundingbox(dim, start, count);
+    } else if (strstr(type, "BLOCK") != NULL) {
+      const char* idStr = mxmlElementGetAttr(selNode, _gAttrSelID);
+      if (idStr ==  NULL) {
+	printf("block id is expected but not defined. ");
+	return NULL;
+      }
+      int blockID = atoi(idStr);
+      return adios_selection_writeblock(blockID);
+    }
+
+    return NULL;
+}
+
+ADIOS_SELECTION* getSel(mxml_node_t* entryNode) {
+    mxml_node_t* selNode = mxmlFindElement(entryNode, entryNode, _gTagSel, NULL, NULL, MXML_DESCEND);
+    if (selNode == NULL) {
+      return NULL;
+    }
+
+    return getSelFromSelectionNode(selNode);
+}
+
+
+ADIOS_QUERY* getEntryQuery(mxml_node_t* queryNode, const char* entryName, ADIOS_FILE* f) 
+{
+  mxml_node_t* entryNode = mxmlFindElement(queryNode, queryNode, _gTagEntry, _gAttrQueryName, entryName, MXML_DESCEND);
+  if (entryNode == NULL) {
+    printf("No such subquery: %s\n", entryName);
+    return NULL;
+  }
+
+  const char* actionAttr = mxmlElementGetAttr(entryNode,_gAttrAction);
+  
+  if (actionAttr != NULL) { // composite query    
+    enum ADIOS_CLAUSE_OP_MODE op = ADIOS_QUERY_OP_AND;
+    if (strcasecmp(actionAttr, "or") == 0) {
+      op = ADIOS_QUERY_OP_OR;
+    } 
+    //continue here.. 
+    mxml_node_t* leftNode  = mxmlFindElement(entryNode, entryNode, _gAttrNode,NULL, NULL, MXML_DESCEND);
+    mxml_node_t* rightNode = mxmlFindElement(leftNode, entryNode, _gAttrNode, NULL, NULL, MXML_DESCEND);
+
+    if ((leftNode == NULL) || (rightNode == NULL)) {
+      return NULL;
+    }
+
+    const char* leftName = leftNode->child->value.text.string;
+    const char* rightName = rightNode->child->value.text.string;
+
+    ADIOS_QUERY* left = getEntryQuery(queryNode, leftName, f);
+    ADIOS_QUERY* right = getEntryQuery(queryNode, rightName, f);
+
+    mxmlDelete(entryNode);
+    return adios_query_combine(left, op, right);
+
+  } else {
+    // a leaf;
+    const char* varName = mxmlElementGetAttr(entryNode, _gAttrVarName);
+    const char* value = mxmlElementGetAttr(entryNode, _gAttrVarValue);
+    const char* opStr = mxmlElementGetAttr(entryNode, _gAttrOperand);
+
+    if ((varName == NULL) || (value == NULL) || (opStr == NULL)) {
+      return NULL;
+    }    
+    enum ADIOS_PREDICATE_MODE op = getOp(opStr);
+    
+    ADIOS_SELECTION* sel = getSel(entryNode);
+
+    ADIOS_QUERY* q = adios_query_create(f, sel, varName, op, value);
+    return q;
+  }
+      
+  mxmlDelete(entryNode);
+}
+
+ADIOS_QUERY* constructQuery(mxml_node_t* queryNode, ADIOS_FILE* f, const char* queryName, uint64_t batchSize)
+{
+  mxml_node_t* opNode = mxmlFindElement(queryNode, queryNode, _gAttrOperand, NULL, NULL, MXML_DESCEND);
+  if (opNode == NULL) 
+  {
+    return getEntryQuery(queryNode, NULL, f);
+  } else {
+    mxml_node_t*  leftNode = mxmlFindElement(opNode, opNode, _gAttrNode, NULL, NULL, MXML_DESCEND);    
+    mxml_node_t*  rightNode = mxmlFindElement(leftNode, opNode, _gAttrNode, NULL, NULL, MXML_DESCEND);
+
+    const char* leftName = leftNode->child->value.text.string;
+    const char* rightName = rightNode->child->value.text.string;
+
+    if ((leftName == NULL) || (rightName == NULL)) {
+      printf("Unable to get entry for combination op. \n");
+      return NULL;
+    }
+
+    ADIOS_QUERY* left = getEntryQuery(queryNode, leftName, f);
+    ADIOS_QUERY* right = getEntryQuery(queryNode, rightName, f);
+    
+    enum ADIOS_CLAUSE_OP_MODE op = ADIOS_QUERY_OP_AND;
+    if (opNode->value.element.num_attrs == 1) {
+      if (strcasecmp(opNode->value.element.attrs[0].value, "or") == 0) {
+	op = ADIOS_QUERY_OP_OR;
+      }
+    }
+    mxmlDelete(opNode);
+    return adios_query_combine(left, op, right);
+  }
+}
+
+double getCurrentValue(void* data, uint64_t idx, enum ADIOS_DATATYPES type) 
+{
+  switch (type)
+    {
+    case adios_unsigned_byte:
+      return ((uint8_t *) data)[idx];
+    case adios_byte:
+      return ((int8_t *) data)[idx];
+    case adios_short:
+      return ((int16_t *) data)[idx];
+    case adios_unsigned_short:
+      return ((uint16_t *) data)[idx];
+    case adios_integer:
+      return ((int32_t *) data)[idx];
+    case adios_unsigned_integer:
+      return ((uint32_t *) data)[idx];
+    case adios_long:
+      return  ((int64_t *) data)[idx];
+    case adios_unsigned_long:
+      return ((uint64_t *) data)[idx];
+    case adios_real:
+      return ((float *) data)[idx];
+    case adios_double:
+      return ((double *) data)[idx];
+    case adios_long_double:
+      return ((long double *) data)[idx];
+    case adios_string:
+      break;
+    case adios_complex:
+      break;
+    case adios_double_complex:
+      break;
+    }
+  return 0;
+}
+
+void manualCheck(ADIOS_QUERY* q, int timestep) {
+  if ((q->left == NULL) && (q->right == NULL)) {    
+      printf ("... manual check: \n");
+      // proceed
+      uint64_t totalByteSize;
+      uint64_t totalSize;
+      
+      getTotalByteSize(q->file, q->varinfo, q->sel, &totalByteSize, &totalSize, timestep);
+      
+      void* output = malloc (totalByteSize);
+
+      adios_schedule_read (q->file, q->sel, q->varName, timestep, 1, output);
+      adios_perform_reads (q->file, 1);
+
+      uint64_t hits=0;
+      uint64_t k=0; 
+
+      char* endptr;
+      double vv = strtod(q->predicateValue, &endptr);
+
+      for (k=0; k<totalSize; k++) {
+	double curr = getCurrentValue(output, k, q->varinfo->type);
+	//printf ("curr=%lg, vv=%lg\n", curr, vv);
+	if (curr == vv) {
+	  if ((q->predicateOp == ADIOS_EQ) || (q->predicateOp == ADIOS_LTEQ) || (q->predicateOp == ADIOS_GTEQ)) {
+	      hits ++;
+	  }
+	} else if (curr < vv) {
+	  if ((q->predicateOp == ADIOS_LT) || (q->predicateOp == ADIOS_LTEQ)) {
+	    hits ++;
+	  }
+	} else { // >
+	  if ((q->predicateOp == ADIOS_GT) || (q->predicateOp == ADIOS_GTEQ)) {
+	    hits ++;
+	  }
+	}	  
+      }
+      free(output);
+      printf("... double check found %d hits\n", hits);
+      return;
+  }
+  printf("Skip manual check on composite query\n");
+  return;
+}
+
+ADIOS_SELECTION* getOutputSelection(mxml_node_t* queryNode) 
+{
+  mxml_node_t* outputSelNode = mxmlFindElement(queryNode, queryNode, _gTagOutput, NULL, NULL, MXML_DESCEND);
+
+  if (outputSelNode == NULL) {
+    return NULL;
+  } else {
+    return getSelFromSelectionNode(outputSelNode);
+  }
+}
+
+int parseQueryXml(const char* xmlQueryFileName) 
+{
+  int rank;
+  MPI_Comm_rank (MPI_COMM_WORLD, &rank);
+
+  //adios_query_init(ADIOS_QUERY_METHOD_FASTBIT);
+
+
+  FILE * fp = fopen (xmlQueryFileName,"r");
+  if (fp == NULL){
+    printf("No xml query file %s\n", xmlQueryFileName);    
+    return -1;
+  }
+
+  fseek(fp, 0, SEEK_END);  
+  long len = ftell(fp);
+  rewind(fp);
+
+  if (len == 0) {
+    printf("No content in file %s.\n", xmlQueryFileName);
+    return -1;
+  }
+
+  mxml_node_t* tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
+  fclose(fp);
+
+  if (tree == NULL) {
+    printf("Invalid xml file: %d.\n", xmlQueryFileName);
+    return -1;
+  }
+
+  ADIOS_FILE * f;
+  MPI_Comm    comm_dummy = 0;  // MPI_Comm is defined through adios_read.h 
+
+  adios_read_init_method(ADIOS_READ_METHOD_BP, comm_dummy, "verbose=2");
+
+  mxml_node_t* testsNode = mxmlFindElement(tree, tree, "tests", NULL, NULL, MXML_DESCEND);
+
+  mxml_node_t* queryNode; // mxmlFindElement(testsNode, testsNode, _gTagQuery, NULL, NULL, MXML_DESCEND);
+  
+
+  for (queryNode = mxmlFindElement(tree, tree, _gTagQuery, NULL, NULL, MXML_DESCEND);
+       queryNode != NULL;
+       queryNode = mxmlFindElement(queryNode, tree, _gTagQuery, NULL, NULL, MXML_DESCEND))
+				   
+    {
+      //printf("query: %s\n", queryNode->value.element.attrs[0].value);
+      mxml_value_t value = queryNode->value;
+      int i=0; 
+      const char* bpFileName = NULL;
+      const char* queryName = NULL;
+      uint64_t batchSize = 0;
+      
+
+      for (i = 0; i < value.element.num_attrs; i++) {	
+	mxml_attr_t currAttr = value.element.attrs[i];
+	if (strcasecmp(currAttr.name, _gAttrBPFile) == 0) {
+	  bpFileName = currAttr.value;
+	} else if (strcasecmp(currAttr.name, _gAttrQueryName) == 0) {
+	  queryName = currAttr.value;
+	} else if (strcasecmp(currAttr.name, _gAttrBatchSize) == 0) {
+	  batchSize = atol(currAttr.value);
+	}
+      }
+
+      if (bpFileName == 0) {
+	printf("missing data file in query.\n");
+	return -1;
+      }
+
+      f = adios_read_open_file (bpFileName, ADIOS_READ_METHOD_BP, comm_dummy);
+      if (f == NULL) {
+	printf("::%s\n", adios_errmsg());
+	return -1;
+      }
+
+      ADIOS_QUERY* q = constructQuery(queryNode, f, queryName, batchSize);
+
+      ADIOS_SELECTION* outputBox = getOutputSelection(queryNode);
+      logReport(-1); // init timer
+
+      //adios_query_set_method(q, ADIOS_QUERY_METHOD_FASTBIT);
+      int timestep = 0;
+      //ADIOS_SELECTION* noBox = 0;
+      while (timestep <= f->last_step) {
+	printf("\n ...... query=%s, %s, [TimeStep=%d of %d]\n",queryName, q->condition, timestep, f->last_step);
+	int64_t est = adios_query_estimate(q, timestep);
+	logTimeMillis(" estimated.");
+	printf("\n=> query %s: %s, \n\t estimated  %ld hits on timestep: %d\n", queryName, q->condition, est, timestep);
+	ADIOS_SELECTION* currBatch = NULL;
+	int hasMore = 1; 
+	while (hasMore > 0) {
+	  hasMore = adios_query_evaluate(q, outputBox, timestep, batchSize, &currBatch);
+	  logTimeMillis(" evaluated one batch.");
+	  if (currBatch != NULL) {
+	    printf("\n=> evaluated: %ld hits for %s\n", currBatch->u.points.npoints, q->condition);
+	  }
+	  if (currBatch != NULL) {
+	    free (currBatch->u.points.points);
+	    adios_selection_delete(currBatch);
+	  }
+	}
+	logReport(0);
+	manualCheck(q, timestep);
+	logTimeMillis(" manual check done.");
+	timestep ++;
+      }
+      
+      recursive_free(q);
+      adios_read_close(f);
+      
+      //mxmlDelete(queryNode);
+   }
+  
+  mxmlDelete(testsNode);
+  mxmlDelete(tree);    
+
+  adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+  adios_finalize(rank);
+}
+
+/*
+void testDefaultBoundBox(ADIOS_FILE* f, const char* varName1, const char* varName2, int timestep, const char* value1, const char* value2) 
+{
+  printf("\n=============== testing default bound box (no box specified) for all ===========\n");
+  ADIOS_SELECTION* noBox = 0;
+
+  //const char* varName1 = "/Timestep_0/cells/X";
+  enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  //const char* value1 = "0.96874";
+
+  //const char* varName2 = "/Timestep_0/cells/Y";
+  enum ADIOS_PREDICATE_MODE op2 = ADIOS_GT;
+  //const char* value2 = "0.96874";
+
+  ADIOS_QUERY* q1 = adios_query_create(f, noBox, varName1, op1, value1);
+  ADIOS_QUERY* q2 = adios_query_create(f, noBox, varName2, op2, value2);
+
+  ADIOS_QUERY* q = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+
+  if (q != NULL) {
+    //int timestep = 0;
+    uint64_t max = 10000;
+    //int64_t hitSize = adios_query_evaluate(q, timestep, max);
+
+    int64_t batchSize = 50;
+    while (1) {
+      ADIOS_SELECTION* currBatch = NULL;
+      int hasMore =  adios_query_evaluate(q, noBox, timestep, batchSize, &currBatch);
+      adios_selection_delete(currBatch);
+      
+      if (hasMore <= 0) {
+	break;
+      }
+    }
+
+    //fastbit_selection_free(q->_queryInternal);
+    adios_query_free(q);
+  }
+
+  adios_query_free(q1);
+  adios_query_free(q2);
+
+}
+
+void testMixedIdxNoIdxCase()
+{
+  printf(" \n =========== testng on cases with mixed index/in-memory usage =========\n");
+
+  //here you go
+}
+
+void testNoBoxOnSelection(ADIOS_FILE* f, const char* varName1, const char* lessThanValue, int timestep, enum ADIOS_PREDICATE_MODE op1) 
+{
+  printf("\n=============== testing box in query but no bound box for selection  ===========\n");
+
+  //uint64_t start1[] = {0, 0, 0};
+  //uint64_t count1[] = {256, 1,32};
+  //uint64_t count1[] = {56, 1,32};
+
+  ADIOS_SELECTION* noBox = NULL;
+  //ADIOS_SELECTION* box = adios_selection_boundingbox(3, start1, count1);
+
+
+  //enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  //const char* value1 = "0.96874";
+
+  ADIOS_QUERY* q = adios_query_create(f, noBox, varName1, op1, lessThanValue);
+
+  if (q != NULL) {
+    //int timestep = 0;
+    uint64_t max = 10000;
+    //int64_t hitSize = adios_query_evaluate(q, timestep, max);
+
+    //int64_t estimated = adios_query_estimate(q);
+    //printf("estimated query result = %lld \n", estimated);
+    
+    int64_t batchSize = 50;
+    while (1) {
+      ADIOS_SELECTION* currBatch = NULL;
+      int hasMore =  adios_query_evaluate(q, noBox, timestep, batchSize, &currBatch);
+      adios_selection_delete(currBatch);
+      
+      if (hasMore <= 0) {
+	break;
+      }
+    }
+
+    adios_query_free(q);
+  }
+
+}
+
+void testOneBoundBox(ADIOS_FILE* f, const char* varName1, const char* value1, int timestep) 
+{
+  printf("\n=============== testing one box specified) for all ===========\n");
+  uint64_t start1[] = {0, 0, 0};
+  uint64_t count1[] = {258, 34,34};
+  ADIOS_SELECTION* box = adios_selection_boundingbox(3, start1, count1);
+
+
+  //const char* varName1 = "/Timestep_0/cells/X";
+  enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  //const char* value1 = "0.96874";
+
+  //const char* varName2 = "/Timestep_0/cells/Y";
+  const char* varName2 = varName1;
+  enum ADIOS_PREDICATE_MODE op2 = ADIOS_GT;
+  const char* value2 = "0.96874";
+
+  ADIOS_QUERY* q1 = adios_query_create(f, box, varName1, op1, value1);
+  //ADIOS_QUERY* q2 = adios_query_create(f, varName2, box, op2, value2);
+
+  //ADIOS_QUERY* q = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+
+  if (q1 != NULL) {
+    uint64_t max = 10000;
+
+    //int64_t estimated = adios_query_estimate(q1);
+    //printf("estimated query result = %lld \n", estimated);
+
+    int64_t batchSize = 50;
+    while (1) {
+      ADIOS_SELECTION* currBatch = NULL;
+      int hasMore =  adios_query_evaluate(q1, box, timestep, batchSize, &currBatch);
+      adios_selection_delete(currBatch);
+      
+      if (hasMore <= 0) {
+	break;
+      }
+    }
+
+    //fastbit_selection_free(q->_queryInternal);
+    adios_query_free(q1);
+  }
+
+  adios_selection_delete(box);
+
+}
+
+void testTwoBoundBoxes(ADIOS_FILE* f, const char* varName1, const char* value1, const char* value2, int timestep) 
+{
+  printf("\n=============== testing two box specified) for all ===========\n");
+
+
+  uint64_t start1[] = {33, 0, 0};
+  uint64_t count1[] = {32, 34,34};
+  ADIOS_SELECTION* box1 = adios_selection_boundingbox(3, start1, count1);
+
+  uint64_t start2[] = {65, 0, 0};
+  uint64_t count2[] = {32, 34,34};
+  ADIOS_SELECTION* box2 = adios_selection_boundingbox(3, start2, count2);
+
+
+  //const char* varName1 = "/Timestep_0/cells/X";
+  enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  //const char* value1 = "0.96874";
+
+  //const char* varName2 = "/Timestep_0/cells/Y";
+  //const char* varName2 = varName1;
+  enum ADIOS_PREDICATE_MODE op2 = ADIOS_GT;
+  //const char* value2 = "0.96874";
+
+  ADIOS_QUERY* q1 = adios_query_create(f, box1, varName1, op1, value1);
+  ADIOS_QUERY* q2 = adios_query_create(f, box2, varName1, op2, value2);
+
+  ADIOS_QUERY* q = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+
+  if (q != NULL) {
+    uint64_t max = 10000;
+
+    //int64_t estimated = adios_query_estimate(q);
+    //printf("estimated query result = %lld \n", estimated);
+
+    int64_t batchSize = 50;
+    while (1) {
+      ADIOS_SELECTION* currBatch = NULL;
+      int hasMore =  adios_query_evaluate(q, box1, timestep, batchSize, &currBatch);
+      adios_selection_delete(currBatch);
+      
+      if (hasMore <= 0) {
+	break;
+      }
+    }
+
+    //fastbit_selection_free(q->_queryInternal);
+    adios_query_free(q);
+  }
+  adios_query_free(q1);
+  adios_query_free(q2);
+
+  adios_selection_delete(box1);
+  adios_selection_delete(box2);
+
+}
+
+void testUseOneWriteBlockSimpleLessThan(ADIOS_FILE* f, int blockNum, const char* varName1, const char* lessThanValue1, int timestep)
+{
+  printf("\n=============== testing one block for simple query: %s < %s at timestep: %d ===========\n", varName1, lessThanValue1, timestep);
+
+  ADIOS_SELECTION* box = adios_selection_writeblock(blockNum);
+
+  //const char* varName1 = "/Timestep_0/cells/X";
+  enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  // const char* value1 = "0.96874";
+
+  ADIOS_QUERY* q = adios_query_create(f, box, varName1, op1, lessThanValue1);
+
+  if (q!= NULL) {
+    //int timestep = 0;
+    uint64_t max = 10000;
+    //int64_t hitSize = adios_query_evaluate(q, timestep, max);
+    
+    int64_t batchSize = 50;
+    
+    //printf("time steps for variable is: %d \n",q->_var->nsteps);
+    //int i=0;
+    //for (i=0; i<q->_var->nsteps; i++) {
+    // adios_query_set_timestep(i);
+
+    //int64_t estimated = adios_query_estimate(q);
+    //printf("estimated query result = %lld \n", estimated);
+
+      while (1) {
+	ADIOS_SELECTION* currBatch = NULL;
+	int hasMore =  adios_query_evaluate(q, box, timestep, batchSize, &currBatch);
+	adios_selection_delete(currBatch);
+	
+	if (hasMore <= 0) {
+	  break;
+	}
+      }      
+      //}
+
+    //fastbit_selection_free(q->_queryInternal);
+  }
+
+  adios_query_free(q);
+  adios_selection_delete(box);
+}
+
+void testUseOneWriteBlock(ADIOS_FILE* f, int blockNum, const char* varName1, const char* varName2)
+{
+  printf("\n=============== testing one block for all ===========\n");
+
+  ADIOS_SELECTION* box = adios_selection_writeblock(blockNum);
+
+  //const char* varName1 = "/Timestep_0/cells/X";
+  enum ADIOS_PREDICATE_MODE op1 = ADIOS_LT;
+  const char* value1 = "0.96874";
+
+  //const char* varName2 = "/Timestep_0/cells/Y";
+  enum ADIOS_PREDICATE_MODE op2 = ADIOS_GT;
+  const char* value2 = "0.96874";
+
+  ADIOS_QUERY* q1 = adios_query_create(f, box, varName1, op1, value2);
+  ADIOS_QUERY* q2 = adios_query_create(f, box, varName2, op2, value2);
+
+  ADIOS_QUERY* q = adios_query_combine(q1, ADIOS_QUERY_OP_AND, q2);
+
+  if (q!= NULL) {
+    int timestep = 0;
+    uint64_t max = 10000;
+    //int64_t hitSize = adios_query_evaluate(q, timestep, max);
+    
+    int64_t batchSize = 50;
+    
+    int i = 0;
+    printf("time steps for variable is: %d \n",q1->varinfo->nsteps);
+    for (i=0; i<q1->varinfo->nsteps; i++) {
+      
+      while (1) {
+	ADIOS_SELECTION* currBatch = NULL;
+	int hasMore =  adios_query_evaluate(q, box, timestep, batchSize, &currBatch);
+	adios_selection_delete(currBatch);
+	
+	if (hasMore <= 0) {
+	  break;
+	}
+      }
+      
+    }
+
+    //fastbit_selection_free(q->_queryInternal);
+    adios_query_free(q);
+  }
+  adios_query_free(q1);
+  adios_query_free(q2);
+
+  adios_selection_delete(box);
+}
+*/
+/*
+void doubleCheckWithIdxOnBlock(ADIOS_FILE* dataFile, const char* basefileName, int blockNum, ADIOS_VARINFO* v, int timestep, double lessThanVal) 
+{
+  ADIOS_FILE* idxFile = fastbit_adios_util_getFastbitIndexFileToRead(basefileName,  0);
+
+  if (idxFile == 0) {
+    printf("No such file.\n");
+    return;
+  }
+
+  char bmsVarName[100];
+  char keyVarName[100];
+  char offsetName[100];
+
+  sprintf(bmsVarName, "bms-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(keyVarName, "key-%d-%d-%d", v->varid, timestep, blockNum);
+  sprintf(offsetName, "offset-%d-%d-%d", v->varid, timestep, blockNum);
+
+  ADIOS_VARINFO * bmsV = adios_inq_var (idxFile, bmsVarName); 
+  ADIOS_VARINFO * keyV = adios_inq_var (idxFile, keyVarName); 
+  ADIOS_VARINFO * offsetV = adios_inq_var (idxFile, offsetName); 
+
+  int64_t bms_byte_size = adios_type_size (bmsV->type, bmsV->value);
+  int64_t key_byte_size = adios_type_size (keyV->type, keyV->value);
+  int64_t offset_byte_size = adios_type_size (offsetV->type, offsetV->value);
+
+  void *bms = malloc((bmsV->dims[0])*bms_byte_size);
+  void *key = malloc((keyV->dims[0])*key_byte_size);
+  void *offset = malloc(offsetV->dims[0]*offset_byte_size);
+
+  uint64_t start[] = {0};
+  uint64_t count_bms[] = {bmsV->dims[0]};
+  uint64_t count_key[] = {keyV->dims[0]};
+  uint64_t count_offset[] = {offsetV->dims[0]};
+
+  ADIOS_SELECTION* bmsSel = adios_selection_boundingbox(bmsV->ndim, start, count_bms);
+  ADIOS_SELECTION* keySel = adios_selection_boundingbox(keyV->ndim, start, count_key);
+  ADIOS_SELECTION* offsetSel = adios_selection_boundingbox(offsetV->ndim, start, count_offset);
+
+  // has one timestep in idx file
+  adios_schedule_read(idxFile, bmsSel, bmsVarName, 0, 1, bms);
+  adios_schedule_read(idxFile, keySel, keyVarName, 0, 1, key);
+  adios_schedule_read(idxFile, offsetSel, offsetName, 0, 1, offset);
+
+  adios_perform_reads(idxFile,1);
+
+  uint64_t nk = keyV->dims[0];
+  uint64_t no = offsetV->dims[0];
+  printf(" bms/key/offset data: length=%lld/%lld/%lld\n", bmsV->dims[0], keyV->dims[0], offsetV->dims[0]);
+
+  printData(bms, bmsV->type, bmsV->dims[0]);
+
+  adios_selection_delete(bmsSel);
+  adios_free_varinfo(bmsV);
+  adios_read_close(idxFile);
+
+  ADIOS_SELECTION* box = adios_selection_writeblock(blockNum);
+
+  adios_inq_var_blockinfo(dataFile, v);
+  uint64_t blockSize = getBlockSize(v, blockNum);
+  void* data = malloc(adios_type_size(v->type, v->value)*blockSize);
+  adios_schedule_read_byid(dataFile, box, v->varid, timestep, 1, data);
+  adios_perform_reads(dataFile,1);
+
+  fastbit_iapi_register_array("testme", getFastbitDataType(v->type), data, blockSize);
+  
+  int ierr = fastbit_iapi_attach_index ("testme", key, nk, offset, no, bms, mybmreader);
+  if (ierr < 0) {
+    printf(" reattaching index failed ierr = %ld\n", ierr);
+  } else {
+    FastBitSelectionHandle  h = fastbit_selection_osr("testme", FastBitCompareLess, lessThanVal);
+    int64_t hits =  fastbit_selection_evaluate(h);
+    printf(" double check, hits = %ld\n", hits);
+  }
+  free(bms);
+  free(key);
+  free(offset);
+
+}
+*/
+
+void usage(char* prog)
+{
+  printf("Usage: %s <BP-file> [query]\n e.g. ./test_v1 my.bp \"x1 > 10\" \n", prog);
+}
+
+int main (int argc, char ** argv) 
+{
+
+  parseQueryXml("query.xml");
+  return 0;
+
+
+#if 0
+  
+    if (argc < 2) {
+        usage(argv[0]);
+	return 1;
+    }
+
+    ADIOS_FILE * f;
+    MPI_Comm    comm_dummy = 0;  /* MPI_Comm is defined through adios_read.h */
+
+    f = adios_read_open_file (argv[1], ADIOS_READ_METHOD_BP, comm_dummy);
+    if (f == NULL) {
+        printf ("::%s\n", adios_errmsg());
+	return -1;
+    }
+
+    const char* varName1 = "/Timestep_0/cells/X";
+    const char* varName2 = "/Timestep_0/cells/Y";
+
+    if (argc > 2) {
+      varName1 = argv[2];
+    } 
+
+
+    if (argc > 3) {
+      int blockNum = 0; // relative to timestep
+      int timestep = 1;
+      const char* lessThanVal = argv[3];
+      if (argc > 4) { // e.g.  ./query_fastbit data/record20110203.bp "/var/v1" 1.000 2
+	timestep = atoi(argv[4]);
+      }
+
+      /*    
+      if (argc > 5) {	
+	printf("arg: dataFile var1 value timestep var2\n");
+	varName2 = argv[5];
+	const char* greaterThanVal = argv[6];
+
+	testDefaultBoundBox(f, varName1, varName2,  timestep, lessThanVal, greaterThanVal);
+      }
+      */
+      
+	//testUseOneWriteBlockSimpleLessThan(f, blockNum, varName1, lessThanVal, timestep); 
+	enum ADIOS_PREDICATE_MODE lessT = ADIOS_LT;
+	testNoBoxOnSelection(f, varName1, lessThanVal, timestep, lessT);
+	//testNoBoxOnSelection(f, varName1, lessThanVal, timestep, lessT);
+	enum ADIOS_PREDICATE_MODE greaterT = ADIOS_GT;
+	testNoBoxOnSelection(f, varName1, lessThanVal, timestep, greaterT);
+	//testNoBoxOnSelection(f, varName1, lessThanVal, timestep, greaterT);
+	//testOneBoundBox(f, varName1, lessThanVal, timestep);
+
+	//const char* greaterThanVal = argv[5];
+	//testTwoBoundBoxes(f, varName1, lessThanVal, greaterThanVal, timestep);
+	//}
+
+      /*
+      ADIOS_VARINFO* v = adios_inq_var(f, varName1);
+      doubleCheckWithIdxOnBlock(f, argv[1], blockNum, v, timestep, atof(lessThanVal));
+
+      //uint64_t point[] = {33,31,31};
+      //printf("testing global block #: %d\n", getGlobalBlockNumForPoint(v,point,timestep));
+
+      adios_free_varinfo(v);
+      */
+    }
+    
+    //testNoBoxOnSelection(f, varName1);
+    //testMultiBoundBox(f, varName1, varName1);
+    //testAllDifferentBoundBoxes(f, varName1, varName2);
+    //testUseOneWriteBlock(f, 0, varName1, varName2); 
+
+    
+    //testOneBoundBoxForAllVar(f, varName1, varName2); 
+    //testOnePointList(f, varName1, varName2);
+
+    adios_read_close(f);
+    return 1;
+#endif    
+}
diff --git a/tests/C/query/query-xmls/DS-1D/query0.xml b/tests/C/query/query-xmls/DS-1D/query0.xml
new file mode 100644
index 0000000..bf9570c
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-1D/query0.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="1" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="1" start="0" count="16"/>
+
+    <entry var="temp" op=">=" constraint="-1000.0"> 
+    </entry>
+    <entry var="temp" op="<=" constraint="1000.0"> 
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-1D/query1.xml b/tests/C/query/query-xmls/DS-1D/query1.xml
new file mode 100644
index 0000000..2cde58b
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-1D/query1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="1" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="1" start="0" count="16"/>
+
+    <entry var="temp" op=">=" constraint="-10.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="1" start="0" count="16"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="10.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="1" start="0" count="16"/>
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-2D/query0.xml b/tests/C/query/query-xmls/DS-2D/query0.xml
new file mode 100644
index 0000000..9521c65
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-2D/query0.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="0,0" count="8,8"/>
+
+    <entry var="temp" op=">=" constraint="0.9"> 
+    </entry>
+    <entry var="temp" op="<=" constraint="1.0"> 
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-2D/query1.xml b/tests/C/query/query-xmls/DS-2D/query1.xml
new file mode 100644
index 0000000..c261844
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-2D/query1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+
+    <entry var="temp" op=">=" constraint="-0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-3D/query-wb0.xml b/tests/C/query/query-xmls/DS-3D/query-wb0.xml
new file mode 100644
index 0000000..68d5fc1
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-3D/query-wb0.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<query num="2"  from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="0,0,0" count="2,2,2"/>
+
+    <entry var="temp" op=">=" constraint="0.5"> 
+        <selection type="ADIOS_SELECTION_WRITEBLOCK" index="0"/>
+    </entry>
+
+    <entry var="temp" op="<=" constraint="-0.5"> 
+        <selection type="ADIOS_SELECTION_WRITEBLOCK"  index="0"/>
+    </entry>
+    
+    <combine op="OR"/>
+
+</query>
diff --git a/tests/C/query/query-xmls/DS-3D/query-wb1.xml b/tests/C/query/query-xmls/DS-3D/query-wb1.xml
new file mode 100644
index 0000000..0135499
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-3D/query-wb1.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<query num="2"  from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_WRITEBLOCK" index="3"/>
+
+    <entry var="temp" op=">=" constraint="-0.5"> 
+        <selection type="ADIOS_SELECTION_WRITEBLOCK" index="3"/>
+    </entry>
+
+    <entry var="temp" op="<=" constraint="0.5"> 
+        <selection type="ADIOS_SELECTION_WRITEBLOCK"  index="3"/>
+    </entry>
+    
+    <combine op="AND"/>
+
+</query>
diff --git a/tests/C/query/query-xmls/DS-3D/query0.xml b/tests/C/query/query-xmls/DS-3D/query0.xml
new file mode 100644
index 0000000..94ec70d
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-3D/query0.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="0,0,0" count="4,4,4"/>
+
+    <entry var="temp" op=">=" constraint="0.8"> 
+    </entry>
+    <entry var="temp" op="<=" constraint="1.0"> 
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-3D/query1.xml b/tests/C/query/query-xmls/DS-3D/query1.xml
new file mode 100644
index 0000000..99e2e66
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-3D/query1.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<query num="4" from-timestep="0" num-timesteps="2" batchsize="8">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="1,1,1" count="2,2,2"/>
+
+    <entry var="temp" op=">=" constraint="-0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="1,1,1" count="2,2,2"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="1,1,1" count="2,2,2"/>
+    </entry>
+
+    <combine op="AND"/>
+
+    <entry var="temp" op=">=" constraint="8.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="1,1,1" count="2,2,2"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="10.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="3" start="1,1,1" count="2,2,2"/>
+    </entry>
+
+    <combine op="AND"/>
+    <combine op="OR"/>
+
+</query>
diff --git a/tests/C/query/query-xmls/DS-particle/DS-particle-query0.xml b/tests/C/query/query-xmls/DS-particle/DS-particle-query0.xml
new file mode 100644
index 0000000..5e00496
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-particle/DS-particle-query0.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<query num="4" from-timestep="0" num-timesteps="2" batchsize="8">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="0,0" count="1,64"/>
+
+    <entry var="temp" op=">=" constraint="100.8"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="1,0" count="1,64"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="101.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="1,0" count="1,64"/>
+    </entry>
+
+    <combine op="AND"/>
+
+    <entry var="temp" op=">=" constraint="1000.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="2,0" count="1,64"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="1000.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="2,0" count="1,64"/>
+    </entry>
+
+    <combine op="AND"/>
+    <combine op="OR"/>
+
+</query> 
diff --git a/tests/C/query/query-xmls/DS-particle/DS-particle-query1.xml b/tests/C/query/query-xmls/DS-particle/DS-particle-query1.xml
new file mode 100644
index 0000000..4bf2bc7
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-particle/DS-particle-query1.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<query num="4" from-timestep="0" num-timesteps="2" batchsize="8">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="0,16" count="1,32"/>
+
+    <entry var="temp" op=">=" constraint="100.8"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="1,16" count="1,32"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="101.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="1,16" count="1,32"/>
+    </entry>
+
+    <combine op="AND"/>
+
+    <entry var="temp" op=">=" constraint="1000.0"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="2,16" count="1,32"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="1000.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="2,16" count="1,32"/>
+    </entry>
+
+    <combine op="AND"/>
+    <combine op="OR"/>
+
+
+</query>
+  
diff --git a/tests/C/query/query-xmls/DS-unevenpg/query0.xml b/tests/C/query/query-xmls/DS-unevenpg/query0.xml
new file mode 100644
index 0000000..9521c65
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-unevenpg/query0.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="0,0" count="8,8"/>
+
+    <entry var="temp" op=">=" constraint="0.9"> 
+    </entry>
+    <entry var="temp" op="<=" constraint="1.0"> 
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/C/query/query-xmls/DS-unevenpg/query1.xml b/tests/C/query/query-xmls/DS-unevenpg/query1.xml
new file mode 100644
index 0000000..c261844
--- /dev/null
+++ b/tests/C/query/query-xmls/DS-unevenpg/query1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<query num="2" from-timestep="0" num-timesteps="2" batchsize="1024">
+
+    <output type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+
+    <entry var="temp" op=">=" constraint="-0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+    </entry>
+    <entry var="temp" op="<=" constraint="0.2"> 
+        <selection type="ADIOS_SELECTION_BOUNDINGBOX" dim="2" start="3,3" count="4,4"/>
+    </entry>
+
+    <combine op="AND"/>
+</query>
diff --git a/tests/Fortran/Makefile.am b/tests/Fortran/Makefile.am
index 077585d..476efb8 100644
--- a/tests/Fortran/Makefile.am
+++ b/tests/Fortran/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -10,7 +10,7 @@ noinst_PROGRAMS=adios_test_f
 
 #adios_test_f_SOURCES = adios_test_f.F90 adios_module.F90
 adios_test_f_SOURCES = adios_test_f.F90
-adios_test_f_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+adios_test_f_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 adios_test_f_CFLAGS = $(ADIOSLIB_CFLAGS)
 adios_test_f_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 adios_test_f_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
diff --git a/tests/Fortran/Makefile.in b/tests/Fortran/Makefile.in
index 6289202..b2b7e2b 100644
--- a/tests/Fortran/Makefile.in
+++ b/tests/Fortran/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -121,6 +127,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -178,6 +186,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -277,11 +288,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -347,12 +360,12 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 
 #adios_test_f_SOURCES = adios_test_f.F90 adios_module.F90
 adios_test_f_SOURCES = adios_test_f.F90
-adios_test_f_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+adios_test_f_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 adios_test_f_CFLAGS = $(ADIOSLIB_CFLAGS)
 adios_test_f_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 adios_test_f_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 8da3f06..7862227 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/tests/bp_read/Makefile.am b/tests/bp_read/Makefile.am
index ac84a17..0011a8b 100644
--- a/tests/bp_read/Makefile.am
+++ b/tests/bp_read/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -15,27 +15,27 @@ endif
 # read_coords read_phi read_parts_global read_gena read_gena_pncd read_pixie_all
 
 genbp_SOURCES = genbp.c
-genbp_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genbp_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genbp_CFLAGS = $(ADIOSLIB_CFLAGS)
 genbp_LDADD = $(top_builddir)/src/libadios.a $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
 genbp_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 
 if BUILD_FORTRAN
 bp_read_f_SOURCES = bp_read_f.F90
-bp_read_f_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+bp_read_f_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 bp_read_f_CFLAGS = $(ADIOSLIB_CFLAGS)
 bp_read_f_LDADD = $(top_builddir)/src/libadiosreadf.a $(ADIOSREADLIB_LDADD)
 bp_read_f_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 
 bp_read_f_v1_SOURCES = bp_read_f_v1.F90
-bp_read_f_v1_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+bp_read_f_v1_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 bp_read_f_v1_CFLAGS = $(ADIOSLIB_CFLAGS)
 bp_read_f_v1_LDADD = $(top_builddir)/src/libadiosreadf_v1.a $(ADIOSREADLIB_LDADD)
 bp_read_f_v1_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 endif
 
 bp_read_c_SOURCES = bp_read_c.c
-bp_read_c_CPPFLAGS = -DADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS)
+bp_read_c_CPPFLAGS = -DADIOS_USE_READ_API_1 $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 bp_read_c_CFLAGS = $(ADIOSLIB_CFLAGS)
 bp_read_c_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 bp_read_c_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
@@ -48,9 +48,9 @@ FCLINK = \
         $(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
 
 if BUILD_FORTRAN
-CLEANFILES = *.o bp_read_c bp_read_f genbp read_coords read_phi read_parts_global
+CLEANFILES = bp_read_c bp_read_f genbp read_coords read_phi read_parts_global
 else
-CLEANFILES = *.o bp_read_c genbp read_coords read_phi read_parts_global
+CLEANFILES = bp_read_c genbp read_coords read_phi read_parts_global
 endif
 
 EXTRA_DIST = testbp_c.xml
diff --git a/tests/bp_read/Makefile.in b/tests/bp_read/Makefile.in
index aabc5fa..13d1612 100644
--- a/tests/bp_read/Makefile.in
+++ b/tests/bp_read/Makefile.in
@@ -53,6 +53,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -69,11 +70,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -163,6 +169,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -220,6 +228,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -319,11 +330,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -389,28 +402,28 @@ 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 \
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 
 # read_coords read_phi read_parts_global read_gena read_gena_pncd read_pixie_all
 genbp_SOURCES = genbp.c
-genbp_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genbp_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genbp_CFLAGS = $(ADIOSLIB_CFLAGS)
 genbp_LDADD = $(top_builddir)/src/libadios.a $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
 genbp_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 @BUILD_FORTRAN_TRUE at bp_read_f_SOURCES = bp_read_f.F90
- at BUILD_FORTRAN_TRUE@bp_read_f_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+ at BUILD_FORTRAN_TRUE@bp_read_f_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 @BUILD_FORTRAN_TRUE at bp_read_f_CFLAGS = $(ADIOSLIB_CFLAGS)
 @BUILD_FORTRAN_TRUE at bp_read_f_LDADD = $(top_builddir)/src/libadiosreadf.a $(ADIOSREADLIB_LDADD)
 @BUILD_FORTRAN_TRUE at bp_read_f_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 @BUILD_FORTRAN_TRUE at bp_read_f_v1_SOURCES = bp_read_f_v1.F90
- at BUILD_FORTRAN_TRUE@bp_read_f_v1_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+ at BUILD_FORTRAN_TRUE@bp_read_f_v1_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 @BUILD_FORTRAN_TRUE at bp_read_f_v1_CFLAGS = $(ADIOSLIB_CFLAGS)
 @BUILD_FORTRAN_TRUE at bp_read_f_v1_LDADD = $(top_builddir)/src/libadiosreadf_v1.a $(ADIOSREADLIB_LDADD)
 @BUILD_FORTRAN_TRUE at bp_read_f_v1_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 bp_read_c_SOURCES = bp_read_c.c
-bp_read_c_CPPFLAGS = -DADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS)
+bp_read_c_CPPFLAGS = -DADIOS_USE_READ_API_1 $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 bp_read_c_CFLAGS = $(ADIOSLIB_CFLAGS)
 bp_read_c_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 bp_read_c_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
@@ -418,8 +431,8 @@ FCLINK = \
         $(LIBTOOL) --mode=link --tag F77 $(FC) \
         $(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
 
- at BUILD_FORTRAN_FALSE@CLEANFILES = *.o bp_read_c genbp read_coords read_phi read_parts_global
- at BUILD_FORTRAN_TRUE@CLEANFILES = *.o bp_read_c bp_read_f genbp read_coords read_phi read_parts_global
+ at BUILD_FORTRAN_FALSE@CLEANFILES = bp_read_c genbp read_coords read_phi read_parts_global
+ at BUILD_FORTRAN_TRUE@CLEANFILES = bp_read_c bp_read_f genbp read_coords read_phi read_parts_global
 EXTRA_DIST = testbp_c.xml
 all: all-am
 
diff --git a/tests/bp_read/genbp.c b/tests/bp_read/genbp.c
index c348be3..68f56ed 100644
--- a/tests/bp_read/genbp.c
+++ b/tests/bp_read/genbp.c
@@ -70,7 +70,7 @@ int main (int argc, char ** argv)
 
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
-    if (!adios_init ("testbp_c.xml", comm))
+    if (adios_init ("testbp_c.xml", comm))
         return -1;
 
     adios_open (&io_handle, type_name, filename, "w", comm);
diff --git a/tests/bp_read/testbp_c.xml b/tests/bp_read/testbp_c.xml
index 0e4576e..a594eba 100644
--- a/tests/bp_read/testbp_c.xml
+++ b/tests/bp_read/testbp_c.xml
@@ -14,7 +14,7 @@
     <var name="int_5D"  type="integer" dimensions="dim1,dim2,dim3,dim4,dim5"/>
   </adios-group>
 
-  <method group="testbp" method="POSIX"/>
+  <method group="testbp" method="POSIX1"/>
 
   <buffer size-MB="1" allocate-time="now"/>
 
diff --git a/tests/genarray/Makefile.am b/tests/genarray/Makefile.am
index de71d2e..e1c5ca4 100644
--- a/tests/genarray/Makefile.am
+++ b/tests/genarray/Makefile.am
@@ -1,30 +1,30 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 noinst_PROGRAMS=genarray genarray2D copyarray copyarray2D
 
 genarray_SOURCES = genarray.F90
-genarray_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genarray_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genarray_CFLAGS = $(ADIOSLIB_CFLAGS)
 genarray_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 genarray_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 genarray2D_SOURCES = genarray2D.F90
-genarray2D_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genarray2D_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genarray2D_CFLAGS = $(ADIOSLIB_CFLAGS)
 genarray2D_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 genarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 copyarray_SOURCES = copyarray.F90
-copyarray_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+copyarray_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 copyarray_CFLAGS = $(ADIOSLIB_CFLAGS)
 copyarray_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 copyarray_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 copyarray2D_SOURCES = copyarray2D.F90
-copyarray2D_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+copyarray2D_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 copyarray2D_CFLAGS = $(ADIOSLIB_CFLAGS)
 copyarray2D_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 copyarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
diff --git a/tests/genarray/Makefile.in b/tests/genarray/Makefile.in
index 743f649..bd072a8 100644
--- a/tests/genarray/Makefile.in
+++ b/tests/genarray/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -145,6 +151,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -202,6 +210,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -301,11 +312,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -371,25 +384,25 @@ 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
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src
 AUTOMAKE_OPTIONS = no-dependencies
 genarray_SOURCES = genarray.F90
-genarray_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genarray_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genarray_CFLAGS = $(ADIOSLIB_CFLAGS)
 genarray_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 genarray_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 genarray2D_SOURCES = genarray2D.F90
-genarray2D_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+genarray2D_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 genarray2D_CFLAGS = $(ADIOSLIB_CFLAGS)
 genarray2D_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 genarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 copyarray_SOURCES = copyarray.F90
-copyarray_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+copyarray_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 copyarray_CFLAGS = $(ADIOSLIB_CFLAGS)
 copyarray_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 copyarray_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 copyarray2D_SOURCES = copyarray2D.F90
-copyarray2D_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
+copyarray2D_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 copyarray2D_CFLAGS = $(ADIOSLIB_CFLAGS)
 copyarray2D_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 copyarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
diff --git a/tests/genarray/copyarray.F90 b/tests/genarray/copyarray.F90
index 8d0b773..adcc8af 100644
--- a/tests/genarray/copyarray.F90
+++ b/tests/genarray/copyarray.F90
@@ -17,7 +17,7 @@
 ! (c) Oak Ridge National Laboratory, 2009
 ! Author: Norbert Podhorszki
 !
-module genarray_comm
+module copyarray_comm
     ! arguments
     character(len=256) :: outputfile, inputfile
     integer :: npx, npy, npz  ! # of processors in x-y-z direction
@@ -46,11 +46,11 @@ module genarray_comm
     real*8 :: cache_start_time, cache_end_time, cache_total_time
 
 
-end module genarray_comm
+end module copyarray_comm
 
 
 program genarray
-    use genarray_comm
+    use copyarray_comm
     use adios_write_mod
     implicit none
     include 'mpif.h'
@@ -123,7 +123,7 @@ end program genarray
 
 !!***************************
 subroutine determineLocalSize()
-    use genarray_comm
+    use copyarray_comm
     implicit none
     if (common_size) then
        ! we are done since we know them from argument
@@ -136,7 +136,7 @@ end subroutine determineLocalSize
 
 !!***************************
 subroutine determineGlobalSize()
-    use genarray_comm
+    use copyarray_comm
     implicit none
     if (common_size) then
         gndx = npx * ndx
@@ -151,7 +151,7 @@ end subroutine determineGlobalSize
 
 !!***************************
 subroutine determineOffsets()
-    use genarray_comm
+    use copyarray_comm
     implicit none
     integer :: posx, posy, posz ! position index in the array
     if (common_size) then
@@ -171,7 +171,7 @@ end subroutine determineOffsets
 
 !!***************************
 subroutine generateLocalArray()
-    use genarray_comm
+    use copyarray_comm
     implicit none
     integer :: i,j,k
     allocate( double_xyz(1:ndx, 1:ndy, 1:ndz) )
@@ -187,7 +187,7 @@ end subroutine generateLocalArray
 
 !!***************************
 subroutine readArray()
-    use genarray_comm
+    use copyarray_comm
     use adios_write_mod
     use adios_read_mod
     implicit none
@@ -222,7 +222,7 @@ end subroutine readArray
 
 !!***************************
 subroutine writeArray()
-    use genarray_comm
+    use copyarray_comm
     use adios_write_mod
     implicit none
     integer*8 adios_handle, adios_groupsize
@@ -270,7 +270,7 @@ end subroutine usage
 
 !!***************************
 subroutine processArgs()
-    use genarray_comm
+    use copyarray_comm
 
 #ifndef __GFORTRAN__
 #ifndef __GNUC__
diff --git a/tests/genarray/copyarray2D.F90 b/tests/genarray/copyarray2D.F90
index cadc9e2..2267639 100644
--- a/tests/genarray/copyarray2D.F90
+++ b/tests/genarray/copyarray2D.F90
@@ -29,7 +29,7 @@
 ! (c) Oak Ridge National Laboratory, 2009
 ! Author: Norbert Podhorszki
 !
-module genarray2D_comm
+module copyarray2D_comm
     ! arguments
     character(len=256) :: outputfile, inputfile
     integer :: npx, npy    ! # of processors in x-y direction
@@ -59,11 +59,11 @@ module genarray2D_comm
     real*8 :: start_time, end_time, total_time,gbs,sz
     real*8 :: cache_start_time, cache_end_time, cache_total_time
 
-end module genarray2D_comm
+end module copyarray2D_comm
 
 
 program genarray
-    use genarray2D_comm
+    use copyarray2D_comm
     use adios_write_mod
     implicit none
     include 'mpif.h'
@@ -133,7 +133,7 @@ end program genarray
 
 !!***************************
 subroutine determineLocalSize()
-    use genarray2D_comm
+    use copyarray2D_comm
     implicit none
     if (common_size) then
        ! we are done since we know them from argument
@@ -146,7 +146,7 @@ end subroutine determineLocalSize
 
 !!***************************
 subroutine determineGlobalSize()
-    use genarray2D_comm
+    use copyarray2D_comm
     implicit none
     if (common_size) then
         gndx = npx * ndx
@@ -160,7 +160,7 @@ end subroutine determineGlobalSize
 
 !!***************************
 subroutine determineOffsets()
-    use genarray2D_comm
+    use copyarray2D_comm
     implicit none
     if (common_size) then
         posx = mod(rank, npx)     ! 1st dim easy: 0, npx, 2npx... are in the same X position
@@ -179,7 +179,7 @@ end subroutine determineOffsets
 
 !!***************************
 subroutine generateLocalArray()
-    use genarray2D_comm
+    use copyarray2D_comm
     implicit none
     integer :: i,j,k, startv
     allocate( int_xy(1:ndx, 1:ndy) )
@@ -196,7 +196,7 @@ end subroutine generateLocalArray
 
 !!***************************
 subroutine readArray()
-    use genarray2D_comm
+    use copyarray2D_comm
     use adios_write_mod
     use adios_read_mod
     implicit none
@@ -263,7 +263,7 @@ end subroutine readArray
 
 !!***************************
 subroutine writeArray()
-    use genarray2D_comm
+    use copyarray2D_comm
     use adios_write_mod
     implicit none
     integer :: tstep
@@ -338,7 +338,7 @@ end subroutine usage
 
 !!***************************
 subroutine processArgs()
-    use genarray2D_comm
+    use copyarray2D_comm
 
 #ifndef __GFORTRAN__
 #ifndef __GNUC__
diff --git a/tests/suite/CMakeLists.txt b/tests/suite/CMakeLists.txt
index b1112fb..2a89487 100644
--- a/tests/suite/CMakeLists.txt
+++ b/tests/suite/CMakeLists.txt
@@ -16,7 +16,3 @@ else()
   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)
-#install(DIRECTORY tests USE_SOURCE_PERMISSIONS DESTINATION ${PROJECT_BINARY_DIR}/tests/suite PATTERN ".svn" EXCLUDE)
diff --git a/tests/suite/Makefile.in b/tests/suite/Makefile.in
index 7065d67..49b1938 100644
--- a/tests/suite/Makefile.in
+++ b/tests/suite/Makefile.in
@@ -47,6 +47,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -63,11 +64,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -139,6 +145,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -196,6 +204,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -295,11 +306,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/tests/suite/programs/CMakeLists.txt b/tests/suite/programs/CMakeLists.txt
index b134541..8bb7160 100644
--- a/tests/suite/programs/CMakeLists.txt
+++ b/tests/suite/programs/CMakeLists.txt
@@ -5,25 +5,38 @@ 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 
+set (WRITE_PROGS1 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 
+  two_groups
   many_vars 
   selections 
   path_test 
   reuse_dim 
-  adios_transforms_read_write 
+  adios_transforms_read_write
   connect_to_space_subset
-  copy_subvolume
-  transforms_specparse
+  big_file
   set_path
   set_path_var
-  hashtest)
+  steps_write
+  blocks
+  build_standard_dataset)
+
+set(WRITE_PROGS2 adios_staged_read
+                 adios_staged_read_v2 
+                 adios_staged_read_2vars
+                 steps_read_file
+                 steps_read_stream
+                 transforms_writeblock_read)
+
+set(WRITE_PROGS ${WRITE_PROGS1}
+                ${WRITE_PROGS2}
+                copy_subvolume
+                transforms_specparse
+                hashtest
+                group_free_test)
 
 if(BUILD_WRITE)
   foreach (PROG ${WRITE_PROGS} )
@@ -34,8 +47,21 @@ if(BUILD_WRITE)
     if(MPI_LINK_FLAGS)
       set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
     endif()
+  endforeach()
+
+  foreach (PROG ${WRITE_PROGS1} )
     target_link_libraries(${PROG} adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
   endforeach()  
+
+  foreach (PROG ${WRITE_PROGS2} )
+    target_link_libraries(${PROG} adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
+  endforeach()
+
+  target_link_libraries(copy_subvolume adiosread_nompi ${ADIOSREADLIB_SEQ_LDADD})
+  target_link_libraries(transforms_specparse adios_nompi ${ADIOSLIB_SEQ_LDADD})
+#  target_link_libraries(hashtest ${PROJECT_BINARY_DIR}/src/libadios_a-qhashtbl.o)
+  target_link_libraries(hashtest adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+  target_link_libraries(group_free_test adios_nompi ${ADIOSLIB_SEQ_LDADD})
 endif(BUILD_WRITE)
 
 if(BUILD_FORTRAN)
@@ -51,4 +77,8 @@ if(BUILD_FORTRAN)
   endif(BUILD_WRITE)
 endif(BUILD_FORTRAN)
 
-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)
+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 set_path.xml set_path_var.xml
+          two_groups.xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs)
diff --git a/tests/suite/programs/Makefile.am b/tests/suite/programs/Makefile.am
index 7dcc3e4..ce1a2f4 100644
--- a/tests/suite/programs/Makefile.am
+++ b/tests/suite/programs/Makefile.am
@@ -29,7 +29,10 @@ check_C=local_array_time \
 	set_path_var \
 	steps_write \
 	steps_read_file \
-	steps_read_stream
+	steps_read_stream \
+	blocks \
+	build_standard_dataset \
+	transforms_writeblock_read
 
 test_C=hashtest copy_subvolume transforms_specparse group_free_test
 
@@ -48,8 +51,8 @@ check_PROGRAMS=$(check_C) $(check_Fortran) $(check_readonly_C) $(check_readonly_
 # Parallel tests should be defined in ../tests/*.sh and executed by ../test.sh
 TESTS=$(test_C)
 
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src -I$(top_srcdir)/src/public
 
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
@@ -81,8 +84,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 $(ADIOSLIB_LDADD)
-adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
+adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 adios_staged_read.o: adios_staged_read.c
 
 adios_staged_read_v2_SOURCES=adios_staged_read_v2.c
@@ -91,13 +94,13 @@ 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 $(ADIOSLIB_LDADD)
-adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+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.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_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_transforms_read_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_transforms_read_write.o: adios_transforms_read_write.c 
 
 write_read_SOURCES=write_read.c
@@ -161,15 +164,28 @@ steps_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 steps_write.o: steps_write.c
 
 steps_read_file_SOURCES=steps_read_file.c
-steps_read_file_LDADD = $(top_builddir)/src/libadios.a $(ADIOSREADLIB_LDADD)
+steps_read_file_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 steps_read_file_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 steps_read_file.o: steps_read_file.c
 
 steps_read_stream_SOURCES=steps_read_stream.c
-steps_read_stream_LDADD = $(top_builddir)/src/libadios.a $(ADIOSREADLIB_LDADD)
+steps_read_stream_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 steps_read_stream_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 steps_read_stream.o: steps_read_stream.c
 
+blocks_SOURCES=blocks.c
+blocks_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+blocks_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+blocks.o: blocks.c
+
+build_standard_dataset_SOURCES = build_standard_dataset.c 
+build_standard_dataset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+build_standard_dataset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+
+transforms_writeblock_read_SOURCES = transforms_writeblock_read.c 
+transforms_writeblock_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD) 
+transforms_writeblock_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
 #transforms_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -177,15 +193,15 @@ steps_read_stream.o: steps_read_stream.c
 #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_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
+copy_subvolume_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_SEQ_LDFLAGS)
+copy_subvolume_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSREADLIB_SEQ_CPPFLAGS)
 #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_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+transforms_specparse_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS)
+transforms_specparse_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS)
 #transforms_specparse.o: transforms_specparse.c
 
 hashtest_SOURCES=hashtest.c
@@ -195,15 +211,16 @@ hashtest_CPPFLAGS = -I$(top_srcdir)/src
 hashtest.o: hashtest.c
 
 group_free_test_SOURCES=group_free_test.c
-group_free_test_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_LDADD)
-group_free_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
-group_free_test_CPPFLAGS = -I$(top_srcdir)/src
+group_free_test_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+group_free_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS)
+group_free_test_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS)
 group_free_test.o: group_free_test.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 transforms.xml \
-             path_test.xml adios_transforms.xml
+             path_test.xml adios_transforms.xml \
+	     two_groups.xml set_path.xml set_path_var.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 156017f..4a598c7 100644
--- a/tests/suite/programs/Makefile.in
+++ b/tests/suite/programs/Makefile.in
@@ -50,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +67,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -92,7 +98,9 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_WRITE_TRUE@	big_file$(EXEEXT) set_path$(EXEEXT) \
 @BUILD_WRITE_TRUE@	set_path_var$(EXEEXT) steps_write$(EXEEXT) \
 @BUILD_WRITE_TRUE@	steps_read_file$(EXEEXT) \
- at BUILD_WRITE_TRUE@	steps_read_stream$(EXEEXT)
+ at BUILD_WRITE_TRUE@	steps_read_stream$(EXEEXT) blocks$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	build_standard_dataset$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	transforms_writeblock_read$(EXEEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__EXEEXT_2 =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	posix_method$(EXEEXT)
 am__EXEEXT_3 =
@@ -143,8 +151,7 @@ am_adios_transforms_read_write_OBJECTS =  \
 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)
+	$(top_builddir)/src/libadios.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) \
@@ -156,6 +163,20 @@ big_file_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 big_file_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(big_file_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_blocks_OBJECTS = blocks.$(OBJEXT)
+blocks_OBJECTS = $(am_blocks_OBJECTS)
+blocks_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+blocks_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(blocks_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_build_standard_dataset_OBJECTS = build_standard_dataset.$(OBJEXT)
+build_standard_dataset_OBJECTS = $(am_build_standard_dataset_OBJECTS)
+build_standard_dataset_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+build_standard_dataset_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(build_standard_dataset_LDFLAGS) $(LDFLAGS) -o $@
 am_connect_to_space_subset_OBJECTS =  \
 	connect_to_space_subset.$(OBJEXT)
 connect_to_space_subset_OBJECTS =  \
@@ -244,14 +265,14 @@ set_path_var_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(set_path_var_LDFLAGS) $(LDFLAGS) -o $@
 am_steps_read_file_OBJECTS = steps_read_file.$(OBJEXT)
 steps_read_file_OBJECTS = $(am_steps_read_file_OBJECTS)
-steps_read_file_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+steps_read_file_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
 steps_read_file_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(steps_read_file_LDFLAGS) $(LDFLAGS) -o $@
 am_steps_read_stream_OBJECTS = steps_read_stream.$(OBJEXT)
 steps_read_stream_OBJECTS = $(am_steps_read_stream_OBJECTS)
-steps_read_stream_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+steps_read_stream_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
 steps_read_stream_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -271,6 +292,16 @@ transforms_specparse_DEPENDENCIES =  \
 transforms_specparse_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(transforms_specparse_LDFLAGS) $(LDFLAGS) -o $@
+am_transforms_writeblock_read_OBJECTS =  \
+	transforms_writeblock_read.$(OBJEXT)
+transforms_writeblock_read_OBJECTS =  \
+	$(am_transforms_writeblock_read_OBJECTS)
+transforms_writeblock_read_DEPENDENCIES =  \
+	$(top_builddir)/src/libadiosread.a $(am__DEPENDENCIES_1)
+transforms_writeblock_read_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(transforms_writeblock_read_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 \
@@ -316,6 +347,7 @@ SOURCES = $(adios_amr_write_SOURCES) $(adios_amr_write_2vars_SOURCES) \
 	$(adios_staged_read_2vars_SOURCES) \
 	$(adios_staged_read_v2_SOURCES) \
 	$(adios_transforms_read_write_SOURCES) $(big_file_SOURCES) \
+	$(blocks_SOURCES) $(build_standard_dataset_SOURCES) \
 	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
 	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
 	$(local_array_time_SOURCES) $(many_vars_SOURCES) \
@@ -323,13 +355,15 @@ SOURCES = $(adios_amr_write_SOURCES) $(adios_amr_write_2vars_SOURCES) \
 	$(reuse_dim_SOURCES) $(selections_SOURCES) $(set_path_SOURCES) \
 	$(set_path_var_SOURCES) $(steps_read_file_SOURCES) \
 	$(steps_read_stream_SOURCES) $(steps_write_SOURCES) \
-	$(transforms_specparse_SOURCES) $(two_groups_SOURCES) \
+	$(transforms_specparse_SOURCES) \
+	$(transforms_writeblock_read_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) \
 	$(adios_transforms_read_write_SOURCES) $(big_file_SOURCES) \
+	$(blocks_SOURCES) $(build_standard_dataset_SOURCES) \
 	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
 	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
 	$(local_array_time_SOURCES) $(many_vars_SOURCES) \
@@ -337,7 +371,8 @@ DIST_SOURCES = $(adios_amr_write_SOURCES) \
 	$(reuse_dim_SOURCES) $(selections_SOURCES) $(set_path_SOURCES) \
 	$(set_path_var_SOURCES) $(steps_read_file_SOURCES) \
 	$(steps_read_stream_SOURCES) $(steps_write_SOURCES) \
-	$(transforms_specparse_SOURCES) $(two_groups_SOURCES) \
+	$(transforms_specparse_SOURCES) \
+	$(transforms_writeblock_read_SOURCES) $(two_groups_SOURCES) \
 	$(write_alternate_SOURCES) $(write_read_SOURCES)
 ETAGS = etags
 CTAGS = ctags
@@ -366,6 +401,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -423,6 +460,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -522,11 +562,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -623,12 +665,15 @@ check_readonly_C =
 @BUILD_WRITE_TRUE@	set_path_var \
 @BUILD_WRITE_TRUE@	steps_write \
 @BUILD_WRITE_TRUE@	steps_read_file \
- at BUILD_WRITE_TRUE@	steps_read_stream
+ at BUILD_WRITE_TRUE@	steps_read_stream \
+ at BUILD_WRITE_TRUE@	blocks \
+ at BUILD_WRITE_TRUE@	build_standard_dataset \
+ at BUILD_WRITE_TRUE@	transforms_writeblock_read
 
 @BUILD_WRITE_TRUE at test_C = hashtest copy_subvolume transforms_specparse group_free_test
 @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 \
+AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src \
 	-I$(top_srcdir)/src/public
 
 #############################
@@ -649,17 +694,17 @@ 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 $(ADIOSLIB_LDADD)
-adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
+adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_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 $(ADIOSLIB_LDADD)
-adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+adios_staged_read_2vars_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
+adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_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)
+adios_transforms_read_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_transforms_read_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 write_read_SOURCES = write_read.c
 write_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 write_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
@@ -697,11 +742,20 @@ steps_write_SOURCES = steps_write.c
 steps_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 steps_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 steps_read_file_SOURCES = steps_read_file.c
-steps_read_file_LDADD = $(top_builddir)/src/libadios.a $(ADIOSREADLIB_LDADD)
+steps_read_file_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 steps_read_file_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 steps_read_stream_SOURCES = steps_read_stream.c
-steps_read_stream_LDADD = $(top_builddir)/src/libadios.a $(ADIOSREADLIB_LDADD)
+steps_read_stream_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 steps_read_stream_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+blocks_SOURCES = blocks.c
+blocks_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+blocks_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+build_standard_dataset_SOURCES = build_standard_dataset.c 
+build_standard_dataset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD) 
+build_standard_dataset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+transforms_writeblock_read_SOURCES = transforms_writeblock_read.c 
+transforms_writeblock_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD) 
+transforms_writeblock_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
@@ -709,27 +763,28 @@ steps_read_stream_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 #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_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
+copy_subvolume_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_SEQ_LDFLAGS)
+copy_subvolume_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSREADLIB_SEQ_CPPFLAGS)
 #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_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+transforms_specparse_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS)
+transforms_specparse_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS)
 #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
 group_free_test_SOURCES = group_free_test.c
-group_free_test_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_LDADD)
-group_free_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
-group_free_test_CPPFLAGS = -I$(top_srcdir)/src
+group_free_test_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+group_free_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS)
+group_free_test_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS)
 EXTRA_DIST = 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
+             path_test.xml adios_transforms.xml \
+	     two_groups.xml set_path.xml set_path_var.xml
 
 CLEANFILES = gwrite_posix_method.fh gread_posix_method.fh 
 FCLINK = \
@@ -800,6 +855,12 @@ adios_transforms_read_write$(EXEEXT): $(adios_transforms_read_write_OBJECTS) $(a
 big_file$(EXEEXT): $(big_file_OBJECTS) $(big_file_DEPENDENCIES) 
 	@rm -f big_file$(EXEEXT)
 	$(big_file_LINK) $(big_file_OBJECTS) $(big_file_LDADD) $(LIBS)
+blocks$(EXEEXT): $(blocks_OBJECTS) $(blocks_DEPENDENCIES) 
+	@rm -f blocks$(EXEEXT)
+	$(blocks_LINK) $(blocks_OBJECTS) $(blocks_LDADD) $(LIBS)
+build_standard_dataset$(EXEEXT): $(build_standard_dataset_OBJECTS) $(build_standard_dataset_DEPENDENCIES) 
+	@rm -f build_standard_dataset$(EXEEXT)
+	$(build_standard_dataset_LINK) $(build_standard_dataset_OBJECTS) $(build_standard_dataset_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)
@@ -848,6 +909,9 @@ steps_write$(EXEEXT): $(steps_write_OBJECTS) $(steps_write_DEPENDENCIES)
 transforms_specparse$(EXEEXT): $(transforms_specparse_OBJECTS) $(transforms_specparse_DEPENDENCIES) 
 	@rm -f transforms_specparse$(EXEEXT)
 	$(transforms_specparse_LINK) $(transforms_specparse_OBJECTS) $(transforms_specparse_LDADD) $(LIBS)
+transforms_writeblock_read$(EXEEXT): $(transforms_writeblock_read_OBJECTS) $(transforms_writeblock_read_DEPENDENCIES) 
+	@rm -f transforms_writeblock_read$(EXEEXT)
+	$(transforms_writeblock_read_LINK) $(transforms_writeblock_read_OBJECTS) $(transforms_writeblock_read_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)
@@ -871,6 +935,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read_v2.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_transforms_read_write.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/big_file.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blocks.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/build_standard_dataset.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connect_to_space_subset.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/copy_subvolume-copy_subvolume.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/group_free_test-group_free_test.Po at am__quote@
@@ -886,6 +952,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_read_stream.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_write.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transforms_specparse-transforms_specparse.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transforms_writeblock_read.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@
@@ -1301,6 +1368,7 @@ big_file.o: big_file.c
 steps_write.o: steps_write.c
 steps_read_file.o: steps_read_file.c
 steps_read_stream.o: steps_read_stream.c
+blocks.o: blocks.c
 hashtest.o: hashtest.c
 group_free_test.o: group_free_test.c
 
diff --git a/tests/suite/programs/adios_amr_write.c b/tests/suite/programs/adios_amr_write.c
index 472cb6e..a6247b7 100644
--- a/tests/suite/programs/adios_amr_write.c
+++ b/tests/suite/programs/adios_amr_write.c
@@ -14,7 +14,6 @@
 */
 #include <stdio.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 int main (int argc, char ** argv) 
 {
diff --git a/tests/suite/programs/adios_amr_write_2vars.c b/tests/suite/programs/adios_amr_write_2vars.c
index ce69199..e1d2ec9 100644
--- a/tests/suite/programs/adios_amr_write_2vars.c
+++ b/tests/suite/programs/adios_amr_write_2vars.c
@@ -14,7 +14,6 @@
 */
 #include <stdio.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 int main (int argc, char ** argv) 
 {
diff --git a/tests/suite/programs/adios_staged_read.c b/tests/suite/programs/adios_staged_read.c
index f874401..afac4a1 100644
--- a/tests/suite/programs/adios_staged_read.c
+++ b/tests/suite/programs/adios_staged_read.c
@@ -11,7 +11,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
-#include "mpi.h"
 
 #define ADIOS_USE_READ_API_1
 #include "adios_read.h"
diff --git a/tests/suite/programs/adios_staged_read_2vars.c b/tests/suite/programs/adios_staged_read_2vars.c
index ccb5e46..8cd975a 100644
--- a/tests/suite/programs/adios_staged_read_2vars.c
+++ b/tests/suite/programs/adios_staged_read_2vars.c
@@ -11,7 +11,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
-#include "mpi.h"
 
 #define ADIOS_USE_READ_API_1
 #include "adios_read.h"
diff --git a/tests/suite/programs/adios_staged_read_v2.c b/tests/suite/programs/adios_staged_read_v2.c
index a65494c..0c90777 100644
--- a/tests/suite/programs/adios_staged_read_v2.c
+++ b/tests/suite/programs/adios_staged_read_v2.c
@@ -11,7 +11,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
-#include "mpi.h"
 
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/adios_transforms_read_write.c b/tests/suite/programs/adios_transforms_read_write.c
index e6b8691..38470a1 100644
--- a/tests/suite/programs/adios_transforms_read_write.c
+++ b/tests/suite/programs/adios_transforms_read_write.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 #include <stdint.h>
@@ -37,7 +36,7 @@ int find_var (ADIOS_FILE *f, char *name)
     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))
+        if (!strcmp(name, f->var_namelist[i]))
             return 1;
     }
     return 0;
diff --git a/tests/suite/programs/big_file.c b/tests/suite/programs/big_file.c
index 65e4ac3..0cc1a02 100644
--- a/tests/suite/programs/big_file.c
+++ b/tests/suite/programs/big_file.c
@@ -18,7 +18,6 @@
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/blocks.c b/tests/suite/programs/blocks.c
new file mode 100644
index 0000000..e5453d8
--- /dev/null
+++ b/tests/suite/programs/blocks.c
@@ -0,0 +1,521 @@
+/* 
+ * 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 a global array over time, with multiple blocks per process
+ *    Similar to examples/C/global-array-time/adios_global_time_noxml.c
+ *  Then open for reading and check if the blockinfo for each block is correct. 
+ *  Do the reading twice, once with opening as file (all steps at once) and 
+ *     once as streaming (step-by-step)
+ *  Additionally, read a scalar's all instances in the file using writeblock 
+ *     selection.
+ *
+ * How to run: mpirun -np <N> blocks
+ * Output: blocks.bp
+ * Exit code: the number of errors found (0=OK)
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "adios.h"
+#include "adios_read.h"
+#include "adios_error.h"
+
+const static char fname[] = "blocks.bp";
+const static MPI_Comm  comm = MPI_COMM_WORLD;
+static int rank, size;
+static int nerrors = 0;
+
+int write_blocks ();
+void print_written_info();
+int read_all ();
+int read_stepbystep ();
+int read_scalar ();
+int read_scalar_stepbystep ();
+
+/* Remember (on rank 0) what was written (from all process) to check against it at reading */
+static int nblocks_per_step;
+static int nsteps;
+static uint64_t * block_offset;  // block_offset[ step*nblocks_per_step + i ] is i-th block offset written in "step".
+static uint64_t * block_count;   // block_count [ step*nblocks_per_step + i ] is i-th block size written in "step".
+static uint64_t * gdims;  // gdims[i] is the global dimension in i-th "step".
+
+
+int main (int argc, char ** argv) 
+{
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    nerrors = 0;
+    write_blocks();
+    if (!rank) {
+        print_written_info(); // this is just for debug to check if rank 0 stores the correct values
+        read_all();
+        read_stepbystep();
+        read_scalar();
+        read_scalar_stepbystep ();
+    }
+
+    MPI_Barrier (comm);
+    MPI_Finalize ();
+    free (block_offset);
+    free (block_count);
+    free (gdims);
+    if (!rank) printf ("----------- Done. Found %d errors -------\n", nerrors);
+    return nerrors;
+}
+
+int write_blocks () 
+{
+    int         NX, G, O; 
+    double      *t;
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         it, i, r;
+    uint64_t    adios_groupsize, adios_totalsize;
+
+    if (!rank) printf ("------- Write blocks -------\n");
+    // We will have "3 steps * 2 blocks per process * number of processes" blocks
+    nsteps = 3;
+    nblocks_per_step = 2;
+    block_offset = (uint64_t*) malloc (sizeof(uint64_t) * nsteps * nblocks_per_step * size);
+    block_count  = (uint64_t*) malloc (sizeof(uint64_t) * nsteps * nblocks_per_step * size);
+    gdims        = (uint64_t*) malloc (sizeof(uint64_t) * nsteps);
+
+    adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+
+    int64_t       m_adios_group;
+    int64_t       m_adios_file;
+
+    adios_declare_group (&m_adios_group, "restart", "", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "", "");
+
+    adios_define_var (m_adios_group, "NX"
+            ,"", adios_integer
+            ,0, 0, 0);
+
+    adios_define_var (m_adios_group, "G"
+            ,"", adios_integer
+            ,0, 0, 0);
+
+    /* have to define O and temperature as many times as we 
+       write them within one step (twice) */
+    for (it=0; it < nblocks_per_step; it++) {
+        adios_define_var (m_adios_group, "O"
+                ,"", adios_integer
+                ,0, 0, 0);
+
+        adios_define_var (m_adios_group, "t"
+                ,"", adios_double
+                ,"NX", "G", "O");
+    }
+
+    for (it =0; it < nsteps; it++) {
+        if (!rank) printf ("Step %d:\n", it);
+        NX = 10+it;
+        G = nblocks_per_step * NX * size;
+
+        t = (double *) malloc (NX*sizeof(double));
+
+        for (i = 0; i < NX; i++)
+            t[i] = rank + it*0.1 + 0.01;
+
+        MPI_Barrier (comm);
+        if (it==0) 
+            adios_open (&m_adios_file, "restart", fname, "w", comm);
+        else
+            adios_open (&m_adios_file, "restart", fname, "a", comm);
+        adios_groupsize = 4 + 4 + 4 + NX * 8
+            + 4 + 4 + 4 + NX * 8;
+        adios_group_size (m_adios_file, adios_groupsize, &adios_totalsize);
+
+        adios_write(m_adios_file, "NX", (void *) &NX);
+        adios_write(m_adios_file, "G", (void *) &G);
+        O = rank * nblocks_per_step * NX;
+        adios_write(m_adios_file, "O", (void *) &O);
+        adios_write(m_adios_file, "t", t);
+
+        printf ("rank %d: block 1: size=%d, offset=%d\n", rank, NX, O);
+        for (r = 0; r < size; r++) {
+            block_count  [it*nblocks_per_step*size + nblocks_per_step*r] = NX; 
+            block_offset [it*nblocks_per_step*size + nblocks_per_step*r] = r * nblocks_per_step * NX; 
+        }
+
+        for (i = 0; i < NX; i++)
+            t[i] += 0.01;
+
+        O = rank * nblocks_per_step * NX + NX;
+        adios_write(m_adios_file, "O", (void *) &O);
+        adios_write(m_adios_file, "t", t);
+
+        printf ("rank %d: block 2: size=%d, offset=%d\n", rank, NX, O);
+        for (r = 0; r < size; r++) {
+            block_count  [it*nblocks_per_step*size + nblocks_per_step*r + 1] = NX; 
+            block_offset [it*nblocks_per_step*size + nblocks_per_step*r + 1] = r * nblocks_per_step * NX + NX; 
+        }
+        gdims [it] = G;
+
+        adios_close (m_adios_file);
+        MPI_Barrier (comm);
+
+        free(t);
+    }
+
+    adios_finalize (rank);
+
+    return 0;
+}
+
+void print_written_info()
+{
+    int s, r, b;
+    printf ("\n------- Information recorded on rank 0 (read will compare to this info)  --------\n");
+    for (s = 0; s < nsteps; s++) {
+        printf ("Step %d:\n", s);
+        printf ("  Global dim = %d\n", gdims[s]);
+        for (r = 0; r < size; r++) {
+            for (b = 0; b < nblocks_per_step; b++) {
+                printf ("  rank %d: block %d: size=%llu, offset=%llu\n", r, b+1, 
+                        block_count  [s*nblocks_per_step*size + nblocks_per_step*r + b],
+                        block_offset [s*nblocks_per_step*size + nblocks_per_step*r + b]
+                       );
+            }
+        }
+    }
+}
+
+int print_varinfo (ADIOS_FILE *f, int start_step) 
+{
+    ADIOS_VARINFO * v;
+    int i,j,k;
+
+    v = adios_inq_var (f, "t");
+    adios_inq_var_blockinfo (f, v);
+
+    printf ("ndim = %d\n",  v->ndim);
+    printf ("dims[%llu]",  v->dims[0]);
+    if (v->dims[0] != gdims[start_step]) 
+    {
+        printf ("\tERROR: expected [%llu]", gdims[start_step]);
+        nerrors++;
+    }
+    printf("\n");
+    printf ("nsteps = %d\n",  v->nsteps);
+    printf ("sum_nblocks = %d\n",  v->sum_nblocks);
+    k = 0; // blockinfo is a contigous 1D array of elements from 0 to v->sum_nblocks-1
+    for (i = 0; i < v->nsteps; i++) {
+        printf ("  nblocks[%d] = %d\n", i, v->nblocks[i]);
+        for (j = 0; j < v->nblocks[i]; j++) {
+            printf("    block %2d: [%llu:%llu]", j,
+                        v->blockinfo[k].start[0],
+                        v->blockinfo[k].start[0] + v->blockinfo[k].count[0]-1);
+            
+            if (v->blockinfo[k].start[0] != block_offset [(start_step+i)*nblocks_per_step*size + j] ||
+                v->blockinfo[k].count[0] != block_count  [(start_step+i)*nblocks_per_step*size + j] ) 
+            {
+                nerrors++;
+                printf ("\tERROR: expected [%llu:%llu]",
+                    block_offset [(start_step+i)*nblocks_per_step*size + j],
+                    block_offset [(start_step+i)*nblocks_per_step*size + j] + 
+                      block_count  [(start_step+i)*nblocks_per_step*size + j] -1
+                );
+            }
+            printf("\n");
+            k++;
+        }
+    }
+    adios_free_varinfo (v);
+}
+
+
+int read_all ()
+{
+        ADIOS_FILE * f;
+        float timeout_sec = 0.0; 
+        int steps = 0;
+    int retval = 0;
+    MPI_Comm    comm = MPI_COMM_SELF;
+
+    adios_read_init_method (ADIOS_READ_METHOD_BP, comm, "verbose=3");
+    printf ("\n--------- Read as file  ------------\n");
+    f = adios_read_open_file (fname, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printf ("Error at opening file: %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else
+    {
+        /* Processing all the steps at once */
+        print_varinfo (f, 0);
+        adios_read_close (f);
+    }
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    return retval;
+}
+
+int read_stepbystep ()
+{
+    ADIOS_FILE * f;
+    float timeout_sec = 0.0; 
+    int steps = 0;
+    int retval = 0;
+    MPI_Comm    comm = MPI_COMM_SELF;
+
+    adios_read_init_method (ADIOS_READ_METHOD_BP, comm, "verbose=3");
+    printf ("\n--------- Read as stream  ------------\n");
+    f = adios_read_open (fname, ADIOS_READ_METHOD_BP,
+                          comm, ADIOS_LOCKMODE_NONE, timeout_sec);
+    if (adios_errno == err_file_not_found)
+    {
+        printf ("Stream not found after waiting %f seconds: %s\n",
+                timeout_sec, adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (adios_errno == err_end_of_stream)
+    {
+        printf ("Stream terminated before open. %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (f == NULL) {
+        printf ("Error at opening stream: %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else
+    {
+        /* Processing loop over the steps (we are already in the first one) */
+        while (adios_errno != err_end_of_stream) {
+            steps++; // steps start counting from 1
+            printf ("Step: %d\n", f->current_step);
+            print_varinfo (f, f->current_step);
+
+            // advance to 1) next available step with 2) blocking wait
+            adios_advance_step (f, 0, timeout_sec);
+            if (adios_errno == err_step_notready)
+            {
+                //printf ("No new step arrived within the timeout. Quit. %s\n",
+                //        adios_errmsg());
+                break; // quit while loop
+            }
+        }
+        adios_read_close (f);
+    }
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    //printf ("We have processed %d steps\n", steps);
+    return retval;
+}
+
+
+
+int print_scalar (ADIOS_FILE *f, char * name) 
+{
+    ADIOS_VARINFO * v;
+    int i,j,k;
+
+    v = adios_inq_var (f, name);
+    adios_inq_var_blockinfo (f, v);
+
+    printf ("Scalar '%s':\n",  name);
+    printf ("nsteps = %d\n",  v->nsteps);
+    printf ("nblocks per step = %d\n",  v->nblocks[0]);
+
+    int err;
+
+    /* Read one writeblock across all timesteps */
+    int *data = (int*) calloc (v->nsteps, sizeof(int));
+    ADIOS_SELECTION *s;
+    printf ("Read same instance across all timesteps:\n");
+    for (i=0; i < v->nblocks[0]; i++) {
+        s = adios_selection_writeblock(i);
+        err = adios_schedule_read_byid(f, s, v->varid, 0, v->nsteps, data);
+        if (!err) 
+        { 
+            err = adios_perform_reads(f, 1);
+            if (!err) 
+            { 
+                err = 0;
+                printf ("  block %d = [",  i);
+                for (j=0; j < v->nsteps; j++) {
+                    printf ("%d", data[j]);
+                    if (data[j] != 
+                        block_offset [j*nblocks_per_step*size + i]) 
+                    {
+                        err = 1;
+                    }
+                    if (j < v->nsteps-1) printf(",");
+                }
+                printf("]");
+
+                if (err) 
+                {
+                    nerrors++;
+                    printf ("\tERROR expected = [");
+                    for (j=0; j < v->nsteps; j++) {
+                        printf ("%llu", block_offset [j*nblocks_per_step*size + i]);
+                        if (j < v->nsteps-1) printf(",");
+                    }
+                    printf("]");
+                }
+                printf("\n");
+
+            } else {
+                printf ("ERROR at reading scalar '%s': %s\n", name, adios_errmsg());
+            } 
+        } else {
+                printf ("ERROR at scheduling read for scalar '%s': %s\n", name, adios_errmsg());
+        }
+        adios_selection_delete(s);
+    }
+
+    /* Now read piecewise, one writeblock at a time */
+    printf ("Read each instance individually:\n");
+    for (j=0; j < v->nsteps; j++) {
+        printf ("  step %d: \n",  j);
+        for (i=0; i < v->nblocks[j]; i++) {
+            s = adios_selection_writeblock(i);
+            err = adios_schedule_read_byid(f, s, v->varid, j, 1, data);
+            if (!err) 
+            { 
+                err = adios_perform_reads(f, 1);
+                if (!err) 
+                { 
+                    printf ("    block %d = %d", i, data[0]);
+                    if (data[0] != 
+                        block_offset [j*nblocks_per_step*size + i]) 
+                    {
+                        printf ("\tERROR expected = %llu", 
+                                block_offset [j*nblocks_per_step*size + i]);
+                        nerrors++;
+                    }
+                    printf ("\n");
+                } else {
+                    printf ("ERROR at reading scalar '%s': %s\n", name, adios_errmsg());
+                } 
+            } else {
+                printf ("ERROR at scheduling read for scalar '%s': %s\n", name, adios_errmsg());
+            }
+            adios_selection_delete(s);
+        }
+    }
+
+    /* Now get them piecewise, but not with reading but through statistics */
+    printf ("Get each instance individually from available statistics:\n");
+    adios_inq_var_stat (f, v, 0, 1);
+    if (v->statistics && v->statistics->blocks) {
+        ADIOS_VARSTAT *stat = v->statistics;
+        int blockid = 0;
+        for (j=0; j < v->nsteps; j++) {
+            printf ("  step %d: \n",  j);
+            for (i=0; i < v->nblocks[j]; i++) {
+                printf ("    block %d = %d", i, *(int*)stat->blocks->mins[blockid]);
+                if (*(int*)stat->blocks->mins[blockid] != 
+                        block_offset [j*nblocks_per_step*size + i]) 
+                {
+                    printf ("\tERROR expected = %llu", 
+                            block_offset [j*nblocks_per_step*size + i]);
+                    nerrors++;
+                }
+                printf ("\n");
+                blockid++;
+            }
+        }
+    }
+
+    adios_free_varinfo (v);
+    free(data);
+}
+
+int read_scalar ()
+{
+    ADIOS_FILE * f;
+    float timeout_sec = 0.0; 
+    int steps = 0;
+    int retval = 0;
+    MPI_Comm    comm = MPI_COMM_SELF;
+
+    adios_read_init_method (ADIOS_READ_METHOD_BP, comm, "verbose=3");
+    printf ("\n--------- Read all instances of the scalar 'O'  ------------\n");
+    f = adios_read_open_file (fname, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printf ("Error at opening file: %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else
+    {
+        /* Read the scalar O with writeblock selection */
+        print_scalar (f, "O");
+        adios_read_close (f);
+    }
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    return retval;
+}
+
+int read_scalar_stepbystep ()
+{
+    ADIOS_FILE * f;
+    float timeout_sec = 0.0; 
+    int steps = 0;
+    int retval = 0;
+    MPI_Comm    comm = MPI_COMM_SELF;
+
+    adios_read_init_method (ADIOS_READ_METHOD_BP, comm, "verbose=3");
+    printf ("\n--------- Read scalar in stream using varinfo->value  ------------\n");
+    f = adios_read_open (fname, ADIOS_READ_METHOD_BP,
+                          comm, ADIOS_LOCKMODE_NONE, timeout_sec);
+    if (adios_errno == err_file_not_found)
+    {
+        printf ("Stream not found after waiting %f seconds: %s\n",
+                timeout_sec, adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (adios_errno == err_end_of_stream)
+    {
+        printf ("Stream terminated before open. %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else if (f == NULL) {
+        printf ("Error at opening stream: %s\n", adios_errmsg());
+        retval = adios_errno;
+    }
+    else
+    {
+        /* Processing loop over the steps (we are already in the first one) */
+        while (adios_errno != err_end_of_stream) {
+            steps++; // steps start counting from 1
+            printf ("Step: %d\n", f->current_step);
+
+            /* Check the scalar O with varinfo->value */
+            ADIOS_VARINFO * v = adios_inq_var (f, "NX");
+            int value =  *(int*)v->value;
+            printf ("Scalar NX = %d", value);
+            if (value != 
+                    block_count [f->current_step*nblocks_per_step*size]) 
+            {
+                printf ("\tERROR expected = %d", 
+                        block_count [f->current_step*nblocks_per_step*size]);
+                nerrors++;
+            }
+            printf ("\n");
+
+            // advance to 1) next available step with 2) blocking wait
+            adios_advance_step (f, 0, timeout_sec);
+            if (adios_errno == err_step_notready)
+            {
+                //printf ("No new step arrived within the timeout. Quit. %s\n",
+                //        adios_errmsg());
+                break; // quit while loop
+            }
+        }
+        adios_read_close (f);
+    }
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    //printf ("We have processed %d steps\n", steps);
+    return retval;
+}
diff --git a/tests/suite/programs/build_standard_dataset.c b/tests/suite/programs/build_standard_dataset.c
new file mode 100644
index 0000000..dd46903
--- /dev/null
+++ b/tests/suite/programs/build_standard_dataset.c
@@ -0,0 +1,767 @@
+/*
+ * build_standard_dataset.c
+ *
+ *  Created on: Sep 26, 2014
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include <adios.h>
+#include <adios_types.h>
+
+// Declaration of all datasets available from this program
+
+typedef void (*dataset_builder_fn)(const char *filename_prefix, const char *transform_name);
+
+typedef struct {
+	const char *name;
+	const char *desc;
+	dataset_builder_fn builder_fn;
+} dataset_info_t;
+
+// Forward declaration of dataset builder functions
+static void build_dataset_1(const char *filename_prefix, const char *transform_name);
+static void build_dataset_2(const char *filename_prefix, const char *transform_name);
+static void build_dataset_3(const char *filename_prefix, const char *transform_name);
+static void build_dataset_unevenpg(const char *filename_prefix, const char *transform_name);
+static void build_dataset_particle(const char *filename_prefix, const char *transform_name);
+
+static const dataset_info_t DATASETS[] = {
+    { .name = "DS-1D", .builder_fn = build_dataset_1,
+      .desc = "A simple, small dataset with a 1D variable 'temp' consisting of 1 PG and 1 timestep" },
+
+    { .name = "DS-2D", .builder_fn = build_dataset_2,
+      .desc = "A simple, small dataset with a 2D (8x8) variable 'temp' decomposed in to 2x8 slices across 2 timesteps (8 PGs total)" },
+
+    { .name = "DS-3D", .builder_fn = build_dataset_3,
+      .desc = "A simple, small dataset with a 3D (4x4x4) variable 'temp' decomposed in to 2x2x2 blocks across 2 timesteps (16 PGs total)" },
+
+    { .name = "DS-particle", .builder_fn = build_dataset_particle,
+      .desc = "A dataset simulating particle data, with a 2D (3x64) 1 variable 'temp' decomposed in 3x32 slices across 2 timesteps (4 PGs total). "
+    		  "A given X coordinate represents a 'variable', as 'variables' in particle datasets are often packed as tuples." },
+    { .name = "DS-unevenpg", .builder_fn = build_dataset_unevenpg,
+      .desc = "A simple, small dataset with a 2D (8x8) variable 'temp' decomposed in to 2x8 slices in the first timestep, and 8x2 slices in the second timestep (8 PGs total)" },
+};
+static const int NUM_DATASETS = sizeof(DATASETS)/sizeof(DATASETS[0]);
+
+// Dataset description/writing code
+
+typedef struct {
+	const char *group_name;
+	unsigned int buffer_size_mb;
+	const char *write_transport_method;
+	int ndim;
+	int nvar;
+	const char **varnames;
+	const enum ADIOS_DATATYPES *vartypes;
+} dataset_xml_spec_t;
+
+// Imported from adios_internal.c
+extern const char * adios_type_to_string_int(int type);                    // converts enum ADIOS_DATATYPES to string
+extern uint64_t adios_get_type_size(enum ADIOS_DATATYPES type, void *var); // returns the size in bytes of a given enum ADIOS_DATATYPES
+
+static void build_dimension_var_list(int ndim, const char *dimvar_base, char *outbuf) {
+	int i;
+	for (i = 0; i < ndim; i++)
+		outbuf += sprintf(outbuf, i == 0 ? "%s%d" : ",%s%d", dimvar_base, i);
+}
+
+static void produce_xml(
+		FILE *outfile,
+		const dataset_xml_spec_t *xml_spec,
+		const char *transform_name)
+{
+	static const char *HEADER_XML =
+	"<?xml version=\"1.0\"?>\n"
+	"<adios-config host-language=\"C\">\n"
+	"	<adios-group name=\"%s\" coordination-communicator=\"comm\">\n";
+
+	static const char *DIMVAR_XML =
+	"		<var name=\"N%d\" type=\"integer\"/>\n"
+	"		<var name=\"D%d\" type=\"integer\"/>\n"
+	"		<var name=\"O%d\" type=\"integer\"/>\n";
+
+	static const char *GLOBALBOUNDS_HEADER_XML =
+	"		<global-bounds dimensions=\"%s\" offsets=\"%s\">\n";
+
+	static const char *VAR_XML =
+	"			<var name=\"%s\" type=\"%s\" dimensions=\"%s\" transform=\"%s\"/>\n";
+
+	static const char *GLOBALBOUNDS_FOOTER_XML =
+	"		</global-bounds>\n";
+
+	static const char *FOOTER_XML =
+	"	</adios-group>\n"
+	"	<method group=\"%s\" method=\"%s\"/>\n"
+	"	<buffer size-MB=\"%u\" allocate-time=\"now\"/>\n"
+	"</adios-config>\n";
+
+	// Actual function begins
+	int i;
+	char dimvar_list_buf1[256]; // for storing D0,D1,D2,...,Dn
+	char dimvar_list_buf2[256]; // for storing D0,D1,D2,...,Dn
+
+	fprintf(outfile, HEADER_XML, xml_spec->group_name);
+	for (i = 0; i < xml_spec->ndim; i++)
+		fprintf(outfile, DIMVAR_XML, i, i, i);
+
+	build_dimension_var_list(xml_spec->ndim, "N", dimvar_list_buf1);
+	build_dimension_var_list(xml_spec->ndim, "O", dimvar_list_buf2);
+	fprintf(outfile, GLOBALBOUNDS_HEADER_XML, dimvar_list_buf1, dimvar_list_buf2);
+
+	for (i = 0; i < xml_spec->nvar; ++i) {
+		build_dimension_var_list(xml_spec->ndim, "D", dimvar_list_buf1);
+		fprintf(outfile, VAR_XML, xml_spec->varnames[i], adios_type_to_string_int(xml_spec->vartypes[i]), dimvar_list_buf1, transform_name);
+	}
+
+	fprintf(outfile, GLOBALBOUNDS_FOOTER_XML);
+	fprintf(outfile, FOOTER_XML, xml_spec->group_name, xml_spec->write_transport_method, xml_spec->buffer_size_mb);
+}
+
+static void write_adios_dimension_scalars(int64_t fd, const char *dimvar_basename, int ndim, const uint64_t *dims) {
+	int i;
+	char dimvar_name[32];
+	for (i = 0; i < ndim; ++i) {
+		sprintf(dimvar_name, "%s%d", dimvar_basename, i);
+		adios_write(fd, dimvar_name, (void*)dims);
+		++dims;
+	}
+}
+
+typedef struct {
+	int num_ts;
+	int num_pgs_per_ts;
+	const uint64_t *global_dims;
+} dataset_global_spec_t;
+
+typedef struct {
+	const uint64_t *pg_dim;
+	const uint64_t *pg_offset;
+	const void **vardata;
+} dataset_pg_spec_t;
+
+static uint64_t dim_prod(int ndim, const uint64_t *dims) {
+	uint64_t pg_gridsize = 1;
+	while (ndim--)
+		pg_gridsize *= *dims++;
+	return pg_gridsize;
+}
+
+static uint64_t compute_groupsize(uint64_t base_groupsize, const dataset_xml_spec_t *xml_spec, const dataset_pg_spec_t *pg) {
+	int var, dim;
+
+	// Compute the number of points contained in this PG
+	uint64_t pg_gridsize = dim_prod(xml_spec->ndim, pg->pg_dim);
+
+	// Compute the sum of the datatype sizes across all variables defined in this PG
+	uint64_t total_var_datatypes_size = 0;
+	for (var = 0; var < xml_spec->nvar; ++var)
+		total_var_datatypes_size += adios_get_type_size(xml_spec->vartypes[var], NULL);
+
+	// The final group size is the product of the number of points and the number of bytes per point, plus the base groupsize
+	return base_groupsize + pg_gridsize * total_var_datatypes_size;
+}
+
+extern void adios_pin_timestep(uint32_t ts); // Not in the standard header, but accessible
+static void build_dataset_from_specs(
+		const char *filename_prefix,
+		const char *transform_name,
+		const dataset_xml_spec_t *xml_spec,
+		const dataset_global_spec_t *global_spec,
+		int num_ts, int num_pgs_per_ts,
+		dataset_pg_spec_t pg_specs[num_ts][num_pgs_per_ts]) // Not const because C has an corner case here (http://c-faq.com/ansi/constmismatch.html)
+{
+	int var;
+	char xml_filename[strlen(filename_prefix) + strlen(".xml") + 1];
+	char bp_filename[strlen(filename_prefix) + strlen(".bp") + 1];
+	int timestep, pg_in_timestep;
+	char dimvar[32];
+
+	// Construct the XML and BP filenames
+	sprintf(xml_filename, "%s.xml", filename_prefix);
+	sprintf(bp_filename, "%s.bp", filename_prefix);
+
+	// Write out the XML file
+	FILE *xml_out = fopen(xml_filename, "w");
+	assert(xml_out);
+	produce_xml(xml_out, xml_spec, transform_name);
+	fclose(xml_out);
+
+	// Write out the BP file
+	adios_init(xml_filename, MPI_COMM_WORLD);
+
+	// Compute the groupsize contribution of the dimension scalars
+	const uint64_t base_groupsize = xml_spec->ndim * 3 * 4; // *3 for 3 scalars (N, D, O) *4 for sizeof(adios_integer) (not sure how what function in the User API to call to get this programatically
+
+	// For each timestep, for each PG in that timestep, write out all variables using the provided vardata buffers
+	int64_t adios_file;
+	for (timestep = 0; timestep < global_spec->num_ts; ++timestep) {
+		for (pg_in_timestep = 0; pg_in_timestep < global_spec->num_pgs_per_ts; ++pg_in_timestep) {
+			// (Re-)open the file in write or append mode, depending on whether or not this is the first PG written
+			const int is_first_pg = (timestep == 0 && pg_in_timestep == 0);
+			adios_open(&adios_file, xml_spec->group_name, bp_filename, is_first_pg ? "w" : "a", MPI_COMM_WORLD);
+
+			// Pin the timestep to allow multiple adios_open/adios_close cycles to write
+			// to the same timestep (this simulates a parallel file write with fewer core)
+			adios_pin_timestep(timestep + 1); // +1 because we want the timesteps to be 1-based
+
+			const dataset_pg_spec_t *pg_spec = &pg_specs[timestep][pg_in_timestep];
+
+			// Compute the group size
+			uint64_t groupsize = compute_groupsize(base_groupsize, xml_spec, pg_spec);
+			uint64_t out_groupsize;
+			adios_group_size(adios_file, groupsize, &out_groupsize);
+
+			write_adios_dimension_scalars(adios_file, "N", xml_spec->ndim, global_spec->global_dims);
+			write_adios_dimension_scalars(adios_file, "D", xml_spec->ndim, pg_spec->pg_dim);
+			write_adios_dimension_scalars(adios_file, "O", xml_spec->ndim, pg_spec->pg_offset);
+
+			// Write each variable
+			for (var = 0; var < xml_spec->nvar; ++var) {
+				adios_write(adios_file, xml_spec->varnames[var], (void*)pg_spec->vardata[var]); // (void*) to get rid of compiler complaining about constness
+			}
+
+			// Close the file to commit it
+			adios_close(adios_file);
+		}
+	}
+}
+
+// NOTE: varblocks_by_var is actually a 1D array varblocks_by_var[var] of 3D "arrays" varblockdata[ts][pg][point_in_pg] of type xml_spec->vartypes[var] (however, points per PG varies)
+static void collect_varblocks_by_pg(
+		const dataset_xml_spec_t *xml_spec,
+		const dataset_global_spec_t *global_spec,
+		int num_ts, int num_pgs_per_ts, int ndim, int nvar,
+		const uint64_t pg_dims[num_ts][num_pgs_per_ts][ndim],
+		const void **varblocks_by_var,
+		const void *out_varblocks_by_pg[num_ts][num_pgs_per_ts][nvar])
+{
+	int ts, pg, var;
+
+	// Some maths
+	const uint64_t varblocks_per_ts = nvar * num_pgs_per_ts;
+
+	// Cache the datatype size for each variable, and create a data pointer that we can advance
+	int var_typesizes[nvar];
+	const char *varblock_datas[nvar];
+	for (var = 0; var < nvar; ++var) {
+		var_typesizes[var] = adios_get_type_size(xml_spec->vartypes[var], NULL);
+		varblock_datas[var] = (const char *)varblocks_by_var[var];
+	}
+
+	// Iterate over all varblocks (var in pg in timestep), get a pointer to the data buffer for that
+	// varblock, and assign it to the proper place in the output array of PG data buffers
+	for (ts = 0; ts < num_ts; ++ts) {
+		for (pg = 0; pg < num_pgs_per_ts; ++pg) {
+			// Compute the points per varblock in this PG
+			const uint64_t points_per_varblock = dim_prod(ndim, pg_dims[ts][pg]);
+
+			for (var = 0; var < nvar; ++var) {
+				const int var_typesize = var_typesizes[var];
+				const uint64_t varblock_size = points_per_varblock * var_typesize;
+
+				// Get the data for this varblock, and advance the pointer by one varblock
+				const char *data_for_varblock = varblock_datas[var];
+				varblock_datas[var] += varblock_size;
+
+				// Finally, assign the pointer
+				out_varblocks_by_pg[ts][pg][var] = data_for_varblock;
+			}
+		}
+	}
+}
+
+// NOTE: pg_dims and pg_offsets are really a 2D arrays pd_dims[pg][dim] of dimension lengths
+// NOTE: pg_datas is really a 2D array pg_datas[pg][var] of varblock buffers
+// NOTE: pg_specs is really a 1D array of pg_specs[pg] of dataset_pg_spec_t's
+static void collect_pg_specs(
+		int num_ts, int num_pgs_per_ts, int ndim, int nvar,
+		const uint64_t pg_dims[num_ts][num_pgs_per_ts][ndim],
+		const uint64_t pg_offsets[num_ts][num_pgs_per_ts][ndim],
+		const void *pg_datas[num_ts][num_pgs_per_ts][nvar],
+		dataset_pg_spec_t pg_specs[num_ts][num_pgs_per_ts]) {
+	int ts, pg;
+	for (ts = 0; ts < num_ts; ++ts) {
+		for (pg = 0; pg < num_pgs_per_ts; ++pg) {
+			pg_specs[ts][pg].pg_dim = pg_dims[ts][pg];
+			pg_specs[ts][pg].pg_offset = pg_offsets[ts][pg];
+			pg_specs[ts][pg].vardata = pg_datas[ts][pg];
+		}
+	}
+}
+
+static void build_dataset_from_varblocks_by_var(
+		const char *filename_prefix,
+		const char *transform_name,
+		const dataset_xml_spec_t *xml_spec,
+		const dataset_global_spec_t *global_spec,
+		int num_ts, int num_pgs_per_ts, int ndim, int nvar,
+		const uint64_t pg_dims[num_ts][num_pgs_per_ts][ndim],
+		const uint64_t pg_offsets[num_ts][num_pgs_per_ts][ndim],
+		const void *varblocks_by_var[nvar])
+{
+	const uint64_t num_pgs = num_ts * num_pgs_per_ts;
+
+	// Array for repackaging global per-variable data in per-PG data
+	const void *varblocks_by_pg[num_ts][num_pgs_per_ts][nvar];
+	// Array for repackaging pieces of per-PG inforamtion into an array of per-PG specification structs
+	dataset_pg_spec_t pg_specs[num_ts][num_pgs_per_ts];
+
+	collect_varblocks_by_pg(
+			xml_spec, global_spec,
+			num_ts, num_pgs_per_ts, ndim, nvar,
+			pg_dims, varblocks_by_var, varblocks_by_pg);
+
+	collect_pg_specs(
+			num_ts, num_pgs_per_ts, ndim, nvar,
+			pg_dims, pg_offsets, varblocks_by_pg, pg_specs);
+
+	build_dataset_from_specs(
+			filename_prefix, transform_name, xml_spec, global_spec,
+			num_ts, num_pgs_per_ts, pg_specs);
+}
+
+
+
+
+
+
+
+static void build_dataset_1(const char *filename_prefix, const char *transform_name) {
+	// Basic dataset information
+	// NOTE: we have to use an anonymous enum here to define these constants, since
+	// C is picky and doesn't consider a static const int "const enough" to use
+	// as an array length (e.g., if these were static const ints, it would not compile)
+	enum {
+		NUM_DIMS = 1,
+		NUM_TS = 1,
+		NUM_PGS_PER_TS = 1,
+		NUM_VARS = 1,
+		NUM_PGS = NUM_TS * NUM_PGS_PER_TS,
+	};
+
+	// Variable names/types
+	static const char *VARNAMES[NUM_VARS]					= { "temp"     };
+	static const enum ADIOS_DATATYPES VARTYPES[NUM_VARS]	= { adios_real };
+
+	// Global and PG dimensions/offsets
+	static const uint64_t GLOBAL_DIMS                         [NUM_DIMS] = { 16 };
+	static const uint64_t PG_DIMS	  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = { { { 16 } } };
+	static const uint64_t PG_OFFSETS  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = { { { 0 } } };
+
+	// Variable data (we can use [TS][PG][16] here because every PG is the same size, 16)
+	static const float TEMP_DATA[NUM_TS][NUM_PGS_PER_TS][16] = {
+		// Timestep 1
+		// PG 0 in timestep 1
+		//  -1.00000000     -1.00003052     2.00000000     2.00006104
+			-0x1.000000p+0, -0x1.000200p+0, 0x1.000000p+1, 0x1.000200p+1,
+		//  2.00012207     -30.00000000    -30.00048828    -30.00097656
+			0x1.000400p+1, -0x1.e00000p+4, -0x1.e00200p+4, -0x1.e00400p+4,
+		//  -30.00146484    50.00000000    50.00097656    50.00195312
+			-0x1.e00600p+4, 0x1.900000p+5, 0x1.900200p+5, 0x1.900400p+5,
+		//  50.00292969    50.00390625    50.00488281    50.00585938
+			0x1.900600p+5, 0x1.900800p+5, 0x1.900a00p+5, 0x1.900c00p+5,
+	};
+
+	static const void *VARBLOCKS_BY_VAR[NUM_VARS] = {
+		TEMP_DATA,
+	};
+
+	// Now, collect all this information into specification structs
+	// File specification
+	static const dataset_xml_spec_t XML_SPEC = {
+		.group_name = "S3D",
+		.buffer_size_mb = 128,
+		.write_transport_method = "MPI",
+		.ndim = NUM_DIMS,
+		.nvar = NUM_VARS,
+		.varnames = VARNAMES,
+		.vartypes = VARTYPES,
+	};
+
+	// Global space specification
+	static const dataset_global_spec_t GLOBAL_SPEC = {
+		.num_ts = NUM_TS,
+		.num_pgs_per_ts = NUM_PGS_PER_TS,
+		.global_dims = GLOBAL_DIMS,
+	};
+
+	// Finally, invoke the dataset builder with this information
+	build_dataset_from_varblocks_by_var(
+			filename_prefix, transform_name, &XML_SPEC, &GLOBAL_SPEC,
+			NUM_TS, NUM_PGS_PER_TS, NUM_DIMS, NUM_VARS,
+			PG_DIMS, PG_OFFSETS, (const void **)VARBLOCKS_BY_VAR);
+}
+
+// Variable data used in datasets 2 and 3
+static const float TEMP_DATA_FOR_DS2_AND_DS3[] = {
+	// Timestep 1
+	-0x1.122f92p-5, 0x1.51e224p-2, -0x1.619b00p-1, 0x1.b0a05ap-2, -0x1.a66e56p-3, 0x1.0021acp-2, -0x1.45eb00p-1, 0x1.ba2cb6p-1,
+	-0x1.34e536p-2, 0x1.985a90p-6, -0x1.75c0a6p-2, 0x1.87e004p-1, -0x1.457d2ap-2, 0x1.15f8c4p-3, -0x1.b53a84p-4, 0x1.8576bep-1,
+	-0x1.4e8798p-4, 0x1.1a16eep-1, -0x1.211a0ep-1, 0x1.7c8df4p-1, -0x1.f6a944p-1, 0x1.c03452p-3, -0x1.d14d2ap-2, 0x1.098d06p-1,
+	-0x1.25ce96p-1, 0x1.1c473ep-1, -0x1.750404p-1, 0x1.41fbc4p-1, -0x1.979e1cp-1, 0x1.2adcccp-1, -0x1.195c60p-2, 0x1.a8c114p-1,
+	-0x1.d3cddep-1, 0x1.ee4930p-1, -0x1.022282p-2, 0x1.eb4ba0p-4, -0x1.b9681ap-3, 0x1.c6fc40p-1, -0x1.f7962ap-1, 0x1.08cca2p-1,
+	-0x1.d3bf16p-1, 0x1.64ecfap-2, -0x1.21594cp-2, 0x1.d9f6a6p-3, -0x1.efe95cp-2, 0x1.8ea7eep-2, -0x1.fbf468p-1, 0x1.21c5a2p-1,
+	-0x1.e16ae6p-1, 0x1.1d0e76p-1, -0x1.3ca72ap-2, 0x1.d8142ap-1, -0x1.8d1b8ap-1, 0x1.86fa2ap-1, -0x1.c3425ep-2, 0x1.65d43ep-2,
+	-0x1.4682d0p-2, 0x1.5a94cap-3, -0x1.f4e5e4p-1, 0x1.d6fc1cp-4, -0x1.818200p-1, 0x1.032826p-2, -0x1.e3a098p-1, 0x1.554fdep-1,
+	// Timestep 2
+	-0x1.554fdep-1, 0x1.e3a098p-1, -0x1.032826p-2, 0x1.818200p-1, -0x1.d6fc1cp-4, 0x1.f4e5e4p-1, -0x1.5a94cap-3, 0x1.4682d0p-2,
+	-0x1.65d43ep-2, 0x1.c3425ep-2, -0x1.86fa2ap-1, 0x1.8d1b8ap-1, -0x1.d8142ap-1, 0x1.3ca72ap-2, -0x1.1d0e76p-1, 0x1.e16ae6p-1,
+	-0x1.21c5a2p-1, 0x1.fbf468p-1, -0x1.8ea7eep-2, 0x1.efe95cp-2, -0x1.d9f6a6p-3, 0x1.21594cp-2, -0x1.64ecfap-2, 0x1.d3bf16p-1,
+	-0x1.08cca2p-1, 0x1.f7962ap-1, -0x1.c6fc40p-1, 0x1.b9681ap-3, -0x1.eb4ba0p-4, 0x1.022282p-2, -0x1.ee4930p-1, 0x1.d3cddep-1,
+	-0x1.a8c114p-1, 0x1.195c60p-2, -0x1.2adcccp-1, 0x1.979e1cp-1, -0x1.41fbc4p-1, 0x1.750404p-1, -0x1.1c473ep-1, 0x1.25ce96p-1,
+	-0x1.098d06p-1, 0x1.d14d2ap-2, -0x1.c03452p-3, 0x1.f6a944p-1, -0x1.7c8df4p-1, 0x1.211a0ep-1, -0x1.1a16eep-1, 0x1.4e8798p-4,
+	-0x1.8576bep-1, 0x1.b53a84p-4, -0x1.15f8c4p-3, 0x1.457d2ap-2, -0x1.87e004p-1, 0x1.75c0a6p-2, -0x1.985a90p-6, 0x1.34e536p-2,
+	-0x1.ba2cb6p-1, 0x1.45eb00p-1, -0x1.0021acp-2, 0x1.a66e56p-3, -0x1.b0a05ap-2, 0x1.619b00p-1, -0x1.51e224p-2, 0x1.122f92p-5,
+};
+
+static void build_dataset_2(const char *filename_prefix, const char *transform_name) {
+	// Basic dataset information
+	// NOTE: we have to use an anonymous enum here to define these constants, since
+	// C is picky and doesn't consider a static const int "const enough" to use
+	// as an array length (e.g., if these were static const ints, it would not compile)
+	enum {
+		NUM_DIMS = 2,
+		NUM_TS = 2,
+		NUM_PGS_PER_TS = 4,
+		NUM_VARS = 1,
+		NUM_PGS = NUM_TS * NUM_PGS_PER_TS,
+	};
+
+	// Variable names/types
+	static const char *VARNAMES[NUM_VARS]					= { "temp"     };
+	static const enum ADIOS_DATATYPES VARTYPES[NUM_VARS]	= { adios_real };
+
+	// Global and PG dimensions/offsets
+	static const uint64_t GLOBAL_DIMS                         [NUM_DIMS] = { 8, 8 };
+	static const uint64_t PG_DIMS	  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 2, 8 }, { 2, 8 }, { 2, 8 }, { 2, 8 }, }, // Timestep 1
+		{ { 2, 8 }, { 2, 8 }, { 2, 8 }, { 2, 8 }, }, // Timestep 2
+	};
+	static const uint64_t PG_OFFSETS  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 0, 0 }, { 2, 0 }, { 4, 0 }, { 6, 0 }, }, // Timestep 1
+		{ { 0, 0 }, { 2, 0 }, { 4, 0 }, { 6, 0 }, }, // Timestep 2
+	};
+
+	static const void *VARBLOCKS_BY_VAR[NUM_VARS] = {
+		TEMP_DATA_FOR_DS2_AND_DS3,
+	};
+
+	// Now, collect all this information into specification structs
+	// File specification
+	static const dataset_xml_spec_t XML_SPEC = {
+		.group_name = "S3D",
+		.buffer_size_mb = 128,
+		.write_transport_method = "MPI",
+		.ndim = NUM_DIMS,
+		.nvar = NUM_VARS,
+		.varnames = VARNAMES,
+		.vartypes = VARTYPES,
+	};
+
+	// Global space specification
+	static const dataset_global_spec_t GLOBAL_SPEC = {
+		.num_ts = NUM_TS,
+		.num_pgs_per_ts = NUM_PGS_PER_TS,
+		.global_dims = GLOBAL_DIMS,
+	};
+
+	// Finally, invoke the dataset builder with this information
+	build_dataset_from_varblocks_by_var(
+			filename_prefix, transform_name, &XML_SPEC, &GLOBAL_SPEC,
+			NUM_TS, NUM_PGS_PER_TS, NUM_DIMS, NUM_VARS,
+			PG_DIMS, PG_OFFSETS, (const void **)VARBLOCKS_BY_VAR);
+}
+
+static void build_dataset_3(const char *filename_prefix, const char *transform_name) {
+	// Basic dataset information
+	// NOTE: we have to use an anonymous enum here to define these constants, since
+	// C is picky and doesn't consider a static const int "const enough" to use
+	// as an array length (e.g., if these were static const ints, it would not compile)
+	enum {
+		NUM_DIMS = 3,
+		NUM_TS = 2,
+		NUM_PGS_PER_TS = 8,
+		NUM_VARS = 1,
+		NUM_PGS = NUM_TS * NUM_PGS_PER_TS,
+	};
+
+	// Variable names/types
+	static const char *VARNAMES[NUM_VARS]					= { "temp"     };
+	static const enum ADIOS_DATATYPES VARTYPES[NUM_VARS]	= { adios_real };
+
+	// Global and PG dimensions/offsets
+	static const uint64_t GLOBAL_DIMS                         [NUM_DIMS] = { 4, 4, 4 };
+	static const uint64_t PG_DIMS	  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, }, // Timestep 1
+		{ { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, { 2, 2, 2 }, }, // Timestep 2
+	};
+	static const uint64_t PG_OFFSETS  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 0, 0, 0 }, { 0, 0, 2 }, { 0, 2, 0 }, { 0, 2, 2 }, { 2, 0, 0 }, { 2, 0, 2 }, { 2, 2, 0 }, { 2, 2, 2 }, }, // Timestep 1
+		{ { 0, 0, 0 }, { 0, 0, 2 }, { 0, 2, 0 }, { 0, 2, 2 }, { 2, 0, 0 }, { 2, 0, 2 }, { 2, 2, 0 }, { 2, 2, 2 }, }, // Timestep 2
+	};
+
+	static const void *VARBLOCKS_BY_VAR[NUM_VARS] = {
+		TEMP_DATA_FOR_DS2_AND_DS3,
+	};
+
+	// Now, collect all this information into specification structs
+	// File specification
+	static const dataset_xml_spec_t XML_SPEC = {
+		.group_name = "S3D",
+		.buffer_size_mb = 128,
+		.write_transport_method = "MPI",
+		.ndim = NUM_DIMS,
+		.nvar = NUM_VARS,
+		.varnames = VARNAMES,
+		.vartypes = VARTYPES,
+	};
+
+	// Global space specification
+	static const dataset_global_spec_t GLOBAL_SPEC = {
+		.num_ts = NUM_TS,
+		.num_pgs_per_ts = NUM_PGS_PER_TS,
+		.global_dims = GLOBAL_DIMS,
+	};
+
+	// Finally, invoke the dataset builder with this information
+	build_dataset_from_varblocks_by_var(
+			filename_prefix, transform_name, &XML_SPEC, &GLOBAL_SPEC,
+			NUM_TS, NUM_PGS_PER_TS, NUM_DIMS, NUM_VARS,
+			PG_DIMS, PG_OFFSETS, (const void **)VARBLOCKS_BY_VAR);
+}
+
+static void build_dataset_particle(const char *filename_prefix, const char *transform_name) {
+	// Basic dataset information
+	// NOTE: we have to use an anonymous enum here to define these constants, since
+	// C is picky and doesn't consider a static const int "const enough" to use
+	// as an array length (e.g., if these were static const ints, it would not compile)
+	enum {
+		NUM_DIMS = 2,
+		NUM_TS = 2,
+		NUM_PGS_PER_TS = 2,
+		NUM_VARS = 1,
+		NUM_PGS = NUM_TS * NUM_PGS_PER_TS,
+	};
+
+	// Variable names/types
+	static const char *VARNAMES[NUM_VARS]					= { "temp"     };
+	static const enum ADIOS_DATATYPES VARTYPES[NUM_VARS]	= { adios_real };
+
+	// Global and PG dimensions/offsets
+	static const uint64_t GLOBAL_DIMS                         [NUM_DIMS] = { 3, 64 };
+	static const uint64_t PG_DIMS	  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = { 
+		{ { 3, 32 }, { 3, 32 } },
+		{ { 3, 32 }, { 3, 32 } }
+	};
+	static const uint64_t PG_OFFSETS  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 0, 0 }, { 0, 32 }, },
+		{ { 0, 0 }, { 0, 32 }, },
+	};
+
+	// Variable data (we can use [TS][PG][96] here because every PG is the same size, 96)
+	static const float TEMP_DATA[NUM_TS][NUM_PGS_PER_TS][96] = {
+		// Timestep 1
+		// PG 0 in timestep 1
+                -10.033470,   10.329965,   -10.690636,   10.422486,   -10.206265,   10.250129,   -10.636559,   10.863623,
+                -10.301656,   10.024924,   -10.364993,   10.765381,   -10.317861,   10.135729,   -10.106746,   10.760672,
+                -10.081673,   10.550956,   -10.564651,   10.743271,   -10.981760,   10.218850,   -10.454396,   10.518654,
+                -10.573842,   10.555231,   -10.728546,   10.628874,   -10.796128,   10.583715,   -10.274767,   10.829598,
+                -10.913680,   10.965403,   -10.252085,   10.119946,   -10.215530,   10.888643,   -10.983567,   10.517186,
+                -10.913568,   10.348560,   -10.282567,   10.231427,   -10.484288,   10.389313,   -10.992099,   10.565961,
+                -10.940269,   10.556751,   -10.309232,   10.922029,   -10.775600,   10.763627,   -10.440682,   10.349442,
+                -10.318858,   10.169230,   -10.978316,   10.114986,   -10.752945,   10.253083,   -10.944585,   10.666625,
+                -100.033470,  100.329964,  -100.690636,  100.422485,  -100.206268,  100.250130,  -100.636559,  100.863625,
+                -100.301659,  100.024925,  -100.364990,  100.765381,  -100.317863,  100.135727,  -100.106743,  100.760674,
+                -100.081673,  100.550957,  -100.564651,  100.743271,  -100.981758,  100.218849,  -100.454399,  100.518654,
+                -100.573845,  100.555229,  -100.728546,  100.628876,  -100.796127,  100.583717,  -100.274765,  100.829597,
+        // PG 1 in timestep 1
+                -100.913681,  100.965401,  -100.252083,  100.119942,  -100.215530,  100.888641,  -100.983566,  100.517189,
+                -100.913567,  100.348557,  -100.282570,  100.231430,  -100.484291,  100.389313,  -100.992096,  100.565964,
+                -100.940269,  100.556747,  -100.309235,  100.922028,  -100.775604,  100.763626,  -100.440681,  100.349442,
+                -100.318855,  100.169228,  -100.978317,  100.114990,  -100.752945,  100.253082,  -100.944588,  100.666626,
+                -1000.033447, 1000.329956, -1000.690613, 1000.422485, -1000.206238, 1000.250122, -1000.636536, 1000.863647,
+                -1000.301636, 1000.024902, -1000.364990, 1000.765381, -1000.317871, 1000.135742, -1000.106750, 1000.760681,
+                -1000.081665, 1000.550964, -1000.564636, 1000.743286, -1000.981750, 1000.218872, -1000.454407, 1000.518677,
+                -1000.573853, 1000.555237, -1000.728577, 1000.628845, -1000.796143, 1000.583740, -1000.274780, 1000.829590,
+                -1000.913696, 1000.965393, -1000.252075, 1000.119934, -1000.215515, 1000.888672, -1000.983582, 1000.517212,
+                -1000.913574, 1000.348572, -1000.282593, 1000.231445, -1000.484314, 1000.389282, -1000.992126, 1000.565979,
+                -1000.940247, 1000.556763, -1000.309204, 1000.922058, -1000.775574, 1000.763611, -1000.440674, 1000.349426,
+                -1000.318848, 1000.169250, -1000.978333, 1000.114990, -1000.752930, 1000.253113, -1000.944580, 1000.666626,
+		
+        // Timestep 2
+		// PG 0 in timestep 2
+                -10.218485,   10.196670,   -10.786571,   10.434015,   -10.085313,   10.770138,   -10.951201,   10.998879,
+                -10.118698,   10.233769,   -10.230308,   10.602986,   -10.623081,   10.222406,   -10.168947,   10.563350,
+                -10.779158,   10.478179,   -10.485379,   10.554758,   -10.241806,   10.926062,   -10.904201,   10.560665,
+                -10.095291,   10.882517,   -10.675652,   10.848236,   -10.135600,   10.620235,   -10.514861,   10.354085,
+                -10.816905,   10.301431,   -10.788100,   10.902218,   -10.071568,   10.739302,   -10.901097,   10.190267,
+                -10.973071,   10.131405,   -10.793253,   10.596152,   -10.353811,   10.962200,   -10.159503,   10.132969,
+                -10.440379,   10.644882,   -10.687727,   10.682186,   -10.570944,   10.591928,   -10.242850,   10.666235,
+                -10.474444,   10.918502,   -10.514470,   10.610044,   -10.538737,   10.029331,   -10.964128,   10.355642,
+                -100.218483,  100.196671,  -100.786568,  100.434013,  -100.085312,  100.770134,  -100.951202,  100.998878,
+                -100.118698,  100.233772,  -100.230309,  100.602989,  -100.623085,  100.222404,  -100.168945,  100.563347,
+                -100.779160,  100.478180,  -100.485382,  100.554756,  -100.241806,  100.926064,  -100.904198,  100.560661,
+                -100.095291,  100.882515,  -100.675652,  100.848236,  -100.135597,  100.620239,  -100.514862,  100.354088,
+        // PG 1 in timestep 2
+                -100.816902,  100.301430,  -100.788101,  100.902214,  -100.071571,  100.739304,  -100.901100,  100.190269,
+                -100.973068,  100.131409,  -100.793251,  100.596153,  -100.353813,  100.962204,  -100.159500,  100.132965,
+                -100.440376,  100.644882,  -100.687729,  100.682182,  -100.570946,  100.591927,  -100.242851,  100.666237,
+                -100.474442,  100.918503,  -100.514473,  100.610046,  -100.538734,  100.029327,  -100.964127,  100.355644,
+                -1000.218506, 1000.196655, -1000.786560, 1000.434021, -1000.085327, 1000.770142, -1000.951172, 1000.998901,
+                -1000.118713, 1000.233765, -1000.230286, 1000.602966, -1000.623108, 1000.222412, -1000.168945, 1000.563354,
+                -1000.779175, 1000.478149, -1000.485352, 1000.554749, -1000.241821, 1000.926086, -1000.904175, 1000.560669,
+                -1000.095276, 1000.882507, -1000.675659, 1000.848206, -1000.135620, 1000.620239, -1000.514832, 1000.354065,
+                -1000.816895, 1000.301453, -1000.788086, 1000.902222, -1000.071594, 1000.739319, -1000.901123, 1000.190247,
+                -1000.973083, 1000.131409, -1000.793274, 1000.596130, -1000.353821, 1000.962219, -1000.159485, 1000.132996,
+                -1000.440369, 1000.644897, -1000.687744, 1000.682190, -1000.570923, 1000.591919, -1000.242859, 1000.666260,
+                -1000.474426, 1000.918518, -1000.514465, 1000.610046, -1000.538757, 1000.029358, -1000.964111, 1000.355652,
+	};
+
+	static const void *VARBLOCKS_BY_VAR[NUM_VARS] = {
+		TEMP_DATA
+	};
+
+	// Now, collect all this information into specification structs
+	// File specification
+	static const dataset_xml_spec_t XML_SPEC = {
+		.group_name = "S3D",
+		.buffer_size_mb = 128,
+		.write_transport_method = "MPI",
+		.ndim = NUM_DIMS,
+		.nvar = NUM_VARS,
+		.varnames = VARNAMES,
+		.vartypes = VARTYPES,
+	};
+
+	// Global space specification
+	static const dataset_global_spec_t GLOBAL_SPEC = {
+		.num_ts = NUM_TS,
+		.num_pgs_per_ts = NUM_PGS_PER_TS,
+		.global_dims = GLOBAL_DIMS,
+	};
+
+	// Finally, invoke the dataset builder with this information
+	build_dataset_from_varblocks_by_var(
+			filename_prefix, transform_name, &XML_SPEC, &GLOBAL_SPEC,
+			NUM_TS, NUM_PGS_PER_TS, NUM_DIMS, NUM_VARS,
+			PG_DIMS, PG_OFFSETS, (const void **)VARBLOCKS_BY_VAR);
+}
+
+static void build_dataset_unevenpg(const char *filename_prefix, const char *transform_name) {
+        // Copied with only pg dim and offset  modification from ds2
+	// Basic dataset information
+	// NOTE: we have to use an anonymous enum here to define these constants, since
+	// C is picky and doesn't consider a static const int "const enough" to use
+	// as an array length (e.g., if these were static const ints, it would not compile)
+	enum {
+		NUM_DIMS = 2,
+		NUM_TS = 2,
+		NUM_PGS_PER_TS = 4,
+		NUM_VARS = 1,
+		NUM_PGS = NUM_TS * NUM_PGS_PER_TS,
+	};
+
+	// Variable names/types
+	static const char *VARNAMES[NUM_VARS]					= { "temp"     };
+	static const enum ADIOS_DATATYPES VARTYPES[NUM_VARS]	= { adios_real };
+
+	// Global and PG dimensions/offsets
+	static const uint64_t GLOBAL_DIMS                         [NUM_DIMS] = { 8, 8 };
+	static const uint64_t PG_DIMS	  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 2, 8 }, { 2, 8 }, { 2, 8 }, { 2, 8 }, }, // Timestep 1
+		{ { 8, 2 }, { 8, 2 }, { 8, 2 }, { 8, 2 }, }, // Timestep 2
+	};
+	static const uint64_t PG_OFFSETS  [NUM_TS][NUM_PGS_PER_TS][NUM_DIMS] = {
+		{ { 0, 0 }, { 2, 0 }, { 4, 0 }, { 6, 0 }, }, // Timestep 1
+		{ { 0, 0 }, { 0, 2 }, { 0, 4 }, { 0, 6 }, }, // Timestep 2
+	};
+
+	static const void *VARBLOCKS_BY_VAR[NUM_VARS] = {
+		TEMP_DATA_FOR_DS2_AND_DS3,
+	};
+
+	// Now, collect all this information into specification structs
+	// File specification
+	static const dataset_xml_spec_t XML_SPEC = {
+		.group_name = "S3D",
+		.buffer_size_mb = 128,
+		.write_transport_method = "MPI",
+		.ndim = NUM_DIMS,
+		.nvar = NUM_VARS,
+		.varnames = VARNAMES,
+		.vartypes = VARTYPES,
+	};
+
+	// Global space specification
+	static const dataset_global_spec_t GLOBAL_SPEC = {
+		.num_ts = NUM_TS,
+		.num_pgs_per_ts = NUM_PGS_PER_TS,
+		.global_dims = GLOBAL_DIMS,
+	};
+
+	// Finally, invoke the dataset builder with this information
+	build_dataset_from_varblocks_by_var(
+			filename_prefix, transform_name, &XML_SPEC, &GLOBAL_SPEC,
+			NUM_TS, NUM_PGS_PER_TS, NUM_DIMS, NUM_VARS,
+			PG_DIMS, PG_OFFSETS, (const void **)VARBLOCKS_BY_VAR);
+}
+
+
+
+
+
+
+static void usage_and_exit() {
+	int i;
+	fprintf(stderr, "Usage: build_standard_dataset <dataset-id> <filename-prefix> [<transform-type>]\n");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "  dataset-id: the ID of a standard dataset packaged in this executable:\n");
+	fprintf(stderr, "    - 'DS1': 1 variable, 2D array of floats\n");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "  filename-prefix: the filename prefix for the XML and BP files to be generated.\n");
+	fprintf(stderr, "    - Example: filename-prefix = 'some/path/myfile':\n");
+	fprintf(stderr, "            -> produces some/path/myfile.xml, some/path/myfile.bp:\n");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "  transform-type: the data transform to apply (default: none). May include\n");
+	fprintf(stderr, "                  transform parameters, just like in an ADIOS XML file.");
+	fprintf(stderr, "\n");
+	fprintf(stderr, "Available datasets:\n");
+	for (i = 0; i < NUM_DATASETS; ++i)
+		fprintf(stderr, "- \"%s\": %s\n", DATASETS[i].name, DATASETS[i].desc);
+	exit(1);
+}
+
+int main(int argc, char **argv) {
+	if (argc < 3 || argc > 4)
+		usage_and_exit();
+
+	const char *dataset_id = argv[1];
+	const char *path = argv[2];
+	const char *transform_name = (argc >= 4) ? argv[3] : "none";
+
+	int i;
+	const dataset_info_t *dataset = NULL;
+	for (i = 0; i < NUM_DATASETS; ++i)
+		if (strcasecmp(dataset_id, DATASETS[i].name) == 0)
+			dataset = &DATASETS[i];
+
+	if (dataset == NULL) {
+		fprintf(stderr, "Error: '%s' does not name a dataset packaged in this executable\n");
+		usage_and_exit();
+	}
+
+	MPI_Init(&argc, &argv);
+
+	// Invoke the builder function for the selected dataset
+	(*dataset->builder_fn)(path, transform_name);
+
+	MPI_Finalize();
+	return 0;
+}
diff --git a/tests/suite/programs/connect_to_space_subset.c b/tests/suite/programs/connect_to_space_subset.c
index fcb1027..d518bae 100644
--- a/tests/suite/programs/connect_to_space_subset.c
+++ b/tests/suite/programs/connect_to_space_subset.c
@@ -18,7 +18,6 @@
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/copy_subvolume.c b/tests/suite/programs/copy_subvolume.c
index 2919912..cfb4acc 100644
--- a/tests/suite/programs/copy_subvolume.c
+++ b/tests/suite/programs/copy_subvolume.c
@@ -4,7 +4,7 @@
 #include <string.h>
 #include <assert.h>
 
-#include "adios_types.h"
+#include "public/adios_types.h"
 #include "core/adios_subvolume.h"
 
 // Uncomment to print all data volumes (original, intermediate, and final)
diff --git a/tests/suite/programs/group_free_test.c b/tests/suite/programs/group_free_test.c
index da72edd..9aa1a5a 100644
--- a/tests/suite/programs/group_free_test.c
+++ b/tests/suite/programs/group_free_test.c
@@ -17,8 +17,9 @@
 
 /* This example will create 3 adios groups for writing, then frees them.
 */
-
+#ifndef _NOMPI
 #define _NOMPI
+#endif
 
 #include <stdio.h>
 #include <string.h>
diff --git a/tests/suite/programs/local_array_time.c b/tests/suite/programs/local_array_time.c
index 2669446..648fd01 100644
--- a/tests/suite/programs/local_array_time.c
+++ b/tests/suite/programs/local_array_time.c
@@ -16,10 +16,8 @@
 #include <time.h>
 #include <fcntl.h>
 #include <stdint.h>
-#include <mpi.h>
 
 /* ADIOS include files */
-//#include "mpi.h"
 #include "adios.h"
 
 /* ------------------ Global variables (for main.c only) ------------------ */
diff --git a/tests/suite/programs/many_vars.c b/tests/suite/programs/many_vars.c
index b7ce52b..ea89543 100644
--- a/tests/suite/programs/many_vars.c
+++ b/tests/suite/programs/many_vars.c
@@ -18,7 +18,6 @@
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/path_test.c b/tests/suite/programs/path_test.c
index e36c95f..46af066 100644
--- a/tests/suite/programs/path_test.c
+++ b/tests/suite/programs/path_test.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/reuse_dim.c b/tests/suite/programs/reuse_dim.c
index 9e3fd23..7f79d8c 100755
--- a/tests/suite/programs/reuse_dim.c
+++ b/tests/suite/programs/reuse_dim.c
@@ -23,7 +23,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/selections.c b/tests/suite/programs/selections.c
index 187e476..637203f 100644
--- a/tests/suite/programs/selections.c
+++ b/tests/suite/programs/selections.c
@@ -18,7 +18,6 @@
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
@@ -195,6 +194,7 @@ int main (int argc, char ** argv)
                 sleep(1);
             }
         }
+        adios_free_group (m_adios_group);
     }
 
     if (!err && do_read)
@@ -479,6 +479,10 @@ endread:
     adios_selection_delete (sel2);
     adios_selection_delete (sel3);
 
+    free(pts1);
+    free(pts2);
+    free(pts3);
+
     adios_read_close(f);
     MPI_Barrier (comm);
     return err;
diff --git a/tests/suite/programs/set_path.c b/tests/suite/programs/set_path.c
index d7c588b..a8562c4 100644
--- a/tests/suite/programs/set_path.c
+++ b/tests/suite/programs/set_path.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/set_path.xml b/tests/suite/programs/set_path.xml
new file mode 100644
index 0000000..7dc8463
--- /dev/null
+++ b/tests/suite/programs/set_path.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+
+    <adios-group name="abc" coordination-communicator="comm" time-index="tidx">
+        <!-- dimension variables (scalars) -->
+        <var name="gdim1" type="integer"/>
+        <var name="ldim1" type="integer"/>
+        <var name="offs1" type="integer"/>
+
+        <!-- Scalars -->
+        <var name="s0"  type="integer"/>
+
+        <!-- 1D Arrays -->
+        <global-bounds dimensions="gdim1" offsets="offs1">
+            <var name="a1" dimensions="ldim1" type="integer"/>
+        </global-bounds>
+
+        <attribute name="description" type="string" path="/test"
+                   value="Output from testing adios_set_path()" />
+
+    </adios-group>
+
+<method group="abc" method="MPI"/>
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/suite/programs/set_path_var.c b/tests/suite/programs/set_path_var.c
index 84456cc..4bdb5ca 100644
--- a/tests/suite/programs/set_path_var.c
+++ b/tests/suite/programs/set_path_var.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/set_path_var.xml b/tests/suite/programs/set_path_var.xml
new file mode 100644
index 0000000..44f700c
--- /dev/null
+++ b/tests/suite/programs/set_path_var.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+
+    <adios-group name="abc" coordination-communicator="comm" time-index="tidx">
+        <!-- dimension variables (scalars) -->
+        <var name="gdim1" type="integer"/>
+        <var name="ldim1" type="integer"/>
+        <var name="offs1" type="integer"/>
+
+        <!-- Scalars -->
+        <var name="s0"  type="integer"/>
+
+        <!-- 1D Arrays -->
+        <global-bounds dimensions="gdim1" offsets="offs1">
+            <var name="a1" dimensions="ldim1" type="integer"/>
+        </global-bounds>
+
+    </adios-group>
+
+<method group="abc" method="MPI"/>
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/suite/programs/steps_read_file.c b/tests/suite/programs/steps_read_file.c
index aaf7d4d..ab7e773 100644
--- a/tests/suite/programs/steps_read_file.c
+++ b/tests/suite/programs/steps_read_file.c
@@ -15,7 +15,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios_read.h"
 #include "adios_error.h"
 
diff --git a/tests/suite/programs/steps_read_stream.c b/tests/suite/programs/steps_read_stream.c
index 1edbf06..7d78f3b 100644
--- a/tests/suite/programs/steps_read_stream.c
+++ b/tests/suite/programs/steps_read_stream.c
@@ -15,7 +15,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
-#include "mpi.h"
 #include "adios_read.h"
 #include "adios_error.h"
 
diff --git a/tests/suite/programs/steps_write.c b/tests/suite/programs/steps_write.c
index f27b2b8..5738069 100644
--- a/tests/suite/programs/steps_write.c
+++ b/tests/suite/programs/steps_write.c
@@ -4,7 +4,6 @@
 
 #include <stdio.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_types.h"
 
diff --git a/tests/suite/programs/transforms_writeblock_read.c b/tests/suite/programs/transforms_writeblock_read.c
new file mode 100644
index 0000000..204392f
--- /dev/null
+++ b/tests/suite/programs/transforms_writeblock_read.c
@@ -0,0 +1,129 @@
+/*
+ * transforms_writeblock_read.c
+ *
+ *  Created on: Oct 15, 2014
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <assert.h>
+
+#include <adios_read.h>
+
+#define SHIFT_N(n) { argc -= (n); argv += (n); }
+#define SHIFT SHIFT_N(1)
+
+#define MPI_Assert(comm, check) { if (!(check)) { fprintf(stderr, "[rank %d/%d] Assertion '" #check "' failed\n", rank, size); MPI_Abort((comm), 1); abort(); } }
+
+static const MPI_Comm COMM = MPI_COMM_WORLD;
+static int rank, size;
+
+static void test_file_mode_reads_on_var(ADIOS_FILE *fp, const char *bp_filename, const char *varname) {
+	int i;
+
+	ADIOS_VARINFO *varinfo = adios_inq_var(fp, varname);
+	MPI_Assert(COMM, varinfo);
+
+	if (varinfo->value != NULL) {
+		//if (rank == 0) fprintf(stderr, "(skipping scalar variable '%s')\n", varname);
+		adios_free_varinfo(varinfo);
+		return;
+	}
+
+	fprintf(stderr, "[rank %d/%d] Starting file-mode writeblock reads on %s:/%s\n", rank, size, bp_filename, varname);
+
+	adios_inq_var_blockinfo(fp, varinfo);
+	MPI_Assert(COMM, varinfo->blockinfo);
+
+	const enum ADIOS_DATATYPES datatype = varinfo->type;
+	const int datatypesize = adios_get_type_size(datatype, NULL);
+
+	int timestep, timestep_blockidx, blockidx = 0;
+	for (timestep = 0; timestep < varinfo->nsteps; ++timestep) {
+		for (timestep_blockidx = 0; timestep_blockidx < varinfo->nblocks[timestep]; ++timestep_blockidx, ++blockidx) {
+			if (blockidx % size != rank) continue;
+
+			const ADIOS_VARBLOCK *vb = &varinfo->blockinfo[blockidx];
+
+			ADIOS_SELECTION *block_bb = adios_selection_boundingbox(varinfo->ndim, vb->start, vb->count);
+			ADIOS_SELECTION *block_wb = adios_selection_writeblock(timestep_blockidx);
+			ADIOS_SELECTION *block_abs_wb = adios_selection_writeblock(blockidx);
+			block_abs_wb->u.block.is_absolute_index = 1;
+
+			uint64_t blocksize = datatypesize;
+			for (i = 0; i < varinfo->ndim; ++i)
+				blocksize *= vb->count[i];
+
+			void *buf_bb = malloc(blocksize);
+			void *buf_wb = malloc(blocksize);
+			void *buf_abs_wb = malloc(blocksize);
+			memset(buf_bb,     0, blocksize);
+			memset(buf_wb,     1, blocksize);
+			memset(buf_abs_wb, 2, blocksize);
+			MPI_Assert(COMM, buf_bb && buf_wb && buf_abs_wb);
+
+			adios_schedule_read(fp, block_bb,     varname, timestep, 1, buf_bb    );
+			adios_schedule_read(fp, block_wb,     varname, timestep, 1, buf_wb    );
+			adios_schedule_read(fp, block_abs_wb, varname, timestep, 1, buf_abs_wb);
+			adios_perform_reads(fp, 1);
+
+			fprintf(stderr, "[rank %d/%d] Checking file-mode blockidx %d BB vs. WB...\n", rank, size, blockidx);
+			MPI_Assert(COMM, memcmp(buf_bb, buf_wb, blocksize) == 0);
+			fprintf(stderr, "[rank %d/%d] Checking file-mode blockidx %d BB vs. abs-WB...\n", rank, size, blockidx);
+			MPI_Assert(COMM, memcmp(buf_bb, buf_abs_wb, blocksize) == 0);
+
+			free(buf_bb); free(buf_wb); free(buf_abs_wb);
+			adios_selection_delete(block_bb);
+			adios_selection_delete(block_wb);
+			adios_selection_delete(block_abs_wb);
+		}
+	}
+
+	adios_free_varinfo(varinfo);
+
+	fprintf(stderr, "[rank %d/%d] Finished file-mode writeblock reads on %s:/%s\n", rank, size, bp_filename, varname);
+}
+
+static void test_file_mode_reads(const char *bp_filename) {
+	int i;
+	ADIOS_FILE *fp = adios_read_open_file(bp_filename, ADIOS_READ_METHOD_BP, COMM);
+	MPI_Assert(COMM, fp);
+
+	fprintf(stderr, "[rank %d/%d] Starting file-mode writeblock reads on %s\n", rank, size, bp_filename);
+
+	for (i = 0; i < fp->nvars; ++i) {
+		const char *varname = fp->var_namelist[i];
+		test_file_mode_reads_on_var(fp, bp_filename, varname);
+
+		MPI_Barrier(COMM);
+	}
+
+	adios_read_close(fp);
+
+	fprintf(stderr, "[rank %d/%d] Finished file-mode writeblock reads on %s\n", rank, size, bp_filename);
+}
+
+int main(int argc, char **argv) {
+	MPI_Init(&argc, &argv);
+
+	const char *cmd = *argv; SHIFT;
+
+	if (argc != 1) {
+		if (rank == 0) fprintf(stderr, "Usage: %s <BP filename>\n", cmd);
+		MPI_Abort(COMM, 1);
+	}
+
+	const char *bp_filename = *argv; SHIFT;
+
+	MPI_Comm_rank(COMM, &rank);
+	MPI_Comm_size(COMM, &size);
+	adios_read_init_method(ADIOS_READ_METHOD_BP, COMM, "");
+
+	if (rank == 0) fprintf(stderr, "Starting file-mode writeblock tests on %s (%d ranks)...\n", bp_filename, size);
+	test_file_mode_reads(bp_filename);
+
+	adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+	MPI_Finalize();
+}
diff --git a/tests/suite/programs/two_groups.c b/tests/suite/programs/two_groups.c
index 9a91896..dd3e7e5 100644
--- a/tests/suite/programs/two_groups.c
+++ b/tests/suite/programs/two_groups.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/two_groups.xml b/tests/suite/programs/two_groups.xml
new file mode 100644
index 0000000..7b14485
--- /dev/null
+++ b/tests/suite/programs/two_groups.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+
+    <adios-group name="g1" coordination-communicator="comm" time-index="tidx">
+        <var name="a0"  type="integer"/>
+        <var name="c0"  type="integer"/>
+        <attribute name="attr1int" path="" var="a0" />
+        <attribute name="attr1str" path="" type="string" value="a" />
+    </adios-group>
+
+    <adios-group name="g2" coordination-communicator="comm" time-index="tidx">
+        <var name="b0"  type="integer"/>
+        <attribute name="attr2int" path="" var="b0" />
+        <attribute name="attr2str" path="" type="string" value="b" />
+    </adios-group>
+
+<method group="g1" method="MPI"/>
+<method group="g2" method="MPI"/>
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/suite/programs/write_alternate.c b/tests/suite/programs/write_alternate.c
index 851105a..92e55ea 100644
--- a/tests/suite/programs/write_alternate.c
+++ b/tests/suite/programs/write_alternate.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
diff --git a/tests/suite/programs/write_read.c b/tests/suite/programs/write_read.c
index cd191f4..a2b04e9 100644
--- a/tests/suite/programs/write_read.c
+++ b/tests/suite/programs/write_read.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include "mpi.h"
 #include "adios.h"
 #include "adios_read.h"
 
@@ -630,7 +629,7 @@ int read_file (char *fname)
     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());
+        printE ("Error at opening file: %s\n", adios_errmsg());
         return 1;
     }
 
diff --git a/tests/suite/tests/17_blockinfo.sh b/tests/suite/tests/17_blockinfo.sh
new file mode 100755
index 0000000..96d4a4d
--- /dev/null
+++ b/tests/suite/tests/17_blockinfo.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Test if adios can read correctly the per-block information of 
+# a global array that was written with multi-block per process  
+# Uses ../programs/blocks.c
+#
+# 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=2
+
+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/blocks .
+
+echo "Run blocks"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./blocks 
+EX=$?
+if [ ! -f blocks.bp ]; then
+    echo "ERROR: blocks failed at creating the BP file, blocks.bp. Exit code=$EX."
+    exit 1
+fi
+
+if [ $EX != 0 ]; then
+    echo "ERROR: blocks failed reading per-block information from blocks.bp with $EX errors."
+    exit 1
+fi
+
diff --git a/tests/suite/tests/18_aggregation_by_color.sh b/tests/suite/tests/18_aggregation_by_color.sh
new file mode 100755
index 0000000..d1b6365
--- /dev/null
+++ b/tests/suite/tests/18_aggregation_by_color.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+# Test if adios aggregates data by color properly.
+# Uses the example code from examples/C/global-array/adios_global_aggregate_by_color
+#
+# 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=7
+READPROCS=3
+
+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 $TRUNKDIR/examples/C/global-array/adios_global_aggregate_by_color .
+
+echo "Run C adios_global_aggregate_by_color"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global_aggregate_by_color
+EX=$?
+if [ ! -f adios_global_aggregate_by_color.bp ] \
+|| [! -f adios_global_aggregate_by_color.bp.dir/adios_global_aggregate_by_color.bp.0 ] \
+|| [! -f adios_global_aggregate_by_color.bp.dir/adios_global_aggregate_by_color.bp.1 ]; then
+    echo "ERROR: adios_global_aggregate_by_color failed. No BP file is created. Exit code=$EX"
+    exit 1
+fi
diff --git a/tests/suite/tests/19_query.sh b/tests/suite/tests/19_query.sh
new file mode 100755
index 0000000..7118c0b
--- /dev/null
+++ b/tests/suite/tests/19_query.sh
@@ -0,0 +1,297 @@
+#!/bin/bash
+#
+# Test if the ADIOS query framework can successfully perform a range of *serial* queries on simple, pre-defined datasets
+# Parallel query tests are tested in *TODO*
+#
+# Uses:
+# - tests/C/query/common/build_indexed_dataset (executable, produces the pre-defined datasets)
+# - tests/C/query/common/xml-testcases/*/* (custom XML files describing interesting queries over the predefined datasets)
+#   - e.g. tests/C/query/common/xml-testcases/DS1/simple-query.xml
+# - tests/C/query/common/compute_expected_query_results (executable, runs queries via sequential scan over a BP file)
+#
+# 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
+
+# This function prints a message to stderr, then exits with the
+# given error code (defaults to 1). Usage: die <msg> <code>
+function die() {
+  EC=${2-1}
+  echo "$1" >&2
+  exit $EC
+}
+
+# mpirun for serial command
+MPIRUN_SERIAL="$MPIRUN $NP_MPIRUN 1 $EXEOPT"
+
+# Basic directory structure
+QUERY_TEST_DIR="$TRUNKDIR/tests/C/query"
+QUERY_COMMON_DIR="$QUERY_TEST_DIR/common"
+TEST_PROGRAMS_DIR="$TRUNKDIR/tests/suite/programs"
+UTILS_DIR="$TRUNKDIR/utils"
+
+# Some external tools to use
+DATASET_BUILDER_EXE_BASENAME="build_standard_dataset"
+QUERY_SEQSCAN_EXE_BASENAME="compute_expected_query_results"
+QUERY_EXE_BASENAME="adios_query_test"
+LIST_METHODS_EXE_BASENAME="list_methods"
+
+DATASET_BUILDER_EXE_PATH="$TEST_PROGRAMS_DIR/$DATASET_BUILDER_EXE_BASENAME"
+QUERY_SEQSCAN_EXE_PATH="$QUERY_COMMON_DIR/$QUERY_SEQSCAN_EXE_BASENAME"
+QUERY_EXE_PATH="$QUERY_COMMON_DIR/$QUERY_EXE_BASENAME"
+LIST_METHODS_EXE_PATH="$UTILS_DIR/$LIST_METHODS_EXE_BASENAME/$LIST_METHODS_EXE_BASENAME"
+
+# Check for the executability of all executables that we need
+[ -f "$DATASET_BUILDER_EXE_PATH" -a -x "$DATASET_BUILDER_EXE_PATH" ] || die "ERROR: $DATASET_BUILDER_EXE_PATH is not executable"
+[ -f "$QUERY_SEQSCAN_EXE_PATH"   -a -x "$QUERY_SEQSCAN_EXE_PATH"   ] || die "ERROR: $QUERY_SEQSCAN_EXE_PATH is not executable"
+[ -f "$QUERY_EXE_PATH"           -a -x "$QUERY_EXE_PATH"           ] || die "ERROR: $QUERY_EXE_PATH is not executable"
+[ -f "$LIST_METHODS_EXE_PATH"    -a -x "$LIST_METHODS_EXE_PATH"    ] || die "ERROR: $LIST_METHODS_EXE_PATH is not executable"
+
+# Copy the external tools to the working directory for convenience
+DATASET_BUILDER_EXE_LOCAL="./$DATASET_BUILDER_EXE_BASENAME"
+QUERY_SEQSCAN_EXE_LOCAL="./$QUERY_SEQSCAN_EXE_BASENAME"
+QUERY_EXE_LOCAL="./$QUERY_EXE_BASENAME"
+cp $DATASET_BUILDER_EXE_PATH  $DATASET_BUILDER_EXE_LOCAL
+cp $QUERY_SEQSCAN_EXE_PATH    $QUERY_SEQSCAN_EXE_LOCAL
+cp $QUERY_EXE_PATH            $QUERY_EXE_LOCAL
+
+# Check for the "directory"-ness of the query XML dir
+QUERY_XML_DIR="$QUERY_TEST_DIR/query-xmls/"
+[ -d "$QUERY_XML_DIR" ] || die "ERROR: $QUERY_XML_DIR is not a directory"
+
+
+
+# All pre-defined dataset IDs (which can be extracted from build_indexed_dataset)
+ALL_DATASET_IDS=" \
+  DS-1D \
+  DS-2D \
+  DS-3D \
+  DS-particle \
+  DS-unevenpg \
+"
+
+# Check that query XML subdirectories exist for all datasets we're testing 
+for DSID in $ALL_DATASET_IDS; do
+  [ -d "$QUERY_XML_DIR/$DSID" ] ||
+    die "ERROR: $QUERY_XML_DIR/$DSID is not a directory"
+done
+
+
+
+# All query engine implementations to test
+ALL_QUERY_ENGINES=$( \
+  $MPIRUN_SERIAL $LIST_METHODS_EXE_PATH |
+  awk '
+    /^Available/{
+      transforms = ($2 == "query")
+    }
+    {
+      if (transforms) {
+        if (skippedheader) {
+          gsub("ADIOS_QUERY_METHOD_","",$1)
+          print $1
+        } else {
+          skippedheader = 1
+        }
+      }
+    }
+  ' |
+  tr "A-Z\n" 'a-z '
+)
+
+# Specially detect the FastBit indexing method, since it needs
+# an external program to build its indexes 
+case $ALL_QUERY_ENGINES in *fastbit*) HAS_FASTBIT=1 ;; esac
+if [ "$HAS_FASTBIT" ]; then
+  FASTBIT_INDEXER_EXE_BASENAME="adios_index_fastbit"
+  FASTBIT_INDEXER_EXE_PATH="$UTILS_DIR/fastbit/$FASTBIT_INDEXER_EXE_BASENAME"
+  [ -f "$FASTBIT_INDEXER_EXE_PATH" -a -x "$FASTBIT_INDEXER_EXE_PATH" ] || die "ERROR: $FASTBIT_INDEXER_EXE_PATH is not executable"
+
+  FASTBIT_INDEXER_EXE_LOCAL="./$FASTBIT_INDEXER_EXE_BASENAME"
+  cp $FASTBIT_INDEXER_EXE_PATH  $FASTBIT_INDEXER_EXE_LOCAL
+fi
+
+
+
+#
+# NO FURTHER CONFIGURATION VARIABLES BELOW THIS POINT
+#
+
+function init_work_directory() {
+  echo "STEP 1: INITIALIZING THE TEST WORKING DIRECTORY..."
+  
+  local QUERY_ENGINE
+  
+  # Set up subdirectories for each query engine, since each
+  # one will need its own BP file indexed in a particular way
+  for QUERY_ENGINE in $ALL_QUERY_ENGINES; do
+    mkdir -p ./$QUERY_ENGINE
+  done
+}
+
+function invoke_dataset_builder() {
+  local DSID="$1"
+  local DSOUTPUT="$2"
+  local TRANSFORM_ARG="$3"
+  [[ $# -eq 3 ]] || die "ERROR: Internal testing error, invalid parameters to invoke_dataset_builder: $@"
+  
+  set -o xtrace
+  $MPIRUN_SERIAL $DATASET_BUILDER_EXE_LOCAL "$DSID" "$DSOUTPUT" "$TRANSFORM_ARG" ||
+    die "ERROR: $DATASET_BUILDER_EXE_LOCAL failed with exit code $? (on dataset $DSID, outputting to $DSOUTPUT, using transform argument $TRANSFORM_ARG)"
+  set +o xtrace
+  
+  # Rename the ADIOS XML used for writing, so it's more clear what it is used
+  # for (i.e., not a query test specification XML)
+  mv "$DSOUTPUT.xml" "$DSOUTPUT.create.xml"
+  
+  # Ensure the dataset was actually produced
+  local INDEXED_DS="$DSOUTPUT.bp"
+  [ -f "$INDEXED_DS" ] ||
+    die "ERROR: $DATASET_BUILDER_EXE_LOCAL did not produce expected output BP file \"$INDEXED_DS\""
+    
+  #echo $INDEXED_DS  # Return the BP filename
+}
+
+function build_indexed_datasets_alacrity() {
+  local DSID="$1"
+  local DSOUTPUT="$2"
+  [[ $# -eq 2 ]] || die "ERROR: Internal testing error, invalid parameters to build_indexed_datasets_alacrity: $@"
+  
+  invoke_dataset_builder "$DSID" "$DSOUTPUT.ii-16" "alacrity:indexForm=ALInvertedIndex"
+  invoke_dataset_builder "$DSID" "$DSOUTPUT.cii-16" "alacrity:indexForm=ALCompressedInvertedIndex"
+  invoke_dataset_builder "$DSID" "$DSOUTPUT.ii-12" "alacrity:indexForm=ALInvertedIndex,sigBits=12"
+  invoke_dataset_builder "$DSID" "$DSOUTPUT.cii-12" "alacrity:indexForm=ALCompressedInvertedIndex,sigBits=12"
+}
+
+function build_indexed_datasets_fastbit() {
+  local DSID="$1"
+  local DSOUTPUT="$2"
+  [[ $# -eq 2 ]] || die "ERROR: Internal testing error, invalid parameters to build_indexed_datasets_fastbit: $@"
+  
+  invoke_dataset_builder "$DSID" "$DSOUTPUT" "none"
+  
+  set -o xtrace
+  $FASTBIT_INDEXER_EXE_LOCAL "$DSOUTPUT".bp "<binning precision=5/>"||
+    die "ERROR: $FASTBIT_INDEXER_EXE_LOCAL failed with exit code $?"
+  set +o xtrace
+}
+
+function build_datasets() {
+  echo "STEP 2: INDEXING ALL TEST DATASETS USING ALL ENABLED INDEXING METHODS"
+  echo "(ALSO PRODUCING A NON-INDEXED VERSION OF EACH DATASET FOR REFERENCE)"
+
+  local DSID
+  local QUERY_ENGINE
+  
+  for DSID in $ALL_DATASET_IDS; do
+    # Build a no-indexed dataset for use by the sequential
+    # scan oracle
+    invoke_dataset_builder "$DSID" "$DSID.noindex" "none"
+    
+    # Build indexed versions of this dataset for all query engines
+    for QUERY_ENGINE in $ALL_QUERY_ENGINES; do
+      echo "Producing indexed versions of $DSID for query engine $QUERY_ENGINE"
+      local QE_WORKDIR="./$QUERY_ENGINE"
+
+      # Index the dataset using any indexing configurations desired for this
+      # particular query engine datasets. This function should produce BP files
+      # of the form $QE_WORKDIR/$DSID.$QUERY_ENGINE.<indexing config name>.bp
+      # (e.g. .../DS1.alacrity.cii.bp, .../DS1.fastbit.precision2.bp
+      build_indexed_datasets_$QUERY_ENGINE "$DSID" "$QE_WORKDIR/$DSID.$QUERY_ENGINE"
+    done
+  done
+}
+
+
+# STEP 3: RUN ALL QUERIES USING ALL QUERY ENGINES
+function query_datasets() {
+  echo "STEP 3: RUNNING ALL QUERIES USING ALL ENABLED QUERY ENGINES ON THE INDEXED DATASETS"
+
+  local DSID
+  local QUERY_XML
+  local QUERY_ENGINE
+  local INDEXED_DS
+  
+  for DSID in $ALL_DATASET_IDS; do
+    local NOINDEX_DS="$DSID.noindex.bp"
+  
+      # Iterate over all pre-defined queries
+      for QUERY_XML in "$QUERY_XML_DIR/$DSID"/*.xml; do
+        local QUERY_XML_BASENAME="${QUERY_XML##*/}"     # Strip the path
+        local QUERY_NAME="${QUERY_XML_BASENAME%%.xml}"  # Strip the .xml suffix
+      
+        # Copy the query XML into our working directory for easy access
+        local QUERY_XML_LOCAL="${QUERY_XML_BASENAME}"
+        cp "$QUERY_XML" "$QUERY_XML_LOCAL" 
+      
+        # Compute expected query results in both FILE and STREAM modes
+        for FILEMODE in file stream; do 
+          # Compute the expected results
+          local EXPECTED_POINTS_FILE="$DSID.$QUERY_NAME.$FILEMODE-mode.expected-points.txt"
+
+          echo
+          echo "====== COMPUTING EXPECTED OUTPUT OF QUERY $QUERY_NAME ON DATASET $DSID IN $FILEMODE MODE ======"
+          echo
+          set -o xtrace
+          $MPIRUN_SERIAL "$QUERY_SEQSCAN_EXE_LOCAL" "$NOINDEX_DS" "$QUERY_XML_LOCAL" "$FILEMODE" > "$EXPECTED_POINTS_FILE" ||
+            die "ERROR: $QUERY_SEQSCAN_EXE_LOCAL failed with exit code $?"
+          set +o xtrace
+        
+          # NOTE: the sequential scan program produces a point list that is guaranteed to be sorted in C array order, so no need to sort it here
+        done
+        
+        # Ensure results computed for both FILE and STREAM modes match
+        local ALL_EXPECTED_POINTS_FILES="$DSID.$QUERY_NAME."*"-mode.expected-points.txt"
+        diff -q $ALL_EXPECTED_POINTS_FILES ||
+          die "ERROR: Computed expected query results for query $QUERY_NAME on dataset $DSID did not match between file mode and stream mode. This is either a bug in compute_expected_query_results, or in ADIOS itself."
+
+        # Run the query for each query engine implementation and compare to the expected results
+        for QUERY_ENGINE in $ALL_QUERY_ENGINES; do
+          local QE_WORKDIR="./$QUERY_ENGINE"
+
+          for INDEXED_DS in "$QE_WORKDIR/$DSID.$QUERY_ENGINE".*bp; do
+            INDEXING_NAME=${INDEXED_DS##*/$DSID.$QUERY_ENGINE.}
+            INDEXING_NAME=${INDEXING_NAME%.bp}
+
+            for FILEMODE in file stream; do
+              local OUTPUT_POINTS_FILE="$QE_WORKDIR/$DSID.$QUERY_NAME.$FILEMODE-mode.$QUERY_ENGINE-$INDEXING_NAME-points.txt"
+
+              # Run the query through ADIOS Query to get actual results
+              echo
+              echo "====== RUNNING QUERY $QUERY_NAME USING QUERY ENGINE $QUERY_ENGINE ON DATASET $DSID IN $FILEMODE MODE ======"
+              echo
+              set -o xtrace
+              $MPIRUN_SERIAL "$QUERY_EXE_LOCAL" "$INDEXED_DS" "$QUERY_XML_LOCAL" "$QUERY_ENGINE" "$FILEMODE" > "$OUTPUT_POINTS_FILE" ||
+                die "ERROR: $QUERY_EXE_LOCAL failed with exit code $?"
+              set +o xtrace
+
+              # Sort the output points in C array order, since the query engine makes no guarantee as to the ordering of the results
+              # Sort file in place (-o FILE) with numerical sort order (-n) on each of the first 9 fields (-k1,1 ...)
+              # Assumes the output will have at most 8 dimensions (+ 1 timestep column == 9), add more if needed (or use a generalized column counter)
+              sort -n -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 -k9,9 \
+                "$OUTPUT_POINTS_FILE" -o "$OUTPUT_POINTS_FILE"
+
+              # Compare the actual and expected results via diff (the matching points are sorted by tuple components)
+              if ! diff -q "$EXPECTED_POINTS_FILE" "$OUTPUT_POINTS_FILE"; then
+                echo "ERROR: ADIOS Query does not return the expected points matching query $QUERY_NAME on dataset $DSID in $FILEMODE mode using query engine $QUERY_ENGINE"
+                echo "Compare \"$EXPECTED_POINTS_FILE\" (expected points) vs. \"$OUTPUT_POINTS_FILE\" (returned points) in \"$PWD\""
+                echo "The BP file queried is \"$INDEXED_DS\" and the query is specified by \"$QUERY_XML_LOCAL\""
+                exit 1  
+              fi
+            done
+          done
+        done
+      done
+  done
+}
+
+# FINALLY, CALL THE FUNCTIONS IN SEQUENCE
+echo "NOTE: Testing query methods: $ALL_QUERY_METHODS"
+echo "NOTE: Testing on datasets: $ALL_DATASETS"
+init_work_directory
+build_datasets
+query_datasets
diff --git a/tests/suite/tests/20_transforms_writeblock.sh b/tests/suite/tests/20_transforms_writeblock.sh
new file mode 100755
index 0000000..a568bd0
--- /dev/null
+++ b/tests/suite/tests/20_transforms_writeblock.sh
@@ -0,0 +1,149 @@
+#!/bin/bash
+#
+# Test if the ADIOS query framework can successfully perform a range of *serial* queries on simple, pre-defined datasets
+# Parallel query tests are tested in *TODO*
+#
+# Uses:
+# - tests/C/query/common/build_indexed_dataset (executable, produces the pre-defined datasets)
+# - tests/C/query/common/xml-testcases/*/* (custom XML files describing interesting queries over the predefined datasets)
+#   - e.g. tests/C/query/common/xml-testcases/DS1/simple-query.xml
+# - tests/C/query/common/compute_expected_query_results (executable, runs queries via sequential scan over a BP file)
+#
+# 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
+
+# This function prints a message to stderr, then exits with the
+# given error code (defaults to 1). Usage: die <msg> <code>
+function die() {
+  EC=${2-1}
+  echo "$1" >&2
+  exit $EC
+}
+
+# mpirun for serial command
+
+USEPROCS=$MAXPROCS
+if [[ $USEPROCS -gt 4 ]]; then USEPROCS=4; fi 
+MPIRUN_CMD="$MPIRUN $NP_MPIRUN $USEPROCS"
+
+# Basic directory structure
+TEST_PROGRAMS_DIR="$TRUNKDIR/tests/suite/programs"
+UTILS_DIR="$TRUNKDIR/utils"
+
+# Some external tools to use
+DATASET_BUILDER_EXE_BASENAME="build_standard_dataset"
+DATASET_TESTER_EXE_BASENAME="transforms_writeblock_read"
+LIST_METHODS_EXE_BASENAME="list_methods"
+
+DATASET_BUILDER_EXE_PATH="$TEST_PROGRAMS_DIR/$DATASET_BUILDER_EXE_BASENAME"
+DATASET_TESTER_EXE_PATH="$TEST_PROGRAMS_DIR/$DATASET_TESTER_EXE_BASENAME"
+LIST_METHODS_EXE_PATH="$UTILS_DIR/list_methods/$LIST_METHODS_EXE_BASENAME"
+
+# Check for the executability of all executables that we need
+[ -f "$DATASET_BUILDER_EXE_PATH" -a -x "$DATASET_BUILDER_EXE_PATH" ] || die "ERROR: $DATASET_BUILDER_EXE_PATH is not executable"
+[ -f "$DATASET_TESTER_EXE_PATH"  -a -x "$DATASET_TESTER_EXE_PATH"  ] || die "ERROR: $DATASET_TESTER_EXE_PATH is not executable"
+[ -f "$LIST_METHODS_EXE_PATH"    -a -x "$LIST_METHODS_EXE_PATH"    ] || die "ERROR: $LIST_METHODS_EXE_PATH is not executable"
+
+# Copy the external tools to the working directory for convenience
+DATASET_BUILDER_EXE_LOCAL="./$DATASET_BUILDER_EXE_BASENAME"
+DATASET_TESTER_EXE_LOCAL="./$DATASET_TESTER_EXE_BASENAME"
+cp $DATASET_BUILDER_EXE_PATH $DATASET_BUILDER_EXE_LOCAL
+cp $DATASET_TESTER_EXE_PATH $DATASET_TESTER_EXE_LOCAL
+
+# All pre-defined dataset IDs (which can be extracted from build_indexed_dataset)
+ALL_DATASET_IDS=" \
+  DS-1D \
+  DS-2D \
+  DS-3D \
+  DS-particle \
+"
+
+ALL_TRANSFORMS=$( \
+  $LIST_METHODS_EXE_PATH |
+  awk '
+    /^Available/{
+      transforms = ($2 == "data")
+    }
+    {
+      if (transforms) {
+        if (skippedheader) {
+          gsub("\"","",$1)
+          print $1
+        } else {
+          skippedheader = 1
+        }
+      }
+    }
+  ' |
+  grep -v -eisobar -eszip
+)
+
+echo "NOTE: Testing with the following installed data transformations: $ALL_TRANSFORMS" 
+
+function invoke_dataset_builder() {
+  local DSID="$1"
+  local DSOUTPUT="$2"
+  local TRANSFORM="$3"
+  [[ $# -eq 3 ]] || die "ERROR: Internal testing error, invalid parameters to invoke_dataset_builder: $@"
+  
+  # Use Identity because it's built-in, known-good and and should be sufficient
+  # to test writeblock reads over transformed data
+  
+  set -o xtrace
+  $DATASET_BUILDER_EXE_LOCAL "$DSID" "$DSOUTPUT" "$TRANSFORM" ||
+    die "ERROR: $DATASET_BUILDER_EXE_LOCAL failed with exit code $? (on dataset $DSID, outputting to $DSOUTPUT, using transform argument $TRANSFORM_ARG)"
+  set +o xtrace
+  
+  # Rename the ADIOS XML used for writing, so it's more clear what it is used
+  # for (i.e., not a query test specification XML)
+  mv "$DSOUTPUT.xml" "$DSOUTPUT.create.xml"
+  
+  # Ensure the dataset was actually produced
+  local TRANSFORMED_DS="$DSOUTPUT.bp"
+  [ -f "$TRANSFORMED_DS" ] ||
+    die "ERROR: $DATASET_BUILDER_EXE_LOCAL did not produce expected output BP file \"$TRANSFORMED_DS\""
+}
+
+function build_datasets() {
+  local DSID
+  local TRANSFORM
+  
+  for TRANSFORM in $ALL_TRANSFORMS; do
+    local TRANSFORM_DIR="$TRANSFORM"
+    mkdir -p $TRANSFORM_DIR
+    for DSID in $ALL_DATASET_IDS; do
+      invoke_dataset_builder "$DSID" "$TRANSFORM_DIR/$DSID" "$TRANSFORM"
+    done
+  done
+}
+
+
+
+function test_datasets() {
+  local DSID
+
+  for DSID in $ALL_DATASET_IDS; do
+    for TRANSFORM in $ALL_TRANSFORMS; do    
+      local DS_FILE="$TRANSFORM/$DSID.bp"
+
+      echo
+      echo "=== TESTING WRITEBLOCK READS ON DATASET $DSID TRANSFORMED WITH TRANSFORM $TRANSFORM ==="
+      echo
+      set -o xtrace
+      $MPIRUN_CMD "$DATASET_TESTER_EXE_LOCAL" "$DS_FILE" ||
+          die "ERROR: $DATASET_TESTER_EXE_LOCAL failed on dataset $DSID and transform $TRANSFORM with exit code $?"
+      set +o xtrace
+    done
+  done
+}
+
+
+
+# FINALLY, CALL THE FUNCTIONS IN SEQUENCE
+build_datasets
+test_datasets
diff --git a/toolchain.cmake b/toolchain.cmake
deleted file mode 100644
index 897259f..0000000
--- a/toolchain.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# Specify the target system (this allows cross-compiling)
-SET(CMAKE_SYSTEM_NAME CRAYXT_COMPUTE_LINUX)  
-
-# specify the cross compiler
-set(CMAKE_C_COMPILER /opt/cray/xt-asyncpe/5.17/bin/cc)
-set(CMAKE_CXX_COMPILER /opt/cray/xt-asyncpe/5.17/bin/CC)
-
-# adjust the default behaviour of the FIND_XXX() commands:
-# search headers and libraries in the target environment, search 
-# programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
diff --git a/toolchain/cray/LICENSE b/toolchain/cray/LICENSE
new file mode 100644
index 0000000..5c304d1
--- /dev/null
+++ b/toolchain/cray/LICENSE
@@ -0,0 +1,201 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/toolchain/cray/Platform/ComputeNodeLinux.cmake b/toolchain/cray/Platform/ComputeNodeLinux.cmake
new file mode 100644
index 0000000..c9557ef
--- /dev/null
+++ b/toolchain/cray/Platform/ComputeNodeLinux.cmake
@@ -0,0 +1,67 @@
+# Compute Node Linux doesn't quite work the same as native Linux so all of this
+# needs to be custom.  We use the variables defined through Cray's environment
+# modules to set up the right paths for things.
+
+set(CMAKE_SYSTEM_VERSION "$ENV{CRAYOS_VERSION}")
+if(NOT CMAKE_SYSTEM_VERSION)
+  set(CMAKE_SYSTEM_VERSION "$ENV{XTOS_VERSION}")
+endif()
+if(NOT CMAKE_SYSTEM_VERSION)
+  message(FATAL_ERROR "The CMAKE_SYSTEM_VERSION variable is not set and neither the XTOS_VERSION or CRAYOS_VERSION environment variable are defined.  The ComputeNodeLinux CMake platform module either requires it to be manually set or the environment variable to be available. This usually means that the necessary PrgEnv-* module is not loaded")
+endif()
+
+# All cray systems are x86 CPUs and have been for quite some time
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+
+set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
+set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
+set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
+
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
+
+set(CMAKE_DL_LIBS dl)
+
+# Normally this sort of logic would belong in the toolchain file but the
+# order things get loaded in cause anything set here to override the toolchain
+# so we'll explicitly check for static compiler options in order to specify
+# whether or not the platform will support it.
+
+# If the link type is not explicitly specified in the environment then we'll
+# assume that the code will be built statically but that it's dependencies
+# can be mixed
+if(NOT DEFINED ENV{CRAYPE_LINK_TYPE} OR
+   "$ENV{CRAYPE_LINK_TYPE}" STREQUAL "dynamic")
+  set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
+else() # Explicit static
+  set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+endif()
+
+# Make sure we have the appropriate environment loaded
+if(NOT DEFINED ENV{SYSROOT_DIR})
+  #message(WARNING "The SYSROOT_DIR environment variable is not defined.  This is usually due to the appropriate {xe,xt,xc}-sysroot module not being loaded.  A dummy default search path will be used insted, effectively disabling the default search path.")
+  set(_CRAY_SYSROOT "/dev/null")
+else()
+  set(_CRAY_SYSROOT "$ENV{SYSROOT_DIR}")
+endif()
+
+include(Platform/UnixPaths)
+set(CMAKE_FIND_ROOT_PATH "${_CRAY_SYSROOT}")
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+if(CMAKE_VERSION VERSION_LESS 3.1)
+  # This mode is definitely not ideal but necessary for older versions of
+  # CMake
+  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
+  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
+  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
+else()
+  # Set up system search paths that CMake will use to look for libraries and
+  # include files.  These will be the standard UNIX search paths but rooted
+  # in the SYSROOT of the compute nodes.  User specified search paths remain
+  # untouched
+  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY SYSTEM_ONLY)
+  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE SYSTEM_ONLY)
+  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE SYSTEM_ONLY)
+endif()
diff --git a/toolchain/cray/README.md b/toolchain/cray/README.md
new file mode 100644
index 0000000..b591daa
--- /dev/null
+++ b/toolchain/cray/README.md
@@ -0,0 +1,18 @@
+** This cray folder is cloned from https://github.com/chuckatkins/miscelaneous-scripts
+
+Cray-CMake-Modules
+==================
+
+A collection CMake code for use on various Cray supercomputing systems
+
+* Platform: Cross compilation platform files not yet upstream
+  * ComputeNodeLinux.cmake: Cray Compute Node Linux based on the Cray environment modules.
+* ToolChain: CMake cross-compiling toolchain files
+  * CrayPrgEnv-ToolChain.cmake: The Cray Programming Environment
+
+How to use it:
+in ADIOS top source file
+$mkdir build
+then
+$cd build
+$cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain/cray/ToolChain/CrayPrgEnv-ToolChain.cmake
diff --git a/toolchain/cray/ToolChain/CrayPrgEnv-ToolChain.cmake b/toolchain/cray/ToolChain/CrayPrgEnv-ToolChain.cmake
new file mode 100644
index 0000000..4c9f695
--- /dev/null
+++ b/toolchain/cray/ToolChain/CrayPrgEnv-ToolChain.cmake
@@ -0,0 +1,52 @@
+# Make sure we can find the ComputeNodeLinux Platform file since it's not
+# shipped with CMake
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/..")
+
+set(CMAKE_SYSTEM_NAME ComputeNodeLinux)
+
+# Make sure we have the appropriate environment loaded
+set(_CRAYPE_ROOT "$ENV{CRAYPE_DIR}")
+if(NOT _CRAYPE_ROOT)
+  set(_CRAYPE_ROOT "$ENV{ASYNCPE_DIR}")
+endif()
+if(NOT _CRAYPE_ROOT)
+  message(FATAL_ERROR "Neither the ASYNCPE_DIR or CRAYPE_DIR environment variable are defined but the CrayPrgEnv toolchain module requires one.  This usually means that the necessary PrgEnv-* module is not loaded")
+endif()
+
+# Explicitly use the cray compiler wrappers from the PrgEnv-* module
+set(CMAKE_C_COMPILER       "${_CRAYPE_ROOT}/bin/cc")
+set(CMAKE_CXX_COMPILER     "${_CRAYPE_ROOT}/bin/CC")
+set(CMAKE_Fortran_COMPILER "${_CRAYPE_ROOT}/bin/ftn")
+
+# These shouldn't really be necessary since the Cray compiler drivers pay
+# attention to the environment variables but this will force the options
+# into the generated build files so even if the environment changes after
+# configure, the correct commands will still get called.
+if(DEFINED ENV{CRAYPE_COMPILE_TARGET})
+  list(APPEND _CRAYPE_OPTS "-target=$ENV{CRAYPE_COMPILE_TARGET}")
+else()
+  if(DEFINED ENV{CRAY_CPU_TARGET})
+    list(APPEND _CRAYPE_OPTS "-target-cpu=$ENV{CRAY_CPU_TARGET}")
+  endif()
+  if(DEFINED ENV{CRAY_ACCEL_TARGET})
+    list(APPEND _CRAYPE_OPTS "-target-accel=$ENV{CRAY_ACCEL_TARGET}")
+  endif()
+  if(DEFINED ENV{CRAY_NETWORK_TARGET})
+    list(APPEND _CRAYPE_OPTS "-target-network=$ENV{CRAY_NETWORK_TARGET}")
+  endif()
+endif()
+if("$ENV{CRAYPE_LINK_TYPE}" STREQUAL "dynamic")
+  list(APPEND _CRAYPE_OPTS "-dynamic")
+else() # Explicit or implicit static
+  list(APPEND _CRAYPE_OPTS "-static")
+endif()
+string(REPLACE ";" " " _CRAYPE_OPTS "${_CRAYPE_OPTS}")
+
+set(CMAKE_C_FLAGS       "${_CRAYPE_OPTS}" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS     "${_CRAYPE_OPTS}" CACHE STRING "" FORCE)
+set(CMAKE_Fortran_FLAGS "${_CRAYPE_OPTS}" CACHE STRING "" FORCE)
+
+# Guide the search for binutils. These can't be auto-detected because of
+# the forced CMAKE_FIND_ROOT_PATH_MODE_* variables so we explicitly tell
+# the CMakeFindBinUtils module to search in the host's directories
+set(_CMAKE_TOOLCHAIN_LOCATION /usr/bin)
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 8e68388..72a1083 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -19,6 +19,10 @@ if(HAVE_NETCDF)
   add_subdirectory(bp2ncd)
 endif(HAVE_NETCDF)
 
+if(HAVE_FASTBIT)
+  add_subdirectory(fastbit)
+endif()
+
 add_subdirectory(skel)
 add_subdirectory(skeldump)
 
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 139fd59..f564048 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -1,10 +1,16 @@
-SUBDIRS= gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump list_methods
+SUBDIRS= gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump list_methods bpmeta
+
 if BUILD_WRITE
 SUBDIRS += adios_lint bp2bp 
+if HAVE_FASTBIT
+    SUBDIRS +=fastbit
+endif
 endif
+
 if HAVE_HDF5
 SUBDIRS += bp2h5
 endif
+
 if HAVE_NETCDF
 SUBDIRS +=bp2ncd
 endif
diff --git a/utils/Makefile.in b/utils/Makefile.in
index 0de17e1..3e1228a 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -34,8 +34,9 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 @BUILD_WRITE_TRUE at am__append_1 = adios_lint bp2bp 
- at HAVE_HDF5_TRUE@am__append_2 = bp2h5
- at HAVE_NETCDF_TRUE@am__append_3 = bp2ncd
+ at BUILD_WRITE_TRUE@@HAVE_FASTBIT_TRUE at am__append_2 = fastbit
+ at HAVE_HDF5_TRUE@am__append_3 = bp2h5
+ at HAVE_NETCDF_TRUE@am__append_4 = bp2ncd
 subdir = utils
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -50,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -66,11 +68,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -94,7 +101,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
-	list_methods adios_lint bp2bp bp2h5 bp2ncd skel
+	list_methods bpmeta adios_lint bp2bp fastbit bp2h5 bp2ncd skel
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -143,6 +150,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -200,6 +209,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -299,11 +311,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -370,8 +384,8 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
-	list_methods $(am__append_1) $(am__append_2) $(am__append_3) \
-	skel
+	list_methods bpmeta $(am__append_1) $(am__append_2) \
+	$(am__append_3) $(am__append_4) skel
 all: all-recursive
 
 .SUFFIXES:
diff --git a/utils/adios_lint/Makefile.am b/utils/adios_lint/Makefile.am
index 3f8f2c5..a04ac86 100644
--- a/utils/adios_lint/Makefile.am
+++ b/utils/adios_lint/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src  -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src  -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 bin_PROGRAMS=adios_lint
 
 adios_lint_SOURCES = adios_lint.c
-adios_lint_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+adios_lint_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 adios_lint_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 adios_lint_LDADD = $(top_builddir)/src/libadios_internal_nompi.a 
 adios_lint_LDADD += $(ADIOSLIB_INT_LDADD)
diff --git a/utils/adios_lint/Makefile.in b/utils/adios_lint/Makefile.in
index e22233d..6a58967 100644
--- a/utils/adios_lint/Makefile.in
+++ b/utils/adios_lint/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -126,6 +132,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -185,6 +193,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -284,11 +295,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -354,11 +367,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
+adios_lint_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 adios_lint_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 adios_lint_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
diff --git a/utils/bp2ascii/Makefile.am b/utils/bp2ascii/Makefile.am
index 5b32d35..2e6de81 100644
--- a/utils/bp2ascii/Makefile.am
+++ b/utils/bp2ascii/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 noinst_PROGRAMS = bp2ascii
 
 bp2ascii_SOURCES = bp2ascii.c 
-bp2ascii_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bp2ascii_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bp2ascii_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bp2ascii_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
 bp2ascii_LDADD += $(ADIOSLIB_INT_LDADD)
diff --git a/utils/bp2ascii/Makefile.in b/utils/bp2ascii/Makefile.in
index 841d2cb..9a650ca 100644
--- a/utils/bp2ascii/Makefile.in
+++ b/utils/bp2ascii/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -124,6 +130,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -183,6 +191,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -282,11 +293,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -352,11 +365,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
+bp2ascii_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bp2ascii_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bp2ascii_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
diff --git a/utils/bp2bp/Makefile.am b/utils/bp2bp/Makefile.am
index caed25e..28884b0 100644
--- a/utils/bp2bp/Makefile.am
+++ b/utils/bp2bp/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 bin_PROGRAMS = bp2bp
 
 bp2bp_SOURCES = bp2bp.c
-bp2bp_CPPFLAGS = ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
+bp2bp_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 bp2bp_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 bp2bp_LDADD =  $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 
diff --git a/utils/bp2bp/Makefile.in b/utils/bp2bp/Makefile.in
index 5703b67..c6da91e 100644
--- a/utils/bp2bp/Makefile.in
+++ b/utils/bp2bp/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -125,6 +131,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -184,6 +192,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -283,11 +294,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -353,11 +366,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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) 
+bp2bp_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 bp2bp_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 bp2bp_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 all: all-am
diff --git a/utils/bp2h5/Makefile.am b/utils/bp2h5/Makefile.am
index e70fe65..a018f55 100644
--- a/utils/bp2h5/Makefile.am
+++ b/utils/bp2h5/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -11,7 +11,7 @@ if USE_PARALLEL_COMPILER
 
     CC=$(MPICC)
     CXX=$(MPICXX)
-    bp2h5_CPPFLAGS = ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS) $(HDF5_CPPFLAGS)
+    bp2h5_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS) $(HDF5_CPPFLAGS)
     bp2h5_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)  $(HDF5_LDFLAGS)
     bp2h5_LDADD = $(top_builddir)/src/libadiosread.a
     bp2h5_LDADD += $(ADIOSREADLIB_LDADD)
@@ -19,7 +19,7 @@ if USE_PARALLEL_COMPILER
 
 else
 
-    bp2h5_CPPFLAGS = ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) $(HDF5_CPPFLAGS)
+    bp2h5_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) $(HDF5_CPPFLAGS)
     bp2h5_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)  $(HDF5_LDFLAGS)
     bp2h5_LDADD = $(top_builddir)/src/libadiosread_nompi.a
     bp2h5_LDADD += $(ADIOSREADLIB_SEQ_LDADD)
diff --git a/utils/bp2h5/Makefile.in b/utils/bp2h5/Makefile.in
index a7a1782..0a8b0e2 100644
--- a/utils/bp2h5/Makefile.in
+++ b/utils/bp2h5/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -129,6 +135,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -188,6 +196,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -287,11 +298,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -357,12 +370,12 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 bp2h5_SOURCES = bp2h5.c
- at USE_PARALLEL_COMPILER_FALSE@bp2h5_CPPFLAGS = ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) $(HDF5_CPPFLAGS)
- at USE_PARALLEL_COMPILER_TRUE@bp2h5_CPPFLAGS = ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS) $(HDF5_CPPFLAGS)
+ at USE_PARALLEL_COMPILER_FALSE@bp2h5_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) $(HDF5_CPPFLAGS)
+ at USE_PARALLEL_COMPILER_TRUE@bp2h5_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS) $(HDF5_CPPFLAGS)
 @USE_PARALLEL_COMPILER_FALSE at bp2h5_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS)  $(HDF5_LDFLAGS)
 @USE_PARALLEL_COMPILER_TRUE at bp2h5_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)  $(HDF5_LDFLAGS)
 @USE_PARALLEL_COMPILER_FALSE at bp2h5_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
diff --git a/utils/bp2ncd/Makefile.am b/utils/bp2ncd/Makefile.am
index 95d643b..cda7870 100644
--- a/utils/bp2ncd/Makefile.am
+++ b/utils/bp2ncd/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -10,12 +10,12 @@ bp2ncd_SOURCES = bp2ncd.c
 if USE_PARALLEL_COMPILER
     CC=$(MPICC)
     CXX=$(MPICXX)
-    bp2ncd_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
+    bp2ncd_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
     bp2ncd_CFLAGS = $(ADIOSLIB_CFLAGS) 
     bp2ncd_LDFLAGS = $(ADIOSLIB_LDFLAGS) -static-libtool-libs
     bp2ncd_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 else
-    bp2ncd_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+    bp2ncd_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
     bp2ncd_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS) -static-libtool-libs
     bp2ncd_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
     bp2ncd_LDADD += $(ADIOSLIB_INT_LDADD)
diff --git a/utils/bp2ncd/Makefile.in b/utils/bp2ncd/Makefile.in
index a1824b4..5dac3cb 100644
--- a/utils/bp2ncd/Makefile.in
+++ b/utils/bp2ncd/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -128,6 +134,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -187,6 +195,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -286,11 +297,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -356,12 +369,12 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 bp2ncd_SOURCES = bp2ncd.c
- at USE_PARALLEL_COMPILER_FALSE@bp2ncd_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
- at USE_PARALLEL_COMPILER_TRUE@bp2ncd_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
+ at USE_PARALLEL_COMPILER_FALSE@bp2ncd_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+ at USE_PARALLEL_COMPILER_TRUE@bp2ncd_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 @USE_PARALLEL_COMPILER_TRUE at bp2ncd_CFLAGS = $(ADIOSLIB_CFLAGS) 
 @USE_PARALLEL_COMPILER_FALSE at bp2ncd_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS) -static-libtool-libs
 @USE_PARALLEL_COMPILER_TRUE at bp2ncd_LDFLAGS = $(ADIOSLIB_LDFLAGS) -static-libtool-libs
diff --git a/utils/bpdiff/Makefile.am b/utils/bpdiff/Makefile.am
index 74707c9..0034bf0 100644
--- a/utils/bpdiff/Makefile.am
+++ b/utils/bpdiff/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -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_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
 bpdiff_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 bpdiff_LDADD = $(top_builddir)/src/libadiosread.a 
 bpdiff_LDADD += $(ADIOSREADLIB_LDADD)
diff --git a/utils/bpdiff/Makefile.in b/utils/bpdiff/Makefile.in
index 8023ead..a0f438f 100644
--- a/utils/bpdiff/Makefile.in
+++ b/utils/bpdiff/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -126,6 +132,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -183,6 +191,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -282,11 +293,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -352,11 +365,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 bpdiff_SOURCES = bpdiff.c decompose_block.c utils.c
-bpdiff_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
+bpdiff_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
 bpdiff_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 bpdiff_LDADD = $(top_builddir)/src/libadiosread.a \
 	$(ADIOSREADLIB_LDADD)
diff --git a/utils/bpdump/Makefile.am b/utils/bpdump/Makefile.am
index 029a7fc..5dffe4f 100644
--- a/utils/bpdump/Makefile.am
+++ b/utils/bpdump/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 bin_PROGRAMS = bpdump
 
 bpdump_SOURCES = bpdump.c
-bpdump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpdump_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpdump_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpdump_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
 bpdump_LDADD += $(ADIOSLIB_INT_LDADD)
diff --git a/utils/bpdump/Makefile.in b/utils/bpdump/Makefile.in
index cf1bea5..1634df9 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpdump/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -125,6 +131,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -184,6 +192,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -283,11 +294,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -353,12 +366,12 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
+bpdump_CPPFLAGS = $(AM_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)
diff --git a/utils/bpdump/bpdump.c b/utils/bpdump/bpdump.c
index 354fe9b..c896ba7 100644
--- a/utils/bpdump/bpdump.c
+++ b/utils/bpdump/bpdump.c
@@ -67,7 +67,7 @@ int main (int argc, char ** argv)
     int rc = 0;
     struct dump_struct dump;
 
-    if (argc < 2)
+    if (argc < 2 || argc > 4)
     {
         fprintf (stderr, "usage: %s [-d [var]|--dump [var]] <filename>\n"
                 ,argv [0]
@@ -83,7 +83,7 @@ int main (int argc, char ** argv)
            )
         {
             dump.do_dump = 1;
-            if (argc > 2)
+            if (argc > 3)
             {
                 dump.dump_var = argv [2];
                 filename = argv [3];
@@ -93,7 +93,7 @@ int main (int argc, char ** argv)
             {
                 dump.dump_var = 0;
                 filename = argv [2];
-                printf("%s %s\n",dump.dump_var,filename);
+                printf("ALLVARS %s\n",filename);
             }
         }
         else
@@ -230,6 +230,7 @@ int main (int argc, char ** argv)
 
             if ( var_header.dims == 0 || 
                  ( dump.do_dump &&
+                   dump.dump_var &&
                    !strcasecmp (dump.dump_var, var_header.name)
                  )
                )
@@ -854,6 +855,7 @@ void print_var_payload (struct adios_var_header_struct_v1 * var_header
                        )
 {
     if (   dump->do_dump
+    	&& dump->dump_var
         && var_header->dims
         && !strcasecmp (dump->dump_var, var_header->name)
        )
diff --git a/utils/bpls/Makefile.am b/utils/bpls/Makefile.am
index ca45842..45b899d 100644
--- a/utils/bpls/Makefile.am
+++ b/utils/bpls/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 bin_PROGRAMS = bpls
 
 bpls_SOURCES = bpls.c 
-bpls_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
+bpls_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
 bpls_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
 bpls_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
 bpls_LDADD += $(ADIOSREADLIB_SEQ_LDADD)
diff --git a/utils/bpls/Makefile.in b/utils/bpls/Makefile.in
index dff4866..3201874 100644
--- a/utils/bpls/Makefile.in
+++ b/utils/bpls/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -125,6 +131,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -182,6 +190,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -281,11 +292,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -351,11 +364,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
+bpls_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
 bpls_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
 bpls_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
 	$(ADIOSREADLIB_SEQ_LDADD)
diff --git a/utils/bpls/bpls.c b/utils/bpls/bpls.c
index 18e2594..3343d6b 100644
--- a/utils/bpls/bpls.c
+++ b/utils/bpls/bpls.c
@@ -1806,11 +1806,15 @@ void print_decomp(ADIOS_VARINFO *vi)
             for (j=0; j < vi->nblocks[i]; j++) {
                 fprintf(outf,"          block %*d: [", ndigits_nblocks, j);
                 for (k=0; k < vi->ndim; k++) {
+                    if (vi->blockinfo[blockid].count[k]) {
                     fprintf(outf, "%*lld:%*lld", 
                             ndigits_dims[k],
-                            vi->blockinfo[j].start[k],
+                            vi->blockinfo[blockid].start[k],
                             ndigits_dims[k],
-                            vi->blockinfo[j].start[k] + vi->blockinfo[j].count[k]-1);
+                            vi->blockinfo[blockid].start[k] + vi->blockinfo[blockid].count[k]-1);
+                    } else {
+                        fprintf(outf, "%-*s",2*ndigits_dims[k]+1, "null");
+                    }
                     if (k < vi->ndim-1)
                         fprintf(outf, ", ");
                 }
diff --git a/utils/bpmeta/CMakeLists.txt b/utils/bpmeta/CMakeLists.txt
new file mode 100644
index 0000000..b51b2b5
--- /dev/null
+++ b/utils/bpmeta/CMakeLists.txt
@@ -0,0 +1,12 @@
+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}/src)
+
+add_executable(bpmeta bpmeta.c)
+target_link_libraries(bpmeta adios_internal_nompi ${ADIOSLIB_INT_LDADD})
+set_target_properties(bpmeta PROPERTIES COMPILE_FLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_INT_CPPFLAGS} ${ADIOSLIB_INT_CFLAGS}")
+
+install(PROGRAMS ${CMAKE_BINARY_DIR}/utils/bpmeta/bpmeta DESTINATION ${bindir})
diff --git a/utils/bpmeta/Makefile.am b/utils/bpmeta/Makefile.am
new file mode 100644
index 0000000..ad37b0d
--- /dev/null
+++ b/utils/bpmeta/Makefile.am
@@ -0,0 +1,17 @@
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+bin_PROGRAMS = bpmeta
+
+bpmeta_SOURCES = bpmeta.c
+bpmeta_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpmeta_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
+bpmeta_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
+bpmeta_LDADD += $(ADIOSLIB_INT_LDADD)
+
+if USE_PARALLEL_COMPILER
+    CC=$(MPICC)
+    CXX=$(MPICXX)
+endif
diff --git a/utils/bpdump/Makefile.in b/utils/bpmeta/Makefile.in
similarity index 90%
copy from utils/bpdump/Makefile.in
copy to utils/bpmeta/Makefile.in
index cf1bea5..d457b7f 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpmeta/Makefile.in
@@ -34,8 +34,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = bpdump$(EXEEXT)
-subdir = utils/bpdump
+bin_PROGRAMS = bpmeta$(EXEEXT)
+subdir = utils/bpmeta
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -78,13 +84,13 @@ 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_bpmeta_OBJECTS = bpmeta-bpmeta.$(OBJEXT)
+bpmeta_OBJECTS = $(am_bpmeta_OBJECTS)
 am__DEPENDENCIES_1 =
-bpdump_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
+bpmeta_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(am__DEPENDENCIES_1)
-bpdump_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpdump_LDFLAGS) \
+bpmeta_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpmeta_LDFLAGS) \
 	$(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
@@ -98,8 +104,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 = $(bpmeta_SOURCES)
+DIST_SOURCES = $(bpmeta_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -125,6 +131,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -184,6 +192,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -283,11 +294,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -353,14 +366,14 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
-bpdump_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
-bpdump_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
+bpmeta_SOURCES = bpmeta.c
+bpmeta_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpmeta_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
+bpmeta_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
 all: all-am
 
@@ -375,9 +388,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/bpmeta/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bpdump/Makefile
+	  $(AUTOMAKE) --gnu utils/bpmeta/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -439,9 +452,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)
+bpmeta$(EXEEXT): $(bpmeta_OBJECTS) $(bpmeta_DEPENDENCIES) 
+	@rm -f bpmeta$(EXEEXT)
+	$(bpmeta_LINK) $(bpmeta_OBJECTS) $(bpmeta_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -458,11 +471,11 @@ 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
+bpmeta-bpmeta.o: bpmeta.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpmeta_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpmeta-bpmeta.o `test -f 'bpmeta.c' || echo '$(srcdir)/'`bpmeta.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`
+bpmeta-bpmeta.obj: bpmeta.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpmeta_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpmeta-bpmeta.obj `if test -f 'bpmeta.c'; then $(CYGPATH_W) 'bpmeta.c'; else $(CYGPATH_W) '$(srcdir)/bpmeta.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/utils/bpmeta/bpmeta.c b/utils/bpmeta/bpmeta.c
new file mode 100644
index 0000000..ef8dddc
--- /dev/null
+++ b/utils/bpmeta/bpmeta.c
@@ -0,0 +1,757 @@
+/* 
+ * 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.
+ */
+
+#include "config.h"
+
+#ifndef _GNU_SOURCE
+#   define _GNU_SOURCE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <glob.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "adios_types.h"
+#include "adios_internals.h"
+#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
+
+#if HAVE_PTHREAD
+#   include "pthread.h"
+#endif
+
+#define DIVIDER "========================================================\n"
+
+// User arguments
+int verbose=0;   // 1: print summary, 2: print indexes 3: print working info
+int nthreads=1;  // Number of threads to use (main counts as 1 thread)
+char * filename; // process 'filename'.dir/'filename'.NNN subfiles and 
+                 //   generate metadata file 'filename'
+int nsubfiles=0; // number of subfiles to process
+
+struct option options[] = {
+    {"help",                 no_argument,          NULL,    'h'},
+    {"verbose",              no_argument,          NULL,    'v'},
+    {"nsubfiles",            required_argument,    NULL,    'n'},
+#if HAVE_PTHREAD
+    {"nthreads",             required_argument,    NULL,    't'},
+#endif
+    {NULL,                   0,                    NULL,    0}
+};
+
+#if HAVE_PTHREAD
+static const char *optstring = "hvn:t:";
+#else
+static const char *optstring = "hvn:";
+#endif
+
+// help function
+void display_help() {
+    printf ("usage: bpmeta [OPTIONS] -n <N> <filename>\n"
+            "\nbpmeta processes <filename>.dir/<filename>.<nnn> subfiles and\n"
+            "generates a metadata file <filename>.\n"
+            "\nIt is used to generate the missing metadata file after using\n"
+            "the MPI_AGGREGATE output method with 'have_metada_file=0' option.\n" 
+            "\n"
+            "  --nsubfiles | -n <N>   The number of subfiles to process in\n"
+            "                           <filename>.dir\n"
+#if HAVE_PTHREAD
+            "  --nthreads  | -t <T>   Parallel reading with <T> threads.\n"
+            "                           The main thread is counted in.\n"
+#endif
+            "\n"
+            "Help options\n"
+            "  --help      | -h       Print this help.\n"
+            "  --verbose   | -v       Print log about what this program is doing.\n"
+            "                           Use multiple -v to increase logging level.\n"
+            "Typical use: bpmeta -t 16 -n 1024 mydata.bp\n"
+           );
+}
+
+
+/* Global variables among threads */
+struct adios_bp_buffer_struct_v1 ** b = 0;
+  /* sub-index structure variables */
+struct adios_index_struct_v1 ** subindex;
+
+int process_subfiles (int tid, int startidx, int endidx);
+int write_index (struct adios_index_struct_v1 * index, char * fname);
+int get_nsubfiles (char *filename);
+void print_pg_index ( int tid, struct adios_index_process_group_struct_v1 * pg_root);
+void print_variable_index (int tid, struct adios_index_var_struct_v1 * vars_root);
+void print_attribute_index (int tid,  struct adios_index_attribute_struct_v1 * attrs_root);
+
+#if HAVE_PTHREAD
+struct thread_args 
+{
+    int tid;
+    int startidx;
+    int endidx;
+};
+
+void * thread_main (void *arg)
+{
+    struct thread_args *targ = (struct thread_args *) arg;
+    process_subfiles (targ->tid, targ->startidx, targ->endidx);
+    pthread_exit(NULL);
+    return NULL; // just to avoid compiler warning
+}
+#endif
+
+
+int main (int argc, char ** argv)
+{
+    long int tmp;
+    int c;
+    while ((c = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
+        switch (c) {
+            case 'n':
+            case 't':
+                errno = 0;
+                tmp = strtol(optarg, (char **)NULL, 0);
+                if (errno) {
+                    fprintf(stderr, "Error: could not convert -%c value: %s\n", 
+                            c, optarg);
+                    return 1;
+                }
+                if (c == 'n')
+                    nsubfiles=tmp;
+                else 
+                    nthreads=tmp;
+                break;
+
+            case 'h':
+                display_help();
+                return 0;
+                break;
+
+            case 'v':
+                verbose++;
+                break;
+
+            default:
+                printf("Unrecognized argument: %s\n", optarg);
+                break;
+
+        }
+    }
+
+    /* Check if we have a file defined */
+    if (optind >= argc) {
+        printf ("Missing file name\n");
+        display_help();
+        return 1;
+    }
+
+    filename = strdup(argv[optind++]);
+
+    if (nsubfiles < 1)
+        nsubfiles = get_nsubfiles (filename);
+    if (nsubfiles < 1) {
+        printf ("Cannot determine the number of subfiles. To avoid this problem, "
+                "provide the number of subfiles manually with the -n <N> option.\n");
+        return -1;
+    }
+
+    if (nthreads < 1) 
+        nthreads = 1;
+    if (nthreads > nsubfiles) {
+        printf ("Warning: asked for processing %d subfiles using %d threads. "
+                "We will utilize only %d threads.\n", 
+                nsubfiles, nthreads, nsubfiles);
+        nthreads = nsubfiles;
+    }
+
+    if (verbose>1)
+        printf ("Create metadata file %s from %d subfiles using %d threads\n", 
+                filename, nsubfiles, nthreads);
+
+    /* Initialize global variables */
+    b = malloc (nsubfiles * sizeof (struct adios_bp_buffer_struct_v1*));
+    subindex = malloc (nthreads * sizeof (struct adios_index_struct_v1*));
+
+    /* Split the processing work among T threads */
+    int tid;
+
+#if HAVE_PTHREAD
+
+    pthread_t *thread = (pthread_t *) malloc (nthreads * sizeof(pthread_t));
+    struct thread_args *targs = (struct thread_args*) 
+                                  malloc (nthreads * sizeof(struct thread_args));
+    int K = nsubfiles/nthreads; // base number of files to be processed by one thread
+    int L = nsubfiles%nthreads; // this many threads processes one more subfile
+    int startidx, endidx;
+    int rc;
+    //printf ("K=%d L=%d\n", K, L);
+    endidx = -1;
+    for (tid=0; tid<nthreads; tid++)
+    {
+        startidx = endidx + 1;
+        endidx = startidx + K - 1;
+        targs[tid].tid = tid;
+        targs[tid].startidx = startidx;
+        targs[tid].endidx = endidx;
+        if (tid < L) {
+            endidx++;
+        }
+        if (verbose)
+            printf ("Process subfiles from %d to %d with thread %d\n", 
+                    targs[tid].startidx, targs[tid].endidx, targs[tid]);
+
+        if (tid < nthreads-1) {
+            /* Start worker thread. */
+            pthread_attr_t attr;
+            pthread_attr_init (&attr);
+            pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_JOINABLE);
+            rc = pthread_create (&thread[tid], &attr, thread_main, &targs[tid]);
+            if (rc) {
+                printf ("ERROR: Thread %d: Cannot create thread, err code = %d\n", 
+                        tid, rc);
+            }
+            pthread_attr_destroy(&attr);
+        } 
+        else
+        {
+            // last "thread" is the main thread
+            process_subfiles (tid, startidx, endidx);
+        }
+    }
+    // wait here for everyone to finish
+    for (tid=0; tid<nthreads-1; tid++)
+    {
+        void *status;
+        rc = pthread_join (thread[tid], &status);
+        if (rc) {
+            printf ("ERROR: Thread %d: Cannot join thread, err code = %d\n", tid, rc);
+        } else {
+            if (verbose>1)
+                printf ("Thread %d: Joined thread.\n", tid);
+        }
+    }
+    free (targs);
+    free (thread);
+
+#else /* non-threaded version */
+
+    nthreads = 1;
+    process_subfiles (0, 0, nsubfiles-1);
+
+#endif
+
+    /* Merge the T indexes into the global output index */
+    struct adios_index_struct_v1 * globalindex;
+    globalindex = adios_alloc_index_v1(1);
+    for (tid=0; tid<nthreads; tid++)
+    {
+        adios_merge_index_v1 (globalindex, 
+                              subindex[tid]->pg_root, 
+                              subindex[tid]->vars_root, 
+                              subindex[tid]->attrs_root); 
+    }
+    write_index (globalindex, filename);
+
+    /* Clean-up */
+    adios_clear_index_v1 (globalindex);
+    /*... already cleaned-up by globalindex clearing
+    for (tid=0; tid<nthreads; tid++) {
+        adios_clear_index_v1 (subindex[tid]);
+        free (subindex[tid]);
+    }
+    */
+    free (subindex);
+    free (globalindex);
+    free (b);
+    return 0;
+}
+
+int write_index (struct adios_index_struct_v1 * index, char * fname)
+{
+    /* Write out the global index */
+    char * buffer = 0;
+    uint64_t buffer_size = 0;
+    uint64_t buffer_offset = 0;
+    uint64_t index_start = 0; 
+    int err;
+    int f;
+    uint16_t flag = 0;
+    ssize_t bytes_written = 0;
+
+    flag |= ADIOS_VERSION_HAVE_SUBFILE;
+    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
+            ,index_start, index);
+    if (verbose>2) {
+        printf ("buffer=%p size=%lld offset=%lld\n", buffer, buffer_size, buffer_offset);
+    }
+
+    adios_write_version_flag_v1 (&buffer, &buffer_size, &buffer_offset, flag);
+    if (verbose>2) {
+        printf ("buffer=%p size=%lld offset=%lld\n", buffer, buffer_size, buffer_offset);
+    }
+
+    f = open (fname, O_CREAT | O_RDWR, 0644);
+    if (f == -1)
+    {
+        fprintf (stderr, "Failed to create metadata file %s: %s\n", 
+                 fname, strerror(errno));
+        return -1;
+    }
+
+    bytes_written = write (f, buffer, (size_t)buffer_offset);
+    if (bytes_written == -1) 
+    {
+        fprintf (stderr, "Failed to write metadata to file %s: %s\n", 
+                 fname, strerror(errno));
+    } 
+    else if (bytes_written != (ssize_t) buffer_offset) 
+    {
+        fprintf (stderr, "Failed to write metadata of %lld bytes to file %s. "
+                "Only wrote %lld bytes\n", buffer_offset, fname, (long long)bytes_written);
+    }
+    close(f);
+    return 0;
+}
+
+int process_subfiles (int tid, int startidx, int endidx)
+{
+    char fn[256];
+    uint32_t version = 0;
+    int idx;
+    int rc = 0;
+
+    subindex[tid] = adios_alloc_index_v1(1);
+
+    for (idx=startidx; idx<=endidx; idx++) 
+    {
+        b[idx] = malloc (sizeof (struct adios_bp_buffer_struct_v1));
+        adios_buffer_struct_init (b[idx]);
+
+        snprintf (fn, 256, "%s.dir/%s.%d", filename, filename, idx);
+        rc = adios_posix_open_read_internal (fn, "", b[idx]);
+        if (!rc)
+        {
+            fprintf (stderr, "bpmeta: file not found: %s\n", fn);
+            return -1;
+        }
+
+        adios_posix_read_version (b[idx]);
+        adios_parse_version (b[idx], &version);
+        version = version & ADIOS_VERSION_NUM_MASK;
+        if (verbose) {
+            //printf (DIVIDER);
+            printf ("Thread %d: Metadata of %s:\n", tid, fn);
+            printf ("Thread %d: BP format version: %d\n", tid, version);
+        }
+        if (version < 2)
+        {
+            fprintf (stderr, "bpmeta: This version of bpmeta can only work with BP format version 2 and up. "
+                    "Use an older bpmeta from adios 1.6 to work with this file.\n");
+            adios_posix_close_internal (b[idx]);
+            return -1;
+        }
+
+        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;
+
+        adios_posix_read_index_offsets (b[idx]);
+        adios_parse_index_offsets_v1 (b[idx]);
+
+        /*
+           printf ("End of process groups       = %llu\n", b->end_of_pgs);
+           printf ("Process Groups Index Offset = %llu\n", b->pg_index_offset);
+           printf ("Process Groups Index Size   = %llu\n", b->pg_size);
+           printf ("Variable Index Offset       = %llu\n", b->vars_index_offset);
+           printf ("Variable Index Size         = %llu\n", b->vars_size);
+           printf ("Attribute Index Offset      = %llu\n", b->attrs_index_offset);
+           printf ("Attribute Index Size        = %llu\n", b->attrs_size);
+         */
+
+        adios_posix_read_process_group_index (b[idx]);
+        adios_parse_process_group_index_v1 (b[idx], &new_pg_root);
+        print_pg_index (tid, new_pg_root);
+
+        adios_posix_read_vars_index (b[idx]);
+        adios_parse_vars_index_v1 (b[idx], &new_vars_root, NULL, NULL);
+        print_variable_index (tid, new_vars_root);
+
+        adios_posix_read_attributes_index (b[idx]);
+        adios_parse_attributes_index_v1 (b[idx], &new_attrs_root);
+        print_attribute_index (tid, new_attrs_root);
+
+        adios_merge_index_v1 (subindex[tid], new_pg_root, new_vars_root, new_attrs_root); 
+
+        adios_posix_close_internal (b[idx]);
+        adios_shared_buffer_free (b[idx]);
+
+    }
+
+    if (verbose>1) {
+        //printf (DIVIDER);
+        printf ("Thread %d: End of reading all subfiles\n", tid);
+    }
+
+
+    return 0;
+}
+
+
+int get_nsubfiles (char *filename)
+{
+    char pattern[256];
+    glob_t g;
+    int err,ret;
+
+    snprintf (pattern, 256, "%s.dir/%s.*", filename, filename);
+    err = glob (pattern, GLOB_ERR | GLOB_NOSORT, NULL, &g);
+    if (!err) {
+        ret = g.gl_pathc;
+    } else {
+        switch (err) {
+            case GLOB_NOMATCH:
+                printf ("ERROR: No matching file found for %s\n", pattern);
+                break;
+
+            case GLOB_NOSPACE:
+                printf ("ERROR: Not enough memory for running glob for pattern %s\n", pattern);
+                break;
+
+            case GLOB_ABORTED:
+                printf ("ERROR: glob was aborted by a reading error for pattern %s\n", pattern);
+                printf ("errno = %d: %s\n", errno, strerror(errno));
+                break;
+        }
+        ret = 0;
+    }
+    return ret;
+}
+
+void print_pg_index (int tid, struct adios_index_process_group_struct_v1 * pg_root)
+{
+    unsigned int npg=0;
+    if (verbose>1) {
+        //printf (DIVIDER);
+        printf ("Thread %d:   Process Groups Index:\n", tid);
+    }
+    while (pg_root)
+    {
+        if (verbose>1) {
+                printf ("Thread %d:   Group: %s\n", tid, pg_root->group_name);
+                printf ("Thread %d:   \tProcess ID: %d\n", tid, pg_root->process_id);
+                printf ("Thread %d:   \tTime Name: %s\n", tid, pg_root->time_index_name);
+                printf ("Thread %d:   \tTime: %d\n", tid, pg_root->time_index);
+                printf ("Thread %d:   \tOffset in File: %llu\n", tid, pg_root->offset_in_file);
+        }
+        pg_root = pg_root->next;
+        npg++;
+    }
+    if (verbose==1) {
+        printf ("Thread %d: Number of process groups: %u\n", tid, npg);
+    }
+}
+
+void print_variable_index (int tid, struct adios_index_var_struct_v1 * vars_root)
+{
+    unsigned int nvars=0;
+    if (verbose>1) {
+        //printf (DIVIDER);
+        printf ("Thread %d: Variable Index:\n", tid);
+    }
+    while (vars_root)
+    {
+        if (verbose>1) 
+        {
+            if (!strcmp (vars_root->var_path, "/"))
+            {
+                printf ("Thread %d:   Var (Group) [ID]: /%s (%s) [%d]\n", 
+                        tid, vars_root->var_name,vars_root->group_name, vars_root->id
+                       );
+            }
+            else
+            {
+                printf ("Thread %d:   Var (Group) [ID]: %s/%s (%s) [%d]\n", 
+                        tid, vars_root->var_path, 
+                        vars_root->var_name, vars_root->group_name, vars_root->id
+                       );
+            }
+            const char * typestr = adios_type_to_string_int (vars_root->type);
+            printf ("Thread %d: \tDatatype: %s\n", tid, typestr);
+            printf ("Thread %d: \tVars Characteristics: %llu\n",
+                    tid, vars_root->characteristics_count
+                   );
+            uint64_t i;
+            for (i = 0; i < vars_root->characteristics_count; i++)
+            {
+                printf ("Thread %d: \tOffset(%llu)", tid, vars_root->characteristics [i].offset);
+                printf ("\tPayload Offset(%llu)", vars_root->characteristics [i].payload_offset);
+                printf ("\tFile Index(%d)", vars_root->characteristics [i].file_index);
+                printf ("\tTime Index(%d)", vars_root->characteristics [i].time_index);
+
+                /* NCSU - Print min, max */
+                if (vars_root->type == adios_complex || vars_root->type == adios_double_complex)
+                {
+                    uint8_t type;
+
+                    if (vars_root->type == adios_complex)
+                        type = adios_double;
+                    else
+                        type = adios_long_double;
+
+
+                    if (vars_root->characteristics [i].stats && vars_root->characteristics [i].stats[0][adios_statistic_min].data)
+                    {
+                        printf ("\tMin(%s)", bp_value_to_string (type
+                                    ,vars_root->characteristics [i].stats[0][adios_statistic_min].data
+                                    )
+                               );
+                    }
+                    if (vars_root->characteristics [i].stats && vars_root->characteristics [i].stats[0][adios_statistic_max].data)
+                    {
+                        printf ("\tMax(%s)", bp_value_to_string (type
+                                    ,vars_root->characteristics [i].stats[0][adios_statistic_max].data
+                                    )
+                               );
+                    }
+                }
+                else
+                {
+                    if (vars_root->characteristics [i].stats && vars_root->characteristics [i].stats[0][adios_statistic_min].data)
+                    {
+                        printf ("\tMin(%s)", bp_value_to_string (vars_root->type
+                                    ,vars_root->characteristics [i].stats[0][adios_statistic_min].data
+                                    )
+                               );
+                    }
+                    if (vars_root->characteristics [i].stats && vars_root->characteristics [i].stats[0][adios_statistic_max].data)
+                    {
+                        printf ("\tMax(%s)", bp_value_to_string (vars_root->type
+                                    ,vars_root->characteristics [i].stats[0][adios_statistic_max].data
+                                    )
+                               );
+                    }
+                }
+                //*/
+
+                if (vars_root->characteristics [i].value)
+                {
+                    if (vars_root->type != adios_string)
+                        printf ("\tValue(%s)", bp_value_to_string (vars_root->type,
+                                    vars_root->characteristics [i].value));
+                    else
+                        printf ("\tValue(\"%s\")", bp_value_to_string (vars_root->type,
+                                    vars_root->characteristics [i].value));
+                }
+                if (vars_root->characteristics [i].dims.count != 0)
+                {
+                    int j;
+
+                    printf ("\tDims (l:g:o): (");
+                    for (j = 0; j < vars_root->characteristics [i].dims.count; j++)
+                    {
+                        if (j != 0)
+                            printf (",");
+                        if (  vars_root->characteristics [i].dims.dims [j * 3 + 1]
+                                != 0
+                           )
+                        {
+                            printf ("%llu:%llu:%llu"
+                                    ,vars_root->characteristics [i].dims.dims [j * 3 + 0]
+                                    ,vars_root->characteristics [i].dims.dims [j * 3 + 1]
+                                    ,vars_root->characteristics [i].dims.dims [j * 3 + 2]
+                                   );
+                        }
+                        else
+                        {
+                            printf ("%llu"
+                                    ,vars_root->characteristics [i].dims.dims [j * 3 + 0]
+                                   );
+                        }
+                    }
+                    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");
+            }
+
+        }
+        vars_root = vars_root->next;
+        nvars++;
+    }
+    if (verbose==1) {
+        printf ("Thread %d: Number of variables: %u\n", tid, nvars);
+    }
+}
+
+void print_attribute_index (int tid, struct adios_index_attribute_struct_v1 * attrs_root)
+{
+    unsigned int nattrs=0;
+    if (verbose>1) {
+        //printf (DIVIDER);
+        printf ("Thread %d: Attribute Index:\n", tid);
+    }
+    while (attrs_root)
+    {
+        if (verbose>1)
+        {
+            if (!strcmp (attrs_root->attr_path, "/"))
+            {
+                printf ("Thread %d:   Attribute (Group) [ID]: /%s (%s) [%d]\n",
+                        tid, attrs_root->attr_name, attrs_root->group_name,
+                        attrs_root->id
+                       );
+            }
+            else
+            {
+                printf ("Thread %d:   Attribute (Group) [ID]: %s/%s (%s) [%d]\n",
+                        tid, attrs_root->attr_path, attrs_root->attr_name, 
+                        attrs_root->group_name, attrs_root->id
+                       );
+            }
+            printf ("Thread %d: \tDatatype: %s\n", tid, 
+                        adios_type_to_string_int (attrs_root->type));
+            printf ("Thread %d: \tAttribute Characteristics: %llu\n", tid,
+                        attrs_root->characteristics_count
+                   );
+            uint64_t i;
+            for (i = 0; i < attrs_root->characteristics_count; i++)
+            {
+                printf ("Thread %d: \t\tOffset(%llu)", tid, 
+                            attrs_root->characteristics [i].offset);
+                printf ("\t\tPayload Offset(%llu)", attrs_root->characteristics [i].payload_offset);
+                printf ("\t\tFile Index(%d)", attrs_root->characteristics [i].file_index);
+                printf ("\t\tTime Index(%d)", attrs_root->characteristics [i].time_index);
+
+                /* NCSU - Print min, max  */
+                if (attrs_root->type == adios_complex || attrs_root->type == adios_double_complex)
+                {
+                    uint8_t type;
+                    if (attrs_root->type == adios_complex)
+                        type = adios_double;
+                    else
+                        type = adios_long_double;
+
+                    if (attrs_root->characteristics [i].stats && attrs_root->characteristics [i].stats[0][adios_statistic_min].data)
+                    {
+                        printf ("\tMin(%s)", bp_value_to_string (type
+                                    ,attrs_root->characteristics [i].stats[0][adios_statistic_min].data
+                                    )
+                               );
+                    }
+                    if (attrs_root->characteristics [i].stats && attrs_root->characteristics [i].stats[0][adios_statistic_max].data)
+                    {
+                        printf ("\tMax(%s)", bp_value_to_string (type
+                                    ,attrs_root->characteristics [i].stats[0][adios_statistic_max].data
+                                    )
+                               );
+                    }
+                }
+                else
+                {
+                    if (attrs_root->characteristics [i].stats && attrs_root->characteristics [i].stats[0][adios_statistic_min].data)
+                    {
+                        printf ("\tMin(%s)", bp_value_to_string (attrs_root->type
+                                    ,attrs_root->characteristics [i].stats[0][adios_statistic_min].data
+                                    )
+                               );
+                    }
+                    if (attrs_root->characteristics [i].stats && attrs_root->characteristics [i].stats[0][adios_statistic_max].data)
+                    {
+                        printf ("\tMax(%s)", bp_value_to_string (attrs_root->type
+                                    ,attrs_root->characteristics [i].stats[0][adios_statistic_max].data
+                                    )
+                               );
+                    }
+                }
+
+                if (attrs_root->characteristics [i].value)
+                {
+                    printf ("\t\tValue(%s)", bp_value_to_string (attrs_root->type
+                                ,attrs_root->characteristics [i].value
+                                )
+                           );
+                }
+                if (attrs_root->characteristics [i].var_id)
+                {
+                    printf ("\t\tVar(%u)", attrs_root->characteristics [i].var_id);
+                }
+                if (attrs_root->characteristics [i].dims.count != 0)
+                {
+                    int j;
+
+                    printf ("\t\tDims (l:g:o): (");
+                    for (j = 0; j < attrs_root->characteristics [i].dims.count; j++)
+                    {
+                        if (j != 0)
+                            printf (",");
+                        if (  attrs_root->characteristics [i].dims.dims [j * 3 + 1]
+                                != 0
+                           )
+                        {
+                            printf ("%llu:%llu:%llu"
+                                    ,attrs_root->characteristics [i].dims.dims [j * 3 + 0]
+                                    ,attrs_root->characteristics [i].dims.dims [j * 3 + 1]
+                                    ,attrs_root->characteristics [i].dims.dims [j * 3 + 2]
+                                   );
+                        }
+                        else
+                        {
+                            printf ("%llu"
+                                    ,attrs_root->characteristics [i].dims.dims [j * 3 + 0]
+                                   );
+                        }
+                    }
+                    printf (")");
+                }
+                printf ("\n");
+            }
+        }
+
+        attrs_root = attrs_root->next;
+        nattrs++;
+    }
+    if (verbose==1) {
+        printf ("Thread %d: Number of attributes: %u\n", tid, nattrs);
+    }
+}
diff --git a/utils/bpsplit/Makefile.am b/utils/bpsplit/Makefile.am
index 935d8c9..daf1680 100644
--- a/utils/bpsplit/Makefile.am
+++ b/utils/bpsplit/Makefile.am
@@ -1,24 +1,24 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
 bin_PROGRAMS = bpsplit bpappend bpgettime
 
 bpsplit_SOURCES = bpsplit.c
-bpsplit_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpsplit_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpsplit_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpsplit_LDADD = $(top_builddir)/src/libadios_internal_nompi.a 
 bpsplit_LDADD += $(ADIOSLIB_INT_LDADD)
 
 bpappend_SOURCES = bpappend.c
-bpappend_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpappend_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpappend_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpappend_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
 bpappend_LDADD += $(ADIOSLIB_INT_LDADD)
 
 bpgettime_SOURCES = bpgettime.c
-bpgettime_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpgettime_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpgettime_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpgettime_LDADD = $(top_builddir)/src/libadios_internal_nompi.a
 bpgettime_LDADD += $(ADIOSLIB_INT_LDADD)
diff --git a/utils/bpsplit/Makefile.in b/utils/bpsplit/Makefile.in
index 317eea4..899cd15 100644
--- a/utils/bpsplit/Makefile.in
+++ b/utils/bpsplit/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -141,6 +147,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -200,6 +208,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -299,11 +310,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -369,21 +382,21 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(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)
+bpsplit_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpsplit_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpsplit_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
 bpappend_SOURCES = bpappend.c
-bpappend_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpappend_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpappend_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpappend_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
 bpgettime_SOURCES = bpgettime.c
-bpgettime_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
+bpgettime_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
 bpgettime_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
 bpgettime_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
 	$(ADIOSLIB_INT_LDADD)
diff --git a/utils/fastbit/CMakeLists.txt b/utils/fastbit/CMakeLists.txt
new file mode 100644
index 0000000..b9f9d38
--- /dev/null
+++ b/utils/fastbit/CMakeLists.txt
@@ -0,0 +1,12 @@
+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}/src)
+
+add_executable(adios_index_fastbit adios_index_fastbit.c)
+target_link_libraries(adios_index_fastbit adios ${ADIOSLIB_LDADD})
+set_target_properties(adios_index_fastbit PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS}")
+
+install(PROGRAMS ${CMAKE_BINARY_DIR}/utils/fastbit/adios_index_fastbit DESTINATION ${bindir})
diff --git a/utils/fastbit/Makefile.am b/utils/fastbit/Makefile.am
new file mode 100644
index 0000000..b97cb13
--- /dev/null
+++ b/utils/fastbit/Makefile.am
@@ -0,0 +1,19 @@
+AUTOMAKE_OPTIONS = no-dependencies
+
+INCLUDES = $(all_includes)
+
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/core
+
+
+bin_PROGRAMS = adios_index_fastbit
+
+adios_index_fastbit_SOURCES = adios_index_fastbit.c 
+
+adios_index_fastbit_CPPFLAGS = $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS)
+adios_index_fastbit_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_index_fastbit_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.idx
+
+
+CC=$(MPICC)
diff --git a/utils/bp2bp/Makefile.in b/utils/fastbit/Makefile.in
similarity index 88%
copy from utils/bp2bp/Makefile.in
copy to utils/fastbit/Makefile.in
index 5703b67..a018356 100644
--- a/utils/bp2bp/Makefile.in
+++ b/utils/fastbit/Makefile.in
@@ -34,8 +34,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = bp2bp$(EXEEXT)
-subdir = utils/bp2bp
+bin_PROGRAMS = adios_index_fastbit$(EXEEXT)
+subdir = utils/fastbit
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -78,14 +84,15 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bp2bp_OBJECTS = bp2bp-bp2bp.$(OBJEXT)
-bp2bp_OBJECTS = $(am_bp2bp_OBJECTS)
+am_adios_index_fastbit_OBJECTS =  \
+	adios_index_fastbit-adios_index_fastbit.$(OBJEXT)
+adios_index_fastbit_OBJECTS = $(am_adios_index_fastbit_OBJECTS)
 am__DEPENDENCIES_1 =
-bp2bp_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+adios_index_fastbit_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-bp2bp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bp2bp_LDFLAGS) \
-	$(LDFLAGS) -o $@
+adios_index_fastbit_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(adios_index_fastbit_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -98,8 +105,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(bp2bp_SOURCES)
-DIST_SOURCES = $(bp2bp_SOURCES)
+SOURCES = $(adios_index_fastbit_SOURCES)
+DIST_SOURCES = $(adios_index_fastbit_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -125,6 +132,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -140,8 +149,6 @@ AWK = @AWK@
 BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
 BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
 BZIP2_LIBS = @BZIP2_LIBS@
-
-#if USE_PARALLEL_COMPILER
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -154,7 +161,7 @@ CRAY_UGNI_CPPFLAGS = @CRAY_UGNI_CPPFLAGS@
 CRAY_UGNI_LDFLAGS = @CRAY_UGNI_LDFLAGS@
 CRAY_UGNI_LIBS = @CRAY_UGNI_LIBS@
 CSH = @CSH@
-CXX = $(MPICXX)
+CXX = @CXX@
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
@@ -184,6 +191,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -283,11 +293,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -353,13 +365,14 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-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) 
-bp2bp_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
-bp2bp_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/core
+adios_index_fastbit_SOURCES = adios_index_fastbit.c 
+adios_index_fastbit_CPPFLAGS = $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS)
+adios_index_fastbit_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_index_fastbit_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+CLEANFILES = *.idx
 all: all-am
 
 .SUFFIXES:
@@ -373,9 +386,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bp2bp/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/fastbit/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bp2bp/Makefile
+	  $(AUTOMAKE) --gnu utils/fastbit/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -437,9 +450,9 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bp2bp$(EXEEXT): $(bp2bp_OBJECTS) $(bp2bp_DEPENDENCIES) 
-	@rm -f bp2bp$(EXEEXT)
-	$(bp2bp_LINK) $(bp2bp_OBJECTS) $(bp2bp_LDADD) $(LIBS)
+adios_index_fastbit$(EXEEXT): $(adios_index_fastbit_OBJECTS) $(adios_index_fastbit_DEPENDENCIES) 
+	@rm -f adios_index_fastbit$(EXEEXT)
+	$(adios_index_fastbit_LINK) $(adios_index_fastbit_OBJECTS) $(adios_index_fastbit_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -456,11 +469,11 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
-bp2bp-bp2bp.o: bp2bp.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bp2bp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bp2bp-bp2bp.o `test -f 'bp2bp.c' || echo '$(srcdir)/'`bp2bp.c
+adios_index_fastbit-adios_index_fastbit.o: adios_index_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_index_fastbit_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_index_fastbit-adios_index_fastbit.o `test -f 'adios_index_fastbit.c' || echo '$(srcdir)/'`adios_index_fastbit.c
 
-bp2bp-bp2bp.obj: bp2bp.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bp2bp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bp2bp-bp2bp.obj `if test -f 'bp2bp.c'; then $(CYGPATH_W) 'bp2bp.c'; else $(CYGPATH_W) '$(srcdir)/bp2bp.c'; fi`
+adios_index_fastbit-adios_index_fastbit.obj: adios_index_fastbit.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adios_index_fastbit_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adios_index_fastbit-adios_index_fastbit.obj `if test -f 'adios_index_fastbit.c'; then $(CYGPATH_W) 'adios_index_fastbit.c'; else $(CYGPATH_W) '$(srcdir)/adios_index_fastbit.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -574,6 +587,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -666,7 +680,6 @@ uninstall-am: uninstall-binPROGRAMS
 	pdf pdf-am ps ps-am tags uninstall uninstall-am \
 	uninstall-binPROGRAMS
 
-#endif
 
 # 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/fastbit/README b/utils/fastbit/README
new file mode 100644
index 0000000..3699167
--- /dev/null
+++ b/utils/fastbit/README
@@ -0,0 +1,14 @@
+Usage:
+
+* To index an ADIOS .bp file:
+  ./adios_index_fastbit path/bpFileName
+* To index variable(s):
+  ./adios_index_fastbit path/bpFileName var1 var2 ..
+
+note that the idx file from foo.bp
+will be named foo.idx, and will reside in the same
+dir as in foo.bp
+
+if foo.idx exists, it will be overwritten.
+
+
diff --git a/utils/fastbit/adios_index_fastbit.c b/utils/fastbit/adios_index_fastbit.c
new file mode 100644
index 0000000..68468d2
--- /dev/null
+++ b/utils/fastbit/adios_index_fastbit.c
@@ -0,0 +1,566 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "public/adios.h"
+#include "public/adios_read.h"
+#include <iapi.h>
+
+#include "../../src/query/fastbit_adios.h"
+
+  char gVarNameFastbitIdxKey[10] = "key";
+  char gVarNameFastbitIdxOffset[10] = "offsets";
+  char gVarNameFastbitIdxBms[10] = "bms";
+
+  char gGroupNameFastbitIdx[20] = "notNamed";
+
+  char* gBinningOption = 0;
+
+  int64_t       gAdios_group;
+  int64_t       gAdios_write_file;
+
+  time_t        lastMeasured;
+  time_t        indexRefresh;
+  time_t        fileStarted;
+
+  long   _lastMeasuredMillis;
+  long   _indexRefreshMillis;
+  long   _fileStartedMillis;
+
+  uint64_t sum_nb=0, sum_nk=0, sum_no=0;
+
+//void printData(void* data, enum ADIOS_DATATYPES type, uint64_t size);
+
+void defineFastbitVar(int nblocks, const char* name, int64_t* ids, int adiosType, uint64_t* localDim, const char* globalStr, uint64_t* offset)
+{
+  int i=0;
+  for (i = 0; i < nblocks; i++) 
+  {
+    //int offset= i*5;
+    char offsetStr[100] = "";
+    if (offset != NULL) {
+      sprintf(offsetStr, "%llu", offset[i]);
+    } 
+
+    char dimStr[100];
+    sprintf(dimStr, "%llu", localDim[i]);
+    ids[i] = adios_define_var (gAdios_group, name, "", adiosType, dimStr, globalStr, offsetStr);
+    //adios_set_transform (ids[i], "identity");
+  }
+}
+
+
+// k is numbered from 1 to sum_nblocks
+void verifyData(ADIOS_FILE* f, ADIOS_VARINFO* v, int k, int timestep) 
+{
+  uint64_t blockBytes = adios_type_size (v->type, v->value);
+  int j=0;
+
+  if (v->ndim <= 0) {
+    return;
+  }
+
+  //printf("verify block[%d]: ", k);
+  
+      for (j=0; j<v->ndim; j++) 
+      {  
+	  blockBytes *= v->blockinfo[k].count[j];
+	  //printf("%llu:%llu ", v->blockinfo[k].start[j], v->blockinfo[k].count[j]);
+      }
+
+      void* data = NULL;
+      data = malloc(blockBytes);  
+      ADIOS_SELECTION* sel =  adios_selection_boundingbox (v->ndim, v->blockinfo[k].start, v->blockinfo[k].count);
+      int err = adios_schedule_read_byid(f, sel, v->varid, timestep, 1, data);      
+      if (!err) {	
+	   err = adios_perform_reads(f, 1);
+      }
+      //fastbit_adios_util_printData(data, v->type, blockBytes/adios_type_size(v->type, v->value));
+      adios_selection_delete(sel);
+      free(data);	 
+      data = NULL;
+}
+
+
+
+void assertErr(long int errCode, const char* exp, const char* refName) 
+{
+  if (errCode < 0) {
+    printf("errCode=%ld %s %s\n", errCode, exp, refName);
+    exit(EXIT_FAILURE);
+  } 
+}
+
+void fastbitIndex(const char* datasetName, void* data, uint64_t blockSize, FastBitDataType ft, 
+		  double**keys, uint64_t*nk, int64_t**offsets, uint64_t*no,		  
+		  uint32_t**bms, uint64_t*nb)
+{
+  long int fastbitErr;
+
+  fastbitErr = fastbit_iapi_register_array(datasetName, ft, data, blockSize);
+  assertErr(fastbitErr, "failed to register array with", datasetName);
+  
+  fastbitErr = fastbit_iapi_build_index(datasetName, (const char*)gBinningOption);
+  assertErr(fastbitErr, "failed to build idx with ", datasetName);
+  
+  
+  fastbitErr = fastbit_iapi_deconstruct_index(datasetName, keys, nk, offsets, no, bms, nb);
+  assertErr(fastbitErr, "failed with fastbit_iapi_deconstruct on ", datasetName);
+  
+  //printf("nk/no/nb %lld %lld %lld\n", *nk, *no, *nb);
+  
+  fastbit_iapi_free_all();
+
+  /*free(offsets);
+
+  free(keys);
+
+  free(bms);
+  */
+}
+
+
+void logTimeMillis(const char* notes) 
+{
+#ifndef SHOW_TIMESTUDY
+    return;
+#endif
+  long ms = fastbit_adios_getCurrentTimeMillis();
+
+  if (notes == NULL) {
+     printf("\n");
+     _indexRefreshMillis = ms;
+  } else {
+    long d = ms - _lastMeasuredMillis;
+    printf("   ELAPSED millis: %ld \t%s\n", d, notes);
+  }
+  _lastMeasuredMillis = ms;
+}
+
+
+void sumLogTimeMillis(int stage) {
+#ifndef SHOW_TIMESTUDY
+    return;
+#endif
+
+  long ms = fastbit_adios_getCurrentTimeMillis();
+
+  if (stage == -1) { // init
+    _lastMeasuredMillis = ms;
+    _indexRefreshMillis = ms;
+    _fileStartedMillis = ms;
+  } else if (stage == 0) { // whole program    
+    printf("\n==> Total time spent to process this FILE: %ld millis.\n", ms - _fileStartedMillis);    
+  } else if (stage == 1) { // block
+    printf("==>  Total time spent to process this block: %ld millis. \n", ms - _indexRefreshMillis);
+    _indexRefreshMillis = ms;
+  } else if (stage == 2) { // variable
+    //printf("==>  total time spent to process this variable: %ld millis. \n", ms - _indexRefreshMillis);
+    //_indexRefreshMillis = ms;
+  }
+}
+
+
+void logTime(const char* notes) {
+  /*
+  char buff[300];
+  struct tm * timeinfo;
+  time_t now = time(0);
+  timeinfo = localtime (&now);
+  strftime(buff, 30, "%b %d %H:%M:%S", timeinfo); 
+
+  if (notes == NULL) {
+    //printf("\n  ====== %s\n", buff); 
+     printf("\n"); 
+     indexRefresh = now;
+  } else {
+     double d = difftime(now, lastMeasured);
+     printf("%s elapsed (sec) %4.0f %s\n", buff, d, notes); 
+  }
+  lastMeasured = now;
+  */
+}
+
+void sumLogTime(int stage) {
+  /*
+  time_t now = time(0);
+  struct tm* timeinfo = localtime(&now);
+  if (stage == -1) { // init
+    lastMeasured = now;
+    indexRefresh = now;
+    fileStarted = now;
+  } else if (stage == 0) { // whole program    
+    double d = difftime(now, fileStarted);
+    printf("==> total time spent to process this FILE: %4.0f seconds.\n", d);    
+  } else if (stage == 1) { // block
+    double d = difftime(now, indexRefresh);
+    printf("==>  total time spent to process this block: %4.0f seconds. \n", d);
+    indexRefresh = now;
+  } else if (stage == 2) { // variable
+    //double d = difftime(now, indexRefresh);
+    //printf("==>  total time spent to process this variable: %4.0f seconds. \n", d);
+    //indexRefresh = now;
+  }
+  */
+}
+
+void onBlock(int rank, ADIOS_FILE* f, ADIOS_VARINFO* v, int i, int j, int blockCounter, FastBitDataType ft)
+{
+      char bmsVarName[100];
+      char keyVarName[100];
+      char offsetName[100];
+
+       int64_t       var_ids_bms[v->nblocks[i]];
+       int64_t       var_ids_key[v->nblocks[i]];
+       int64_t       var_ids_offset[v->nblocks[i]];
+
+
+       
+	 sprintf(bmsVarName, "bms-%d-%d-%d", v->varid, i, j);
+	 sprintf(keyVarName, "key-%d-%d-%d", v->varid, i, j);
+	 sprintf(offsetName, "offset-%d-%d-%d", v->varid, i, j);
+
+	 //	 blockCounter++;
+	 uint64_t blockSize = fastbit_adios_util_getBlockSize(v, i, j); //blockCounter);
+	 uint64_t blockDataByteSize = adios_type_size (v->type, v->value) * blockSize; 
+
+	 char notes[100];
+	 logTime(NULL); logTimeMillis(NULL);
+
+	 sprintf(notes, "  reading data from adios  on varid=%d, time=%d, block: %d, size=%ld bytes=%ld", v->varid, i, j, blockSize, blockDataByteSize);
+
+	 logTime(notes); logTimeMillis(notes);
+	 localtime(&indexRefresh);
+
+	    //printf("   %d th block / (%d), size= %llu bytes=%llu", j, blockSize, blockCounter, blockDataByteSize);
+	    
+	    void* data = malloc (blockDataByteSize);
+	    ADIOS_SELECTION* blockSel = adios_selection_writeblock(j);
+
+	    //adios_selcton_writeblock(num),  0 <= num <  nblocks[timestep]
+	    //ADIOS_SELECTION* blockSel = adios_selection_writeblock(blockCounter);
+	    int err = adios_schedule_read_byid(f, blockSel, v->varid, i, 1, data);
+	    if (!err) {	
+	      err = adios_perform_reads(f, 1);
+	    } else {
+	      printf("Unable to read block %d at timestep: %d \n", j, i);
+	      return;
+	      //break;
+	    }
+	    //fastbit_adios_util_printData(data, v->type, blockSize);
+	   
+	    double* keys = NULL;
+	    int64_t *offsets = NULL;
+	    uint32_t *bms = NULL;
+	    uint64_t nk=0, no=0, nb=0;
+	    
+	    const char* datasetName = "test";
+	    logTime("  data collected, fastbit start indexing"); 
+	    logTimeMillis("  data collected, fastbit start indexing"); 
+	    //fastbit_adios_util_printData(data, v->type, blockBytes/adios_type_size(v->type, v->value));
+
+	    fastbitIndex(datasetName, data, blockSize, ft, &keys, &nk, &offsets, &no, &bms, &nb);
+	    logTime("  indexed on block");
+	    logTimeMillis("  indexed on block");
+
+	    printf("    rank:%d, index created =  %llu, %llu, %llu, on var:%d, timestep: %d, block %d\n", rank, nb, nk, no, v->varid, i, j);
+	    sum_nb += nb; sum_nk += nk, sum_no += no;
+
+	    defineFastbitVar(1,bmsVarName, &var_ids_bms[j], adios_unsigned_integer, &nb,0,0);    			    
+	    defineFastbitVar(1, keyVarName, &var_ids_key[j], adios_double, &nk, 0, 0);
+	    defineFastbitVar(1, offsetName, &var_ids_offset[j], adios_long, &no, 0, 0); 
+
+	    logTime("  write starts");
+	    logTimeMillis("  write starts");
+	    adios_write_byid(gAdios_write_file, var_ids_bms[j], bms);
+	    adios_write_byid(gAdios_write_file, var_ids_key[j], keys);
+	    adios_write_byid(gAdios_write_file, var_ids_offset[j], offsets);
+	    logTime("  write ends");
+	    logTimeMillis("  write ends");
+	    sumLogTime(1);
+	    sumLogTimeMillis(1);
+
+	    adios_selection_delete(blockSel);
+	    free(data);	 
+
+	    verifyData(f, v, blockCounter, i);
+}
+
+void buildIndex_mpi(ADIOS_FILE* f, ADIOS_VARINFO* v, int rank, int size)
+{
+
+  adios_inq_var_blockinfo(f, v);
+
+  int i=0;
+  int j=0;
+  int k=0;
+
+  printf("building index on variable %d, binning op=%s\n", v->varid, gBinningOption);
+
+  int blockCounter = -1;
+  FastBitDataType ft = fastbit_adios_util_getFastbitDataType(v->type);
+
+  for (i=0; i < v->nsteps; i++) {
+       int nblocks = v->nblocks[i];
+
+       for (j=0; j < v->nblocks[i]; j++) {
+	 blockCounter++;
+	 if (blockCounter % size == rank) {
+	   onBlock(rank, f, v, i, j, blockCounter, ft);
+	 }
+       }
+       printf(" rank %d, varid %d, timestep %d  total index created =  %llu, %llu, %llu, \n", rank, v->varid, i, sum_nb, sum_nk, sum_no);
+       printf(" rank %d, varid %d, timestep %d  total bytes         =  %llu, %llu, %llu, \n", rank, v->varid, i,
+	      adios_type_size(adios_unsigned_integer , NULL)*sum_nb,
+	      adios_type_size(adios_double, NULL)*sum_nk, 
+	      adios_type_size(adios_long, NULL)*sum_no);
+       fastbit_cleanup();
+       printf("\n");
+  }
+}
+
+void buildIndexOnAllVar(ADIOS_FILE* f, int rank, int size) 
+{
+  int numVars = f->nvars;
+  
+  int i=0;
+  for (i=0; i<numVars; i++) {
+    char* varName = f->var_namelist[i];
+    ADIOS_VARINFO* v = adios_inq_var(f, varName);
+
+    if (rank == 0) {
+      printf("\n==> building fastbit index on  %dth variable: %s, %s ", i, varName, gBinningOption);
+    }
+
+    if (v->ndim > 0) {
+      buildIndex_mpi(f, v, rank, size);
+    } else {
+      if (rank == 0) {
+	printf("\t ... skipping scalar ...\n");
+      }
+    }
+    adios_free_varinfo(v);
+  }
+}
+
+uint64_t estimateBytesOnVar(ADIOS_FILE* f, ADIOS_VARINFO* v) 
+{
+    if (v->ndim == 0) {
+      return 0;
+    }
+
+    adios_inq_var_blockinfo(f, v);
+
+    uint64_t result = 0;
+    int i = 0; 
+    int j = 0;
+    for (i=0; i<v->sum_nblocks; i++) {
+      ADIOS_VARBLOCK curr = v->blockinfo[i];
+
+      uint64_t blockSize = fastbit_adios_util_getBlockSize(v, -1, i); 
+      result += blockSize;
+      //uint64_t blockDataByteSize = adios_type_size (v->type, v->value) * blockSize0; 
+
+      /*uint64_t blockSize = 1;
+      for (j=0; j<v->ndim; j++) {
+	blockSize = blockSize* curr.count[j];
+      }
+      result += blockSize;
+      */
+    }
+
+    return adios_type_size (v->type, v->value) * result; 
+    //int typeSize = adios_type_size(v->type, NULL);
+    //return result * typeSize;
+}
+
+int64_t getByteEstimationOnFile(ADIOS_FILE* f, int rank) 
+{
+  // check all vars
+  int numVars = f->nvars;
+  uint64_t bytes = 0;
+
+  int i=0;
+  for (i=0; i<numVars; i++) {
+    char* varName = f->var_namelist[i];
+    ADIOS_VARINFO* v = adios_inq_var(f, varName);
+
+    uint64_t varSize = estimateBytesOnVar(f, v);
+    if (rank == 0) {
+      printf(" var: %s has size: %lld\n", varName, varSize);
+    }
+    bytes += varSize;
+
+    adios_free_varinfo(v);
+  }
+  return bytes;
+
+}
+int64_t getByteEstimation(ADIOS_FILE* f, int rank, int argc, char** argv)
+{
+  uint64_t bytes = 0;
+
+  if (argc >= 3) {
+    int i=2;
+    while (i<argc) {
+      const char* varName = argv[i];      
+      if(strstr(varName, "<binning prec") != NULL) {
+	if (gBinningOption == NULL) {
+	   gBinningOption = argv[i];
+	}
+	if (argc == 3) {
+	  return getByteEstimationOnFile(f, rank);
+	}
+	i++;
+	continue;
+      }
+      ADIOS_VARINFO * v = adios_inq_var(f, varName);
+      if (v == NULL) {
+	printf("Invalid variable: %s\n", varName);	
+	return -1;
+      }
+      uint64_t varSize = estimateBytesOnVar(f, v);
+      printf(" var: %s has size: %lld\n", varName, varSize);
+      bytes += varSize;
+      adios_free_varinfo(v);
+      i++;
+    } 
+    return bytes;
+  } else { 
+    return getByteEstimationOnFile(f,rank);
+  }
+}
+
+int main (int argc, char** argv) 
+{
+  fastbit_init(0);
+  fastbit_set_verbose_level(0);
+
+  ADIOS_FILE * f;
+  //MPI_Comm    comm_dummy = 0;  // MPI_Comm is defined through adios_read.h 
+  MPI_Comm comm_dummy = MPI_COMM_WORLD;
+
+
+  int         rank, size;
+  MPI_Init (&argc, &argv);			   
+  MPI_Comm_rank (comm_dummy, &rank);
+  MPI_Comm_size (comm_dummy, &size);
+
+  adios_init_noxml (comm_dummy);
+
+  char *idxFileName;
+  
+  if (argc < 2) {
+    printf("Usage: index_fastbit fileName (attrName)");
+    return 0;
+  }
+
+  f = adios_read_open_file (argv[1], ADIOS_READ_METHOD_BP, comm_dummy);
+  if (f == NULL) {
+    printf ("::%s\n", adios_errmsg());
+    return -1;
+  }
+
+  adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, (f->file_size)*2/1048576 + 5); // +5MB for extra room in buffer
+  adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_flag_yes);
+  adios_select_method (gAdios_group, "MPI", "", "");
+
+  
+  idxFileName = fastbit_adios_util_getFastbitIndexFileName(argv[1]);
+
+  unlink(idxFileName);
+  adios_open (&gAdios_write_file, gGroupNameFastbitIdx, idxFileName, "w", comm_dummy);
+
+  uint64_t adios_totalsize;
+  
+  uint64_t estimatedbytes = getByteEstimation(f, rank, argc, argv);
+  // each processor is writing call this function, so the eventual size would add up 
+  adios_group_size (gAdios_write_file, estimatedbytes/size+1048576, &adios_totalsize);     
+
+  printf("=> adios open output file: %s, rank %d allocated %llu bytes... \n", idxFileName, rank, adios_totalsize); 
+
+  sumLogTime(-1);
+  sumLogTimeMillis(-1);
+
+  if (argc >= 3) {
+     int i=2;
+     while (i<argc) {
+        const char* varName = argv[i];
+	if(strstr(varName, "<binning prec") != NULL) {
+	  if (gBinningOption == NULL) {
+	    gBinningOption = argv[i];
+	  }
+	  if (argc == 3) {
+	    buildIndexOnAllVar(f, rank, size);
+	    break;
+	  }
+	  i++;
+	  continue;
+	} else {
+	  ADIOS_VARINFO * v = adios_inq_var(f, varName);
+	  if (v == NULL) {
+	     printf("No such variable: %s\n", varName);
+	     return 0;
+	   }	
+	  printf("building fastbit index on  variable: %s\n", varName);
+	  buildIndex_mpi(f, v, rank, size);
+	  adios_free_varinfo(v);
+	  i++;
+	}
+     }
+  } else {
+    buildIndexOnAllVar(f, rank, size);
+  }
+
+  sumLogTime(0);
+  sumLogTimeMillis(0);
+
+  adios_close(gAdios_write_file);
+  adios_read_close(f);
+
+  //
+  // writing file clean up
+  //
+
+
+  // read back:
+  f = adios_read_open_file (idxFileName, ADIOS_READ_METHOD_BP, comm_dummy);
+  if (f == NULL) {
+    printf("No such file: %s \n", idxFileName);
+    return 0;
+  }
+
+  int numVars = f->nvars;
+  
+  int i=0;
+  int k=0;
+  int j=0;
+  for (i=0; i<numVars; i++) {
+      char* varName = f->var_namelist[i];
+      ADIOS_VARINFO* v = adios_inq_var(f, varName);
+
+       adios_inq_var_blockinfo(f,v);      
+      int timestep = 0;
+      for (k=0; k<v->sum_nblocks; k++) {
+	  verifyData(f, v, k, timestep);
+      }
+
+      adios_free_varinfo(v);
+  }
+
+  adios_read_close(f);
+
+  if (rank == 0) {
+    printf(" ==>  index file is at: %s\n", idxFileName);
+  }
+
+  // clean up
+  MPI_Barrier (comm_dummy);
+  adios_finalize (rank);
+  MPI_Finalize ();
+  free (idxFileName);
+
+  fastbit_cleanup();
+  return 0;
+}
+
+
diff --git a/utils/gpp/Makefile.in b/utils/gpp/Makefile.in
index 496f2ff..6a2d4f5 100644
--- a/utils/gpp/Makefile.in
+++ b/utils/gpp/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -124,6 +130,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -181,6 +189,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -280,11 +291,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/utils/gpp/gpp.py b/utils/gpp/gpp.py
index 34b57a8..87f1320 100755
--- a/utils/gpp/gpp.py
+++ b/utils/gpp/gpp.py
@@ -64,7 +64,10 @@ def get_fortran_groupsize_code (group):
     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                + ')
+            if v.get_type() != 'string':
+                groupsize_code_string += ('%d' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
+            else:
+                groupsize_code_string += ('len_trim(' + v.get_gwrite() + ')' + ' &\n                + ')
         else:
             groupsize_code_string += ('%d * ' % type_mapper.get_size (v.get_type() ) )
 
@@ -150,7 +153,7 @@ def get_fortran_read_statements (group):
         if var.get_dimensions() == None:
             continue
 
-        statements += 'call adios_schedule_read (fp, s, "' + var.get_name() + '", 1, 1, ' + var.get_gwrite() + ', adios_err)\n'
+        statements += 'call adios_schedule_read (fp, s, "' + var.get_name() + '", 0, 1, ' + var.get_gwrite() + ', adios_err)\n'
 
     statements += '\ncall adios_perform_reads (fp, adios_err)\n'
     statements += 'call adios_selection_delete (s)\n'
@@ -175,7 +178,7 @@ def get_c_read_statements (group):
         else:
             var_prefix = '&'
 
-        statements += 'adios_schedule_read (fp, s, "' + var.get_name() + '", 1, 1, ' + var_prefix + var.get_gwrite() + ');\n'
+        statements += 'adios_schedule_read (fp, s, "' + var.get_name() + '", 0, 1, ' + var_prefix + var.get_gwrite() + ');\n'
 
     statements += 'adios_perform_reads (fp, 1);\n'
     statements += 'adios_selection_delete (s);\n'
diff --git a/utils/list_methods/Makefile.am b/utils/list_methods/Makefile.am
index eb17c0d..83530e9 100644
--- a/utils/list_methods/Makefile.am
+++ b/utils/list_methods/Makefile.am
@@ -1,5 +1,5 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
@@ -8,23 +8,23 @@ bin_PROGRAMS = list_methods_readonly list_methods_readonly_nompi
 if BUILD_WRITE
 bin_PROGRAMS += list_methods list_methods_nompi 
 list_methods_SOURCES = list_methods.c
-list_methods_CPPFLAGS = ${MACRODEFFLAG}WRITE $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
+list_methods_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}WRITE $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 list_methods_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 list_methods_LDADD =  $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 
 list_methods_nompi_SOURCES = list_methods.c
-list_methods_nompi_CPPFLAGS = ${MACRODEFFLAG}WRITE $(ADIOSLIB_SEQ_CPPFLAGS) $(ADIOSLIB_SEQ_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
+list_methods_nompi_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}WRITE $(ADIOSLIB_SEQ_CPPFLAGS) $(ADIOSLIB_SEQ_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 list_methods_nompi_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS) 
 list_methods_nompi_LDADD =  $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
 endif
 
 list_methods_readonly_SOURCES = list_methods.c
-list_methods_readonly_CPPFLAGS = $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
+list_methods_readonly_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
 list_methods_readonly_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 list_methods_readonly_LDADD =  $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 
 list_methods_readonly_nompi_SOURCES = list_methods.c
-list_methods_readonly_nompi_CPPFLAGS = $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) 
+list_methods_readonly_nompi_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) 
 list_methods_readonly_nompi_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
 list_methods_readonly_nompi_LDADD =  $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
 
diff --git a/utils/list_methods/Makefile.in b/utils/list_methods/Makefile.in
index baae30f..8dec06c 100644
--- a/utils/list_methods/Makefile.in
+++ b/utils/list_methods/Makefile.in
@@ -51,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -67,11 +68,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -165,6 +171,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -224,6 +232,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -323,11 +334,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -393,23 +406,23 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 @BUILD_WRITE_TRUE at list_methods_SOURCES = list_methods.c
- at BUILD_WRITE_TRUE@list_methods_CPPFLAGS = ${MACRODEFFLAG}WRITE $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
+ at BUILD_WRITE_TRUE@list_methods_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}WRITE $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 @BUILD_WRITE_TRUE at list_methods_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 @BUILD_WRITE_TRUE at list_methods_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 @BUILD_WRITE_TRUE at list_methods_nompi_SOURCES = list_methods.c
- at BUILD_WRITE_TRUE@list_methods_nompi_CPPFLAGS = ${MACRODEFFLAG}WRITE $(ADIOSLIB_SEQ_CPPFLAGS) $(ADIOSLIB_SEQ_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
+ at BUILD_WRITE_TRUE@list_methods_nompi_CPPFLAGS = $(AM_CPPFLAGS) ${MACRODEFFLAG}WRITE $(ADIOSLIB_SEQ_CPPFLAGS) $(ADIOSLIB_SEQ_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
 @BUILD_WRITE_TRUE at list_methods_nompi_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS) 
 @BUILD_WRITE_TRUE at list_methods_nompi_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
 list_methods_readonly_SOURCES = list_methods.c
-list_methods_readonly_CPPFLAGS = $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
+list_methods_readonly_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
 list_methods_readonly_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
 list_methods_readonly_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 list_methods_readonly_nompi_SOURCES = list_methods.c
-list_methods_readonly_nompi_CPPFLAGS = $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) 
+list_methods_readonly_nompi_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) 
 list_methods_readonly_nompi_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
 list_methods_readonly_nompi_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
 all: all-am
diff --git a/utils/list_methods/list_methods.c b/utils/list_methods/list_methods.c
index 7ab48a7..f6d1217 100644
--- a/utils/list_methods/list_methods.c
+++ b/utils/list_methods/list_methods.c
@@ -32,6 +32,7 @@
 #include "core/adios_read_hooks.h" // read hooks and adios_read_hooks_struct
 #include "core/transforms/adios_transforms_hooks.h" 
 #include "core/transforms/adios_transforms_read.h"
+#include "query/adios_query_hooks.h"
 
 
 int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype);
@@ -41,6 +42,7 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype);
 static struct adios_transport_struct * adios_transports = 0;
 #endif
 static struct adios_read_hooks_struct * adios_read_hooks = 0;
+static struct adios_query_hooks_struct * adios_query_hooks = 0;
 
 int main (int argc, char ** argv) {
     int  rank, size, i;
@@ -56,6 +58,7 @@ int main (int argc, char ** argv) {
 #endif
     adios_read_hooks_init (&adios_read_hooks);
     adios_transform_read_init();
+    adios_query_hooks_init(&adios_query_hooks);
 
     if(rank==0) {
 
@@ -84,6 +87,14 @@ int main (int argc, char ** argv) {
                     adios_transform_plugin_desc((enum ADIOS_TRANSFORM_TYPE)i));
             }
         }
+
+        printf ("Available query methods (in adios_query_set_method()):\n");
+        for (i = 0; i < ADIOS_QUERY_METHOD_COUNT; i++) {
+        	const enum ADIOS_QUERY_METHOD method = (enum ADIOS_QUERY_METHOD)i;
+            if (adios_query_hooks[method].method_name) {
+            	printf("    %s (=%d)\n", adios_query_hooks[method].method_name, i);
+            }
+        }
     }
 
     MPI_Barrier(comm);
diff --git a/utils/skel/Makefile.in b/utils/skel/Makefile.in
index 09a3f91..0974ead 100644
--- a/utils/skel/Makefile.in
+++ b/utils/skel/Makefile.in
@@ -51,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -67,11 +68,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -168,6 +174,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -225,6 +233,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -324,11 +335,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/utils/skel/bin/skel b/utils/skel/bin/skel
index 29640e7..6c356c3 100755
--- a/utils/skel/bin/skel
+++ b/utils/skel/bin/skel
@@ -3,13 +3,11 @@
 import sys
 import os.path
 
-# Make sure that the skel modules are available
-os.path.dirname(sys.argv[1])
-
-# For the installed skel
+# Make sure that the skel modules are available...
+# ...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
+# ...for the skel in the utils dir of the adios source
 sys.path.insert (0, os.path.dirname(sys.argv[0]) + '/../lib')
 
 import argparse
@@ -58,27 +56,27 @@ def main(argv=None):
     skel_settings.create_settings_dir_if_needed()
     parser = get_parser()
 
-    # install does not require a project, so let's just check for it directly
-    if sys.argv[1] == 'install':
+    # Look for skel help (or no args), and print the list of subcommands...
+    if (len(sys.argv) == 1) or (sys.argv[1] == 'help' and len(sys.argv) == 2):
+        print parser.description 
         return 0
 
-    # Also look for skel help, and print the list of subcommands...
-    if sys.argv[1] == 'help' and len(sys.argv) == 2:
-        print parser.description 
+    # install does not require a project, so let's just check for it directly
+    if sys.argv[1] == 'install':
         return 0
 
     if sys.argv[1] == 'help':
         if sys.argv[2] == 'makefile':
             sys.argv = ["skel", "makefile", "junk", "-h"]
-            skel_makefile.generate_makefiles_with_args (None, parser)
+            skel_makefile.generate_makefiles_with_args (parser)
         elif sys.argv[2] == 'params':
             sys.argv = ["skel", "params", "junk", "-h"]
-            skel_params.generate_param_file_with_args (None, parser)
+            skel_params.generate_param_file_with_args (parser)
         elif sys.argv[2] == 'replay':
             sys.argv = ["skel", "replay", "junk", "-h"]
         elif sys.argv[2] == 'source':
             sys.argv = ["skel", "source", "junk", "-h"]
-            skel_source.create_sources_with_args (None, parser)
+            skel_source.create_sources_with_args (parser)
         elif sys.argv[2] == 'submit':
             sys.argv = ["skel", "submit", "junk", "-h"]
             skel_submit.generate_submit_scripts_with_args (parser)
@@ -86,6 +84,7 @@ def main(argv=None):
             sys.argv = ["skel", "xml", "junk", "-h"]
         else:
             print "Unknown help topic" 
+            print parser.description 
             exit(1)
 
     #args = parse_command_line()
@@ -154,7 +153,9 @@ def main(argv=None):
         skel_submit.generate_submit_scripts_with_args (parser)
         return 0
 
-    print 'Unknown subcommand, exiting.'
+    # Unrecognized subcommand, print the help message
+    print parser.description
+    return 0
 
 
 if __name__ == "__main__":
diff --git a/utils/skel/etc/Makefile.in b/utils/skel/etc/Makefile.in
index f49cc68..e40100c 100644
--- a/utils/skel/etc/Makefile.in
+++ b/utils/skel/etc/Makefile.in
@@ -48,6 +48,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -64,11 +65,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -123,6 +129,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -180,6 +188,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @MPIFC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -279,11 +290,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
diff --git a/utils/skel/etc/templates/source_write_fortran.tmpl b/utils/skel/etc/templates/source_write_fortran.tmpl
index 88f7cb9..5341c41 100644
--- a/utils/skel/etc/templates/source_write_fortran.tmpl
+++ b/utils/skel/etc/templates/source_write_fortran.tmpl
@@ -60,7 +60,7 @@ program skel
 #if $noxml
   call adios_init_noxml (MPI_COMM_WORLD, error)
 #else
-  call adios_init ("${project}_skel.xml", MPI_COMM_WORLD, adios_error)
+  call adios_init ("${project}_skel.xml", MPI_COMM_WORLD, error)
 #end if
 
   skel_init_timer = skel_init_timer + MPI_WTIME();
@@ -198,7 +198,7 @@ call adios_define_var (skel_adios_group, &
   call MPI_Reduce (skel_total_timer, skel_total_total, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
 
   if (skel_mpi_rank == 0) then
-    write (*,*) '\n'
+!    write (*,*) '\n'
     write (*,*) '**************************'
     write (*,*) '  Groupsize: ', adios_groupsize
     write (*,*) '  Open Time: ', skel_total_open
@@ -206,7 +206,7 @@ call adios_define_var (skel_adios_group, &
     write (*,*) ' Close Time: ', skel_total_close
     write (*,*) ' Total Time: ', skel_total_total
     write (*,*) '**************************'
-    write (*,*) '\n'
+!    write (*,*) '\n'
   endif
 
 ! Clean up
diff --git a/utils/skel/lib/skel_bpy.py b/utils/skel/lib/skel_bpy.py
index 5bbf4f7..b1a520c 100755
--- a/utils/skel/lib/skel_bpy.py
+++ b/utils/skel/lib/skel_bpy.py
@@ -74,7 +74,7 @@ class var:
 
         if self.is_scalar():
             # This is a scalar
-            print "%s is a scalar" % name
+            #print "%s is a scalar" % name
             return
 
         # If we're writing fortran, we need to flip the order of the dimensions, as they were reported by the C API
diff --git a/utils/skel/lib/skel_have_adios_timing.py b/utils/skel/lib/skel_have_adios_timing.py
index 2ab33b0..efcd975 100644
--- a/utils/skel/lib/skel_have_adios_timing.py
+++ b/utils/skel/lib/skel_have_adios_timing.py
@@ -1 +1 @@
-skel_have_adios_timing = False
+skel_have_adios_timing = True
diff --git a/utils/skel/lib/skel_template.py b/utils/skel/lib/skel_template.py
index 96c34a4..ae06ef0 100644
--- a/utils/skel/lib/skel_template.py
+++ b/utils/skel/lib/skel_template.py
@@ -34,7 +34,7 @@ def pparse_command_line (parent_parser):
 def fill_template (parent_parser):
     args = pparse_command_line (parent_parser)
 
-    print "filling template"
+    #print "filling template"
 
 
     output_file = open (args.outfile, "w")
@@ -50,7 +50,7 @@ def fill_template (parent_parser):
 
     # No, I don't like these either.
     t.i = items 
-    print items
+    #print items
 
 
     output_file.write (str(t) )
diff --git a/utils/skel/src/Makefile.am b/utils/skel/src/Makefile.am
index a0a1c85..14986ac 100644
--- a/utils/skel/src/Makefile.am
+++ b/utils/skel/src/Makefile.am
@@ -1,5 +1,4 @@
 
-CLEANFILES = *.o
 CC=$(MPICC)
 
 
diff --git a/utils/skel/src/Makefile.in b/utils/skel/src/Makefile.in
index 8c83ac6..67811d0 100644
--- a/utils/skel/src/Makefile.in
+++ b/utils/skel/src/Makefile.in
@@ -51,6 +51,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -67,11 +68,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -150,6 +156,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -207,6 +215,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -306,11 +317,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -376,7 +389,6 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-CLEANFILES = *.o
 lib_LIBRARIES = libskel.a
 libskel_a_SOURCES = skel_xml_output.c $(am__append_1)
 library_includedir = $(includedir)/skel
@@ -614,7 +626,6 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
diff --git a/utils/skeldump/Makefile.am b/utils/skeldump/Makefile.am
index 9dc9c6d..28126bb 100644
--- a/utils/skeldump/Makefile.am
+++ b/utils/skeldump/Makefile.am
@@ -1,12 +1,12 @@
-INCLUDES = $(all_includes)
-INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -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_CPPFLAGS = $(AM_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)
diff --git a/utils/skeldump/Makefile.in b/utils/skeldump/Makefile.in
index c890eb3..0e9c86c 100644
--- a/utils/skeldump/Makefile.in
+++ b/utils/skeldump/Makefile.in
@@ -49,6 +49,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_dcmf.m4 \
 	$(top_srcdir)/config/ac_dimes.m4 \
 	$(top_srcdir)/config/ac_dmalloc.m4 \
+	$(top_srcdir)/config/ac_fastbit.m4 \
 	$(top_srcdir)/config/ac_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_glib.m4 \
@@ -65,11 +66,16 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_ridcompress.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
+	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -125,6 +131,8 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ADIOS_TIMERS = @ADIOS_TIMERS@
+ADIOS_TIMER_EVENTS = @ADIOS_TIMER_EVENTS@
 ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
 ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
 ALACRITY_LIBS = @ALACRITY_LIBS@
@@ -182,6 +190,9 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FASTBIT_CPPFLAGS = @FASTBIT_CPPFLAGS@
+FASTBIT_LDFLAGS = @FASTBIT_LDFLAGS@
+FASTBIT_LIBS = @FASTBIT_LIBS@
 FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
@@ -281,11 +292,13 @@ PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
 RANLIB = @RANLIB@
+RIDCOMPRESS_CPPFLAGS = @RIDCOMPRESS_CPPFLAGS@
+RIDCOMPRESS_LDFLAGS = @RIDCOMPRESS_LDFLAGS@
+RIDCOMPRESS_LIBS = @RIDCOMPRESS_LIBS@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
-SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
@@ -351,11 +364,11 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 skeldump_SOURCES = skeldump.c 
-skeldump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
+skeldump_CPPFLAGS = $(AM_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)
diff --git a/utils/skeldump/skeldump.c b/utils/skeldump/skeldump.c
index c04efd9..a37edf6 100644
--- a/utils/skeldump/skeldump.c
+++ b/utils/skeldump/skeldump.c
@@ -89,23 +89,23 @@ struct option options[] = {
     {"verbose",              no_argument,          NULL,    'v'},
     {"dump",                 no_argument,          NULL,    'd'},
     {"group",                no_argument,          NULL,    'g'},
-    {"regexp",               no_argument,          NULL,    'e'},
-    {"plot",                 no_argument,          NULL,    'p'},
+//    {"regexp",               no_argument,          NULL,    'e'},
+//    {"plot",                 no_argument,          NULL,    'p'},
     {"output",               required_argument,    NULL,    'o'},
-    {"xml",                  no_argument,          NULL,    'x'},
-    {"start",                required_argument,    NULL,    's'}, 
-    {"count",                required_argument,    NULL,    'c'}, 
-    {"noindex",              no_argument,          NULL,    'y'},
+//    {"xml",                  no_argument,          NULL,    'x'},
+//    {"start",                required_argument,    NULL,    's'}, 
+//    {"count",                required_argument,    NULL,    'c'}, 
+//    {"noindex",              no_argument,          NULL,    'y'},
 //    {"sort",                 no_argument,          NULL,    'r'},
-    {"timestep",             no_argument,          NULL,    't'},
-    {"attrs",                no_argument,          NULL,    'a'},
-    {"attrsonly",            no_argument,          NULL,    'A'},
-    {"long",                 no_argument,          NULL,    'l'},
-    {"string",               no_argument,          NULL,    'S'},
-    {"columns",              required_argument,    NULL,    'n'}, 
-    {"format",               required_argument,    NULL,    'f'}, 
+//    {"timestep",             no_argument,          NULL,    't'},
+//    {"attrs",                no_argument,          NULL,    'a'},
+//    {"attrsonly",            no_argument,          NULL,    'A'},
+//   {"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'},
+//    {"decomp",               no_argument,          NULL,    'D'},
     //    {"time",                 required_argument,    NULL,    't'}, 
     {NULL,                   0,                    NULL,    0}
 };
@@ -116,9 +116,11 @@ static const char *optstring = "hvepyrtaAldSDg:o:x:s:c:n:f:";
 // help function
 void display_help() {
     //printf( "Usage: %s  \n", prgname);
-    printf("usage: bpls [OPTIONS] file [mask1 mask2 ...]\n"
+    printf("usage: skeldump [OPTIONS] file\n"
+//    printf("usage: skeldump [OPTIONS] file [mask1 mask2 ...]\n"
             "\nList/dump content of a BP file. \n"
-            "A mask can be a shell pattern like with 'ls' e.g. \"*/x?\".\n"
+//            "A mask can be a shell pattern like with 'ls' e.g. \"*/x?\".\n"
+/*
             "Variables with multiple timesteps are reported with an extra dimensions.\n"
             "The time dimension is the first dimension then.\n"
             "\n"
@@ -126,9 +128,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"
-            /*
             "  --sort      | -r           Sort names before listing\n"
-            */
             "  --timestep  | -t           Print values of timestep elements\n"
             "  --group     | -g <mask>    List/dump groups matching the mask only\n"
             "  --dump      | -d           Dump matched variables/attributes\n"
@@ -136,9 +136,7 @@ void display_help() {
             "  --regexp    | -e           Treat masks as extended regular expressions\n"
             "  --plot      | -p           Dumps the histogram information that can be read by gnuplot\n"
             "  --output    | -o <path>    Print to a file instead of stdout\n"
-            /*
                "  --xml    | -x            # print as xml instead of ascii text\n"
-             */
             "  --start     | -s \"spec\"    Offset indices in each dimension \n"
             "                               (default is 0 for all dimensions) \n"
             "                               <0 is handled as in python (-1 is last)\n"
@@ -152,21 +150,20 @@ void display_help() {
             "                               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"
-             */
             "\n"
             "  Examples for slicing:\n"
             "  -s \"0,0,0\"   -c \"1,99,1\":  Print 100 elements (of the 2nd dimension).\n"
             "  -s \"0,0\"     -c \"1,-1\":    Print the whole 2nd dimension however large it is.\n"
             "  -s \"-1,-1\"   -c \"1,1\":     Print the very last element (of a 2D array)\n"
+*/
             "\n"
             "Help options\n"
             "  --help      | -h           Print this help.\n"
             "  --verbose   | -v           Print log about what this program is doing.\n"
             "                               Use multiple -v to increase logging level.\n"
-            "Typical use: bpls -lavr <file>\n"
+            "Typical use: skeldump <file> > <outfile>\n"
             );
 }
 
diff --git a/wrappers/matlab/Makefile b/wrappers/matlab/Makefile
index 95a983d..0ac7301 100644
--- a/wrappers/matlab/Makefile
+++ b/wrappers/matlab/Makefile
@@ -9,17 +9,21 @@ default:
 
 matlab: adiosopenc adiosclosec adiosreadc
 
+INC:=$(shell echo ${ADIOSREAD_SEQ_INC})
+LIB:=$(shell echo ${ADIOSREAD_SEQ_CLIB})
+
 adiosopenc:  
-	mex adiosopenc.c ${MEXOPTS} -D_NOMPI  -DADIOS_USE_READ_API_1 -I. -I../../src/public -L. -L../../src ${ADIOSREAD_SEQ_INC} ${ADIOSREAD_SEQ_CLIB}
+	mex adiosopenc.c  ${MEXOPTS} -D_NOMPI -DADIOS_USE_READ_API_1 -I. -I../../src/public ${INC} -L. -L../../src ${LIB}
 
 adiosreadc: 
-	mex adiosreadc.c ${MEXOPTS} -D_NOMPI -DADIOS_USE_READ_API_1 -I. -I../../src/public -L. -L../../src ${ADIOSREAD_SEQ_INC} ${ADIOSREAD_SEQ_CLIB}
+	mex adiosreadc.c  ${MEXOPTS} -D_NOMPI -DADIOS_USE_READ_API_1 -I. -I../../src/public ${INC} -L. -L../../src ${LIB}
 
 adiosclosec:
-	mex adiosclosec.c ${MEXOPTS} -D_NOMPI -DADIOS_USE_READ_API_1 -I. -I../../src/public -L. -L../../src ${ADIOSREAD_SEQ_INC} ${ADIOSREAD_SEQ_CLIB}
+	mex adiosclosec.c ${MEXOPTS} -D_NOMPI -DADIOS_USE_READ_API_1 -I. -I../../src/public ${INC} -L. -L../../src ${LIB}
 
 #adiosdbgc:
-#	mex adiosdbgc.c ${MEXOPTS} -D_NOMPI -I. -I../../src/public -L. -L../../src ${ADIOSREAD_SEQ_INC} ${ADIOSREAD_SEQ_CLIB}
+#       mex adiosdbgc.c ${MEXOPTS} -D_NOMPI -I. -I../../src/public ${INC} -L. -L../../src ${LIB} 
+
 
 clean:
 	rm -f *.mexa64 core* *.o 
diff --git a/wrappers/matlab/adiosopenc_staging.c b/wrappers/matlab/adiosopenc_staging.c
deleted file mode 100644
index e1dd39c..0000000
--- a/wrappers/matlab/adiosopenc_staging.c
+++ /dev/null
@@ -1,427 +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.
- */
-
-/*=================================================================
- * adiosopenc.c - Open an ADIOS file
- *
- * Input: File, Verbose
- *    File:     string (name) or int64 (handler)
- *    Verbose:  numeric (double)
- *
- * Output: Information structure
- *     Name        file path
- *     FileHandler int64 file handler
- *     TimeStart   First timestep in file (usually = 1)
- *     TimeSteps   Number of timesteps in file, always at least 1
- *     Groups      Adios groups in the file. Usually 1 group is in a file.
- *                 This is a structure array of 
- *
- *        Name          group name
- *        GroupHandler  int64 group handler
- *        Variables     structure array of variables
- *           Name          path of variable
- *           Type          Matlab type class of data
- *           Dims          Array of dimensions
- *           Timedim       The time dimension, 0 if there is no time varying 
- *                         part of the variable
- *           GlobalMin     global minimum  of the variable (1-by-1 mxArray)
- *           GlobalMax     global maximum of the variable
- *           
- *        Attributes  structure array of attributes
- *           Name          path of attribute
- *           Type          Matlab type class of data
- *           Value         attribute value (mxArray)
- *
- *
- *
- * $Revision: 1.0 $  $Date: 2009/08/05 12:53:41 $
- * Author: Norbert Podhorszki <pnorbert at ornl.gov>
- *=================================================================*/
-
-#include <string.h>              /* memcpy */
-#include "mex.h"
-#include "adios_types.h"
-#include "adios_read.h"
-#include "adios_types.h"
-
-static int verbose=0;
-
-mxClassID adiostypeToMatlabClass(int type, mxComplexity *complexity );
-mxArray* valueToMatlabValue( void * data, mxClassID mxtype, mxComplexity complexFlag);
-void errorCheck(int nlhs, int nrhs, const mxArray *prhs[]);
-char* getString(const mxArray *mxstr);
-static void swap_order(int n, uint64_t *array);
-
-
-void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
-    char *fname;                                 /* file name */
-    int status;
-    char msg[512];                               /* error messages from function calls */
-    int32_t *int32p;
-
-    ADIOS_FILE *fp;                             /* File handler structure */
-    ADIOS_GROUP *gp;                            /* Group handler structure */
-    ADIOS_VARINFO *vinfo;                       /* Variable info structure */
-    int mpi_comm_dummy;                         /* ADIOS read API needs an MPI communicator */
-    int32_t timedim;                            /* time dimension is translated C 0.. -> Matlab 1.. */
-    int asize;                                  /* Attribute size info */
-    enum ADIOS_DATATYPES adiostype;             /* Attribute type info */
-    void *data;                                 /* Attributes return their values */
-    mwSize mDims[] = {1};                       /* dimensions to create a scalar mxArray */  
-
-    int gi,vi,ai, i;                            /* loop variables for groups, vars and attrs */
-    mxArray *arr;                               /* temp array for constructions */
-    mxArray *groups, *vars, *attrs;             /* struct arrays under top struct */
-    mxClassID mxtype;                           /* matlab type (of vars and attrs) */
-    mxComplexity complexFlag; 
-
-    /* Output structure definition */
-    const char *top_field_names[] = {"Name", "FileHandler", "TimeStart", "TimeSteps", "Variables", "Attributes"}; /* top level struct fields */
-    mwSize ntopfields = 6;
-    mwSize top_struct_dims[] = {1,1};   /* dimensions for top level struct array: 1-by-1 */
-    int top_field_Name;
-    int top_field_FileHandler;
-    int top_field_TimeStart;
-    int top_field_TimeSteps;
-    /*int top_field_Groups; */
-    int top_field_Variables;
-    int top_field_Attributes;
-
-    const char *group_field_names[] = {"Name", "GroupHandler", "Variables", "Attributes"}; /* group level struct fields */
-    mwSize ngroupfields = 4;
-    mwSize group_struct_dims[2];        /* dimensions for group level struct array: 1-by-sth */
-    int group_field_Name;
-    int group_field_GroupHandler;
-
-    const char *var_field_names[] = {"Name","Type","Dims", "Timedim", "GlobalMin", "GlobalMax"}; /* variable level struct fields */
-    mwSize nvarfields = 6;
-    mwSize var_struct_dims[2];        /* dimensions for variable level struct array: 1-by-sth */
-    int var_field_Name;
-    int var_field_Type;
-    int var_field_Dims;
-    int var_field_Timedim;
-    int var_field_GlobalMin;
-    int var_field_GlobalMax;
-
-    const char *attr_field_names[] = {"Name","Type","Value"}; /* attribute level struct fields */
-    mwSize nattrfields = 3;
-    mwSize attr_struct_dims[2];        /* dimensions for attribute level struct array: 1-by-sth */
-    int attr_field_Name;
-    int attr_field_Type;
-    int attr_field_Value;
-
-    errorCheck(nlhs, nrhs, prhs);
-
-    /*mexPrintf("nrhs=%d  nlhs=%d\n", nrhs, nlhs);*/
-    
-    /***********************/
-    /* 0. get verbose parameter first */
-    verbose = (int)mxGetScalar(prhs[1]);
-    if (verbose) mexPrintf("Verbosity level: %d\n", verbose);
-
-    /* 1. get file handler */
-    if (mxIsChar(prhs[0])) {
-        fname = getString( (mxArray *)prhs[0]);
-        if (verbose) mexPrintf("File name: \"%s\"\n", fname);
-    } 
-
-    /**************************************/
-    /* Open ADIOS file now and get groups */
-    fp = adios_read_open_file (fname, ADIOS_READ_METHOD_BP, mpi_comm_dummy);
-    if (fp == NULL) {
-       mexErrMsgIdAndTxt("MATLAB:adiosopenc:open",adios_errmsg());
-    }
-    if (verbose) mexPrintf("Number of adios groups: %d, fp=%lld\n", fp->groups_count, (int64_t) fp);
-
-    /******************************/
-    /* Create top level structure */
-    if (verbose) mexPrintf("Create top struct array, 1-by-1\n");
-    plhs[0] = mxCreateStructArray(2, top_struct_dims, ntopfields, top_field_names);
-    top_field_Name = mxGetFieldNumber(plhs[0],"Name");
-    top_field_FileHandler = mxGetFieldNumber(plhs[0],"FileHandler");
-    top_field_TimeStart = mxGetFieldNumber(plhs[0],"TimeStart");
-    top_field_TimeSteps = mxGetFieldNumber(plhs[0],"TimeSteps");
-    top_field_Groups = mxGetFieldNumber(plhs[0],"Groups");
-    mxSetFieldByNumber(plhs[0],0,top_field_Name,mxCreateString(fname));
-    arr = valueToMatlabValue(&fp, mxINT64_CLASS, mxREAL);
-    mxSetFieldByNumber(plhs[0],0,top_field_FileHandler,arr);
-    arr = mxCreateNumericMatrix( 1, 1, mxINT32_CLASS, mxREAL);
-    *(int32_t *)mxGetData(arr) = fp->tidx_start;
-    mxSetFieldByNumber(plhs[0],0,top_field_TimeStart,arr);
-    arr = mxCreateNumericMatrix( 1, 1, mxINT32_CLASS, mxREAL);
-    *(int32_t *)mxGetData(arr) = fp->ntimesteps;
-    mxSetFieldByNumber(plhs[0],0,top_field_TimeSteps,arr);
-    /* Create top.Groups structure array */
-    if (verbose) mexPrintf("Create top.Groups struct array, 1-by-%d\n",fp->groups_count);
-    group_struct_dims[0] = 1;
-    group_struct_dims[1] = fp->groups_count;
-    groups = mxCreateStructArray(2, group_struct_dims, ngroupfields, group_field_names);
-    mxSetFieldByNumber(plhs[0],0,top_field_Groups,groups);
-
-
-    /****************************/
-    /* Fill in Groups structure */
-    group_field_Name = mxGetFieldNumber(groups,"Name");
-    group_field_GroupHandler = mxGetFieldNumber(groups,"GroupHandler");
-    group_field_Variables = mxGetFieldNumber(groups,"Variables");
-    group_field_Attributes = mxGetFieldNumber(groups,"Attributes");
-
-    for (gi = 0; gi < fp->groups_count; gi++) {
-        /* Get info of one group: handler, list of vars, list of attrs */
-        if (verbose) mexPrintf("Group %s: get info\n", fp->group_namelist[gi]);
-        gp = adios_gopen_byid(fp, gi);
-        if (gp == NULL) {
-           mexErrMsgIdAndTxt("MATLAB:adiosopenc:groupinfo",adios_errmsg());
-        }
-        if (verbose) mexPrintf("    %d variables and %d attributes\n", gp->vars_count, gp->attrs_count);
-        /* Group fields for gi-th group */
-        mxSetFieldByNumber(groups,gi,group_field_Name,mxCreateString(fp->group_namelist[gi]));
-        mexPrintf("Group gp=%lld id=%d vcnt=%d\n", (int64_t)gp, gp->grpid, gp->vars_count);
-        arr = valueToMatlabValue(&gp, mxINT64_CLASS, mxREAL);
-        mxSetFieldByNumber(groups,gi,group_field_GroupHandler,arr);
-        /* Create top.Groups.Variables structure array */
-        var_struct_dims[0] = 1;
-        var_struct_dims[1] = gp->vars_count;
-        vars = mxCreateStructArray(2, var_struct_dims, nvarfields, var_field_names);
-        mxSetFieldByNumber(groups,gi,group_field_Variables,vars);
-        var_field_Name = mxGetFieldNumber(vars,"Name");
-        var_field_Type = mxGetFieldNumber(vars,"Type");
-        var_field_Dims = mxGetFieldNumber(vars,"Dims");
-        var_field_Timedim = mxGetFieldNumber(vars,"Timedim");
-        var_field_GlobalMin = mxGetFieldNumber(vars,"GlobalMin");
-        var_field_GlobalMax = mxGetFieldNumber(vars,"GlobalMax");
-        /* Create top.Groups.Attributes structure array */
-        attr_struct_dims[0] = 1;
-        attr_struct_dims[1] = gp->attrs_count;
-        attrs = mxCreateStructArray(2, attr_struct_dims, nattrfields, attr_field_names);
-        mxSetFieldByNumber(groups,gi,group_field_Attributes,attrs);
-        attr_field_Name = mxGetFieldNumber(attrs,"Name");
-        attr_field_Type = mxGetFieldNumber(attrs,"Type");
-        attr_field_Value = mxGetFieldNumber(attrs,"Value");
-
-        /******************************/
-        /* Add variables to the group */
-
-        if (verbose>1) mexPrintf("    Variables\n");
-        for (vi=0; vi < gp->vars_count; vi++) {
-            vinfo = adios_inq_var_byid( gp, vi);
-            if (vinfo == NULL) {
-               mexErrMsgIdAndTxt("MATLAB:adiosopenc:varinfo",adios_errmsg());
-            }
-            /* Flip dimensions from ADIOS-read-api/C/row-major order to Matlab/Fortran/column-major order */
-            swap_order(vinfo->ndim, vinfo->dims);
-
-            if (verbose>1) {
-                mexPrintf("      %s: ndims=%d, adios type=%s, timedim=%d dimensions [", 
-                gp->var_namelist[vi], vinfo->ndim, adios_type_to_string(vinfo->type), vinfo->timedim);
-                for (i=0; i<vinfo->ndim; i++)
-                    mexPrintf("%lld ", vinfo->dims[i]);
-                mexPrintf("]\n");
-            }
-            /* field NAME */
-            mxSetFieldByNumber(vars,vi,var_field_Name,mxCreateString(gp->var_namelist[vi]));
-            /* field TYPE */
-            mxtype = adiostypeToMatlabClass(vinfo->type, &complexFlag);
-            arr = mxCreateNumericMatrix( 1, 1, mxtype, complexFlag);
-            mxSetFieldByNumber(vars,vi,var_field_Type,mxCreateString(mxGetClassName(arr)));
-            mxDestroyArray(arr);
-            /* field DIMS */
-            if (vinfo->ndim > 0) {
-                arr = mxCreateNumericMatrix( 1, vinfo->ndim, mxINT32_CLASS, mxREAL);
-                int32p = (int32_t *)mxGetData(arr);
-                for (i=0; i<vinfo->ndim; i++) 
-                    int32p[i] = (int32_t) vinfo->dims[i];
-            } else {
-                arr = mxCreateNumericMatrix( 0, 0, mxINT32_CLASS, mxREAL);
-            }
-            mxSetFieldByNumber(vars,vi,var_field_Dims,arr);
-
-            /* field TIMEDIM */
-            /* Timedim is -1,0...ndim-1 in C, 0,1..ndim in Matlab */
-            timedim = vinfo->timedim + 1;
-            arr = valueToMatlabValue((void *)(&timedim), mxINT32_CLASS, mxREAL);
-            mxSetFieldByNumber(vars,vi,var_field_Timedim,arr);
-
-            /* field GLOBALMIN */
-            arr = valueToMatlabValue(vinfo->gmin, mxtype, complexFlag);
-            mxSetFieldByNumber(vars,vi,var_field_GlobalMin,arr);
-
-            /* field GLOBALMAX */
-            arr = valueToMatlabValue(vinfo->gmax, mxtype, complexFlag);
-            mxSetFieldByNumber(vars,vi,var_field_GlobalMax,arr);
-
-            adios_free_varinfo(vinfo);
-        }
-
-
-
-        /******************************/
-        /* Add attributes to the group */
-
-        if (verbose>1) mexPrintf("    Attributes\n");
-        for (ai=0; ai < gp->attrs_count; ai++) {
-            status = adios_get_attr_byid( gp, ai, &adiostype, &asize, &data);
-            if (status != 0) {
-               mexErrMsgIdAndTxt("MATLAB:adiosopenc:varinfo",adios_errmsg());
-            }
-            if (verbose>1) 
-                mexPrintf("      %s: adios type=%s, size=%d\n", 
-                gp->attr_namelist[ai], adios_type_to_string(adiostype), asize);
-            /* field NAME */
-            mxSetFieldByNumber(attrs,ai,attr_field_Name,mxCreateString(gp->attr_namelist[ai]));
-            /* field TYPE */
-            mxtype = adiostypeToMatlabClass(adiostype, &complexFlag);
-            arr = mxCreateNumericMatrix( 1, 1, mxtype, complexFlag);
-            mxSetFieldByNumber(attrs,ai,attr_field_Type,mxCreateString(mxGetClassName(arr)));
-            mxDestroyArray(arr);
-            /* field VALUE */
-            arr = valueToMatlabValue(data, mxtype, complexFlag);
-            mxSetFieldByNumber(attrs,ai,attr_field_Value,arr);
-
-            free(data); /* we do not store attribute values yet */
-
-        }
-
-        if (verbose>1) mexPrintf("    finished defining group\n");
-    }
-
-
-    if (verbose) mexPrintf("return from adiosopenc\n");
-}
-
-mxArray * valueToMatlabValue( void * data, mxClassID mxtype, mxComplexity complexFlag)
-{
-    /* copies values in all cases, so one can free(data) later */
-    mxArray *arr;
-    if (data == NULL) {
-        arr = mxCreateString("undefined");
-    } else if (mxtype == mxCHAR_CLASS) {
-        arr = mxCreateString((char *)data);
-    } else if (complexFlag == mxCOMPLEX) {
-        arr = mxCreateDoubleMatrix( 1, 1, mxCOMPLEX);
-        if (mxtype == mxSINGLE_CLASS) {
-            *(double *)mxGetPr(arr) = ((float *)data)[0];
-            *(double *)mxGetPi(arr) = ((float *)data)[1];
-        } else {
-            *(double *)mxGetPr(arr) = ((double *)data)[0];
-            *(double *)mxGetPi(arr) = ((double *)data)[1];
-        }
-    } else {
-        arr = mxCreateNumericMatrix( 1, 1, mxtype, mxREAL);
-        memcpy( mxGetData(arr), data, mxGetElementSize(arr));
-    }
-    return arr;
-}
-
-void errorCheck(int nlhs, int nrhs, const mxArray *prhs[]){
-    /* Assume that we are called from adiosread.m which checks the arguments already */
-    /* Check for proper number of arguments. */
-    
-    if ( nrhs != 2 ) {
-        mexErrMsgIdAndTxt("MATLAB:adiosopenc:rhs","This function needs exactly 2 arguments: File, Verbose");
-    }
-    
-    if ( !mxIsChar(prhs[0]) ) {
-        mexErrMsgIdAndTxt("MATLAB:adiosopenc:rhs","First arg must be a string.");
-    } 
-    
-    if ( !mxIsNumeric(prhs[1]) ) {
-        mexErrMsgIdAndTxt("MATLAB:adiosopenc:rhs","Second arg must be a number.");
-    } 
-    
-    if ( nlhs > 1 ) {
-        mexErrMsgIdAndTxt("MATLAB:adiosopenc:lhs","Too many output arguments.");
-    }
-    
-#if !defined(MX_COMPAT_32)
-    /* Make sure that it is safe to cast dim to mwSize when using largeArrayDims.*/
-    if ( dim > MWSIZE_MAX ) {
-        mexErrMsgIdAndTxt("MATLAB:adiosopenc:dimensionTooLarge",
-                          "The input dimension, %.0f, is larger than the maximum value of mwSize, %u, when built with largeArrayDims.", dim, MWSIZE_MAX);
-    }
-#endif
- }
-
-
-/** Make a C char* string from a Matlab string */
-char* getString(const mxArray *mxstr) 
-{
-    mwSize buflen;
-    char   *str;
-    /* Allocate enough memory to hold the converted string. */
-    buflen = mxGetNumberOfElements(mxstr) + 1;
-    str = mxCalloc(buflen, sizeof(char));
-    /* Copy the string data from string_array_ptr and place it into buf. */
-    if (mxGetString(mxstr, str, buflen) != 0)
-        mexErrMsgTxt("Could not convert string data from the file name.");
-    return str;
-}
-
-/** return the appropriate class for an adios type (and complexity too) */
-mxClassID adiostypeToMatlabClass(enum ADIOS_DATATYPES type, mxComplexity *complexity ) 
-{
-    *complexity = mxREAL;
-    switch( type ) {
-        case adios_unsigned_byte:
-            return mxUINT8_CLASS;
-        case adios_byte:
-            return mxINT8_CLASS;
-        case adios_string:
-            return mxCHAR_CLASS;
-               
-        case adios_unsigned_short:
-            return mxUINT16_CLASS;
-        case adios_short:
-            return mxINT16_CLASS;
-
-        case adios_unsigned_integer:
-            return mxUINT32_CLASS;
-        case adios_integer:
-            return mxINT32_CLASS;
-
-        case adios_unsigned_long:
-            return mxUINT64_CLASS;
-        case adios_long:
-            return mxINT64_CLASS;
-
-        case adios_real: 
-            return mxSINGLE_CLASS;
-        case adios_double:
-            return mxDOUBLE_CLASS;
-             
-        case adios_complex:     /* 8 bytes */
-            *complexity = mxCOMPLEX;
-            return mxSINGLE_CLASS;
-        case adios_double_complex: /*  16 bytes */
-            *complexity = mxCOMPLEX;
-            return mxDOUBLE_CLASS;
-
-        case adios_long_double: /* 16 bytes */
-        default:
-            mexErrMsgIdAndTxt("MATLAB:adiosopenc.c:dimensionTooLarge",
-                 "Adios type %d (%s) not supported in visit.\n",
-                 type, adios_type_to_string(type));
-            break;
-    }
-    return 0; /* just to avoid warnings. never executed */
-}
-
-
-/* Reverse the order in an array in place.
-   use swapping from Matlab/Fortran/column-major order to ADIOS-read-api/C/row-major order and back
-*/
-static void swap_order(int n, uint64_t *array)
-{
-    int i, tmp;
-    for (i=0; i<n/2; i++) {
-        tmp = array[i];
-        array[i] = array[n-1-i];
-        array[n-1-i] = tmp;
-    }
-}
-
-
diff --git a/wrappers/matlab/writer.bp b/wrappers/matlab/writer.bp
deleted file mode 100644
index b301f76..0000000
Binary files a/wrappers/matlab/writer.bp and /dev/null differ
diff --git a/wrappers/numpy/Makefile b/wrappers/numpy/Makefile
index fce55b2..36744c2 100644
--- a/wrappers/numpy/Makefile
+++ b/wrappers/numpy/Makefile
@@ -30,7 +30,7 @@ adios.cpp:  adios.pyx
 	cython --cplus adios.pyx
 
 adios.so:  
-	python setup.py build
+	python setup.py build_ext -lrt
 
 adios_mpi.cpp:  adios_mpi.pyx
 	cython --cplus adios_mpi.pyx
diff --git a/wrappers/numpy/adios.cpp b/wrappers/numpy/adios.cpp
index 928ea77..9fb1609 100644
--- a/wrappers/numpy/adios.cpp
+++ b/wrappers/numpy/adios.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.20.1 on Fri May 23 13:00:08 2014 */
+/* Generated by Cython 0.21.1 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -16,11 +16,11 @@
 #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+.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
+    #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_20_1"
-#include <stddef.h> /* For offsetof */
+#define CYTHON_ABI "0_21_1"
+#include <stddef.h>
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
@@ -54,65 +54,11 @@
 #define CYTHON_COMPILING_IN_PYPY 0
 #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
-#if CYTHON_COMPILING_IN_PYPY
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600
 #define Py_OptimizeFlag 0
 #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_As_int(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
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
 #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) \
@@ -124,22 +70,11 @@
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyType_Type
 #endif
-#if PY_VERSION_HEX < 0x02060000
-  #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 < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT)
-  #define Py_TPFLAGS_IS_ABSTRACT 0
-#endif
 #if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
@@ -164,12 +99,14 @@
 #if CYTHON_COMPILING_IN_PYPY
   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+  #define __Pyx_PyFrozenSet_Size(s)         PyObject_Size(s)
 #else
   #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
       PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+  #define __Pyx_PyFrozenSet_Size(s)         PySet_Size(s)
 #endif
-#define __Pyx_PyString_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
@@ -183,36 +120,13 @@
   #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_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
   #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
 #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
@@ -237,6 +151,11 @@
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+  #ifndef PyUnicode_InternFromString
+    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+  #endif
+#endif
 #if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
@@ -245,42 +164,10 @@
   #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))
+  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
 #else
-  #define __Pyx_NAMESTR(n) (n)
-  #define __Pyx_DOCSTR(n)  (n)
+  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
@@ -316,6 +203,12 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#ifdef __cplusplus
+template<typename T>
+void __Pyx_call_destructor(T* x) {
+    x->~T();
+}
+#endif
 
 
 #if PY_MAJOR_VERSION >= 3
@@ -372,7 +265,7 @@ static CYTHON_INLINE float __PYX_NAN() {
 # 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*/
+                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
 #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
@@ -395,7 +288,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t*
 #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
 #define __Pyx_PyBytes_FromString        PyBytes_FromString
 #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
 #if PY_MAJOR_VERSION < 3
     #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
@@ -405,17 +298,17 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
 #endif
 #define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
 #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_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((char*)s)
-#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((char*)s)
-#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s)
+#define __Pyx_PyObject_FromUString(s)  __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromUString(s)   __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((const 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;
+    return (size_t)(u_end - u - 1);
 }
 #else
 #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
@@ -438,18 +331,21 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #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(void) {
-    PyObject* sys = NULL;
+    PyObject* sys;
     PyObject* default_encoding = NULL;
     PyObject* ascii_chars_u = NULL;
     PyObject* ascii_chars_b = NULL;
+    const char* default_encoding_c;
     sys = PyImport_ImportModule("sys");
-    if (sys == NULL) goto bad;
+    if (!sys) 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) {
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    if (strcmp(default_encoding_c, "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++) {
@@ -457,23 +353,21 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) {
         }
         __Pyx_sys_getdefaultencoding_not_ascii = 1;
         ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
-        if (ascii_chars_u == NULL) goto bad;
+        if (!ascii_chars_u) 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) {
+        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(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 '%.200s' is not a superset of ascii.",
                 default_encoding_c);
             goto bad;
         }
+        Py_DECREF(ascii_chars_u);
+        Py_DECREF(ascii_chars_b);
     }
-    Py_XDECREF(sys);
-    Py_XDECREF(default_encoding);
-    Py_XDECREF(ascii_chars_u);
-    Py_XDECREF(ascii_chars_b);
+    Py_DECREF(default_encoding);
     return 0;
 bad:
-    Py_XDECREF(sys);
     Py_XDECREF(default_encoding);
     Py_XDECREF(ascii_chars_u);
     Py_XDECREF(ascii_chars_b);
@@ -487,21 +381,22 @@ bad:
 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
 static char* __PYX_DEFAULT_STRING_ENCODING;
 static int __Pyx_init_sys_getdefaultencoding_params(void) {
-    PyObject* sys = NULL;
+    PyObject* sys;
     PyObject* default_encoding = NULL;
     char* default_encoding_c;
     sys = PyImport_ImportModule("sys");
-    if (sys == NULL) goto bad;
+    if (!sys) 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);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
     __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));
+    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
     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;
 }
@@ -509,16 +404,11 @@ bad:
 #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__ */
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+  #define likely(x)   __builtin_expect(!!(x), 1)
+  #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
   #define likely(x)   (x)
   #define unlikely(x) (x)
 #endif /* __GNUC__ */
@@ -561,7 +451,7 @@ static const char *__pyx_f[] = {
   "type.pxd",
 };
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":723
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":723
  * # in Cython to enable them only on the right systems.
  * 
  * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
@@ -570,7 +460,7 @@ static const char *__pyx_f[] = {
  */
 typedef npy_int8 __pyx_t_5numpy_int8_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":724
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":724
  * 
  * ctypedef npy_int8       int8_t
  * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
@@ -579,7 +469,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t;
  */
 typedef npy_int16 __pyx_t_5numpy_int16_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":725
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":725
  * ctypedef npy_int8       int8_t
  * ctypedef npy_int16      int16_t
  * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
@@ -588,7 +478,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t;
  */
 typedef npy_int32 __pyx_t_5numpy_int32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":726
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":726
  * ctypedef npy_int16      int16_t
  * ctypedef npy_int32      int32_t
  * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
@@ -597,7 +487,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t;
  */
 typedef npy_int64 __pyx_t_5numpy_int64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":730
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":730
  * #ctypedef npy_int128     int128_t
  * 
  * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
@@ -606,7 +496,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t;
  */
 typedef npy_uint8 __pyx_t_5numpy_uint8_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":731
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":731
  * 
  * ctypedef npy_uint8      uint8_t
  * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
@@ -615,7 +505,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t;
  */
 typedef npy_uint16 __pyx_t_5numpy_uint16_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":732
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":732
  * ctypedef npy_uint8      uint8_t
  * ctypedef npy_uint16     uint16_t
  * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
@@ -624,7 +514,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t;
  */
 typedef npy_uint32 __pyx_t_5numpy_uint32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":733
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":733
  * ctypedef npy_uint16     uint16_t
  * ctypedef npy_uint32     uint32_t
  * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
@@ -633,7 +523,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t;
  */
 typedef npy_uint64 __pyx_t_5numpy_uint64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":737
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":737
  * #ctypedef npy_uint128    uint128_t
  * 
  * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
@@ -642,7 +532,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t;
  */
 typedef npy_float32 __pyx_t_5numpy_float32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":738
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":738
  * 
  * ctypedef npy_float32    float32_t
  * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
@@ -651,7 +541,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t;
  */
 typedef npy_float64 __pyx_t_5numpy_float64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":747
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -660,7 +550,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t;
  */
 typedef npy_long __pyx_t_5numpy_int_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":748
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":748
  * # numpy.int corresponds to 'l' and numpy.long to 'q'
  * ctypedef npy_long       int_t
  * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
@@ -669,7 +559,7 @@ typedef npy_long __pyx_t_5numpy_int_t;
  */
 typedef npy_longlong __pyx_t_5numpy_long_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":749
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":749
  * ctypedef npy_long       int_t
  * ctypedef npy_longlong   long_t
  * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
@@ -678,7 +568,7 @@ typedef npy_longlong __pyx_t_5numpy_long_t;
  */
 typedef npy_longlong __pyx_t_5numpy_longlong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":751
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":751
  * ctypedef npy_longlong   longlong_t
  * 
  * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
@@ -687,7 +577,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t;
  */
 typedef npy_ulong __pyx_t_5numpy_uint_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":752
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":752
  * 
  * ctypedef npy_ulong      uint_t
  * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
@@ -696,7 +586,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":753
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":753
  * ctypedef npy_ulong      uint_t
  * ctypedef npy_ulonglong  ulong_t
  * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
@@ -705,7 +595,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":755
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":755
  * ctypedef npy_ulonglong  ulonglong_t
  * 
  * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
@@ -714,7 +604,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
  */
 typedef npy_intp __pyx_t_5numpy_intp_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":756
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":756
  * 
  * ctypedef npy_intp       intp_t
  * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
@@ -723,7 +613,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t;
  */
 typedef npy_uintp __pyx_t_5numpy_uintp_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":758
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":758
  * ctypedef npy_uintp      uintp_t
  * 
  * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
@@ -732,7 +622,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t;
  */
 typedef npy_double __pyx_t_5numpy_float_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":759
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":759
  * 
  * ctypedef npy_double     float_t
  * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
@@ -741,7 +631,7 @@ typedef npy_double __pyx_t_5numpy_float_t;
  */
 typedef npy_double __pyx_t_5numpy_double_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":760
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":760
  * ctypedef npy_double     float_t
  * ctypedef npy_double     double_t
  * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
@@ -774,7 +664,7 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 struct __pyx_obj_5adios_file;
 struct __pyx_obj_5adios_var;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":762
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":762
  * ctypedef npy_longdouble longdouble_t
  * 
  * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
@@ -783,7 +673,7 @@ struct __pyx_obj_5adios_var;
  */
 typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":763
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":763
  * 
  * ctypedef npy_cfloat      cfloat_t
  * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
@@ -792,7 +682,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
  */
 typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":764
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":764
  * ctypedef npy_cfloat      cfloat_t
  * ctypedef npy_cdouble     cdouble_t
  * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
@@ -801,7 +691,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
  */
 typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":766
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":766
  * ctypedef npy_clongdouble clongdouble_t
  * 
  * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
@@ -813,11 +703,15 @@ 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_declare_group;
+struct __pyx_opt_args_5adios_define_var;
+struct __pyx_opt_args_5adios_select_method;
 struct __pyx_opt_args_5adios_read_init;
 struct __pyx_opt_args_5adios_read_finalize;
+struct __pyx_opt_args_5adios_4file_advance;
 struct __pyx_opt_args_5adios_3var_read;
 
-/* "adios.pyx":256
+/* "adios.pyx":259
  * ## ====================
  * 
  * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -829,7 +723,7 @@ struct __pyx_opt_args_5adios_init {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":259
+/* "adios.pyx":262
  *     return adios_init(config, comm)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -841,10 +735,10 @@ struct __pyx_opt_args_5adios_open {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":300
+/* "adios.pyx":303
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
@@ -853,7 +747,7 @@ struct __pyx_opt_args_5adios_finalize {
   int mype;
 };
 
-/* "adios.pyx":306
+/* "adios.pyx":309
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -865,38 +759,91 @@ struct __pyx_opt_args_5adios_init_noxml {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":422
- * ## ====================
+/* "adios.pyx":317
+ *                                  buffer_size)
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI_Comm comm = MPI_COMM_WORLD,
- *                 char * parameters = ""):
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index = "",
+ *                             int stats = 1):
+ */
+struct __pyx_opt_args_5adios_declare_group {
+  int __pyx_n;
+  char *time_index;
+  int stats;
+};
+
+/* "adios.pyx":327
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+struct __pyx_opt_args_5adios_define_var {
+  int __pyx_n;
+  char *dimensions;
+  char *global_dimensions;
+  char *local_offsets;
+};
+
+/* "adios.pyx":354
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters = "",
+ */
+struct __pyx_opt_args_5adios_select_method {
+  int __pyx_n;
+  char *parameters;
+  char *base_path;
+};
+
+/* "adios.pyx":487
+ * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI_Comm comm = MPI_COMM_WORLD,
+ *                     char * parameters = ""):
  */
 struct __pyx_opt_args_5adios_read_init {
   int __pyx_n;
-  ADIOS_READ_METHOD method;
+  char *method_name;
   MPI_Comm comm;
   char *parameters;
 };
 
-/* "adios.pyx":428
- * 
+/* "adios.pyx":495
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 struct __pyx_opt_args_5adios_read_finalize {
   int __pyx_n;
-  ADIOS_READ_METHOD method;
+  char *method_name;
 };
 
-/* "adios.pyx":520
- *         self.vp = NULL
+/* "adios.pyx":568
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+struct __pyx_opt_args_5adios_4file_advance {
+  int __pyx_n;
+  int last;
+  float timeout_sec;
+};
+
+/* "adios.pyx":611
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 struct __pyx_opt_args_5adios_3var_read {
   int __pyx_n;
@@ -906,9 +853,9 @@ struct __pyx_opt_args_5adios_3var_read {
   PyObject *nsteps;
 };
 
-/* "adios.pyx":431
- *     return adios_read_finalize_method (method)
+/* "adios.pyx":500
  * 
+ * """ Python class for ADIOS_FILE structure """
  * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
@@ -927,12 +874,13 @@ struct __pyx_obj_5adios_file {
   int file_size;
   PyObject *var;
   PyObject *attr;
+  int is_stream;
 };
 
 
-/* "adios.pyx":484
- *         printfile(self.fp)
+/* "adios.pyx":572
  * 
+ * """ Python class for ADIOS_VARINFO structure """
  * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cdef file file
@@ -952,9 +900,9 @@ struct __pyx_obj_5adios_var {
 
 
 
-/* "adios.pyx":431
- *     return adios_read_finalize_method (method)
+/* "adios.pyx":500
  * 
+ * """ Python class for ADIOS_FILE structure """
  * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
@@ -963,13 +911,14 @@ struct __pyx_obj_5adios_var {
 struct __pyx_vtabstruct_5adios_file {
   PyObject *(*close)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch);
   PyObject *(*printself)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch);
+  PyObject *(*advance)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_4file_advance *__pyx_optional_args);
 };
 static struct __pyx_vtabstruct_5adios_file *__pyx_vtabptr_5adios_file;
 
 
-/* "adios.pyx":484
- *         printfile(self.fp)
+/* "adios.pyx":572
  * 
+ * """ Python class for ADIOS_VARINFO structure """
  * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cdef file file
@@ -994,7 +943,7 @@ static struct __pyx_vtabstruct_5adios_var *__pyx_vtabptr_5adios_var;
     void (*FinishContext)(void**);
   } __Pyx_RefNannyAPIStruct;
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
-  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
 #ifdef WITH_THREAD
   #define __Pyx_RefNannySetupContext(name, acquire_gil) \
@@ -1031,7 +980,7 @@ static struct __pyx_vtabstruct_5adios_var *__pyx_vtabptr_5adios_var;
   #define __Pyx_XDECREF(r) Py_XDECREF(r)
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
-#endif /* CYTHON_REFNANNY */
+#endif
 #define __Pyx_XDECREF_SET(r, v) do {                            \
         PyObject *tmp = (PyObject *) r;                         \
         r = v; __Pyx_XDECREF(tmp);                              \
@@ -1058,36 +1007,36 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
 #endif
 
-static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
-static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
-    const char* function_name); /*proto*/
+    const char* function_name);
 
 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*/
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
 
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
 
 #if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
 #else
 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
 #endif
 
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
-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 CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb);
 
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                   int lineno, const char *filename,
-                                  int full_traceback); /*proto*/
+                                  int full_traceback);
 
 static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact); /*proto*/
+    const char *name, int exact);
 
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
@@ -1105,6 +1054,10 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
+#include <string.h>
+
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
 #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
     __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
@@ -1126,6 +1079,18 @@ 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 CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+#else
+#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
+#endif
+
 #if PY_MAJOR_VERSION >= 3
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
@@ -1146,37 +1111,19 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
-static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+static CYTHON_INLINE int __Pyx_IterFinish(void);
 
-static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) {
-    PyObject *method, *result = NULL;
-    if (unlikely(!args)) return NULL;
-    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
-    if (unlikely(!method)) goto bad;
-    result = __Pyx_PyObject_Call(method, args, NULL);
-    Py_DECREF(method);
-bad:
-    Py_DECREF(args);
-    return result;
-}
-#define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3))
-#define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2))
-#define __Pyx_PyObject_CallMethod1(obj, name, arg1) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1))
-#define __Pyx_PyObject_CallMethod0(obj, name) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF(__pyx_empty_tuple), __pyx_empty_tuple))
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
 
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
 
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
 
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
 
 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
 
-static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);
 
 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
                                              int is_tuple, int has_known_size, int decref_tuple);
@@ -1186,22 +1133,39 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict,
 static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
                                               PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
 
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
-static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
 
 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
-                                           PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/
+                                           PyObject *mkw, PyObject *modname, PyObject *doc);
 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
-                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
+                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
+
+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);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
 
 static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *);
 
@@ -1213,7 +1177,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
 
-static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
+static int __Pyx_Print(PyObject*, PyObject *, int);
 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
 static PyObject* __pyx_print = 0;
 static PyObject* __pyx_print_kwargs = 0;
@@ -1221,7 +1185,7 @@ static PyObject* __pyx_print_kwargs = 0;
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value);
 
-static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
@@ -1335,29 +1299,18 @@ static int __Pyx_check_binary_version(void);
 #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 PyObject *__Pyx_ImportModule(const char *name);
 
-static void __Pyx_AddTraceback(const char *funcname, int c_line,
-                               int py_line, const char *filename); /*proto*/
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);
 
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
 
+static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_4file_advance *__pyx_optional_args); /* proto*/
+static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_3var_read *__pyx_optional_args); /* proto*/
+static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
 
 /* Module declarations from 'cpython.buffer' */
 
@@ -1402,18 +1355,20 @@ static int __pyx_f_5adios_write_long(int64_t, char *, long, int __pyx_skip_dispa
 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_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 int64_t __pyx_f_5adios_declare_group(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_declare_group *__pyx_optional_args); /*proto*/
+static int __pyx_f_5adios_define_var(int64_t, char *, char *, int, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_define_var *__pyx_optional_args); /*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 int __pyx_f_5adios_select_method(int64_t, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_select_method *__pyx_optional_args); /*proto*/
 static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES); /*proto*/
 static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *); /*proto*/
 static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *); /*proto*/
-static PyObject *__pyx_f_5adios_read_init(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_init *__pyx_optional_args); /*proto*/
-static PyObject *__pyx_f_5adios_read_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_finalize *__pyx_optional_args); /*proto*/
+static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *); /*proto*/
+static PyObject *__pyx_f_5adios_np2adiostype(PyObject *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_read_init(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_init *__pyx_optional_args); /*proto*/
+static int __pyx_f_5adios_read_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_finalize *__pyx_optional_args); /*proto*/
 #define __Pyx_MODULE_NAME "adios"
 int __pyx_module_is_main_adios = 0;
 
@@ -1437,12 +1392,14 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
 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_32read_init(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method, MPI_Comm __pyx_v_comm, char *__pyx_v_parameters); /* proto */
-static PyObject *__pyx_pf_5adios_34read_finalize(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method); /* proto */
-static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_self, char *__pyx_v_fname, ADIOS_READ_METHOD __pyx_v_method, MPI_Comm __pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_32np2adiostype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nptype); /* proto */
+static PyObject *__pyx_pf_5adios_34read_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name, MPI_Comm __pyx_v_comm, char *__pyx_v_parameters); /* proto */
+static PyObject *__pyx_pf_5adios_36read_finalize(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name); /* proto */
+static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_self, char *__pyx_v_fname, char *__pyx_v_method_name, MPI_Comm __pyx_v_comm, PyObject *__pyx_v_is_stream, ADIOS_LOCKMODE __pyx_v_lock_mode, float __pyx_v_timeout_sec); /* proto */
 static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_4file_4close(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_4file_6printself(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_4file_8advance(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_v_last, float __pyx_v_timeout_sec); /* proto */
 static PyObject *__pyx_pf_5adios_4file_4name___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
 static int __pyx_pf_5adios_4file_4name_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_5adios_4file_4name_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
@@ -1466,6 +1423,8 @@ static int __pyx_pf_5adios_4file_3var_4__del__(struct __pyx_obj_5adios_file *__p
 static PyObject *__pyx_pf_5adios_4file_4attr___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
 static int __pyx_pf_5adios_4file_4attr_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_5adios_4file_4attr_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_4file_9is_stream___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_9is_stream_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_self, struct __pyx_obj_5adios_file *__pyx_v_file, char *__pyx_v_name); /* proto */
 static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
@@ -1486,8 +1445,8 @@ static int __pyx_pf_5adios_3var_4dims_2__set__(struct __pyx_obj_5adios_var *__py
 static int __pyx_pf_5adios_3var_4dims_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
 static int __pyx_pf_5adios_3var_6nsteps_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname); /* proto */
-static PyObject *__pyx_pf_5adios_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* proto */
+static PyObject *__pyx_pf_5adios_38readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname); /* proto */
+static PyObject *__pyx_pf_5adios_40bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* 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_file(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
@@ -1508,24 +1467,28 @@ static char __pyx_k_k[] = "k";
 static char __pyx_k_l[] = "l";
 static char __pyx_k_q[] = "q";
 static char __pyx_k_v[] = "v";
+static char __pyx_k_BP[] = "BP";
 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__6[] = "";
+static char __pyx_k__4[] = "";
+static char __pyx_k__8[] = "/";
 static char __pyx_k_fh[] = "fh";
 static char __pyx_k_fp[] = "fp";
 static char __pyx_k_np[] = "np";
 static char __pyx_k_vp[] = "vp";
 static char __pyx_k_NOW[] = "NOW";
 static char __pyx_k_YES[] = "YES";
-static char __pyx_k__10[] = "/";
 static char __pyx_k_all[] = "all";
 static char __pyx_k_doc[] = "__doc__";
 static char __pyx_k_end[] = "end";
+static char __pyx_k_str[] = "str_";
 static char __pyx_k_val[] = "val";
 static char __pyx_k_var[] = "var";
 static char __pyx_k_FLAG[] = "FLAG";
+static char __pyx_k_ICEE[] = "ICEE";
+static char __pyx_k_bool[] = "bool_";
 static char __pyx_k_bpls[] = "bpls";
 static char __pyx_k_byte[] = "byte";
 static char __pyx_k_comm[] = "comm";
@@ -1535,6 +1498,7 @@ 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_last[] = "last";
 static char __pyx_k_long[] = "long";
 static char __pyx_k_main[] = "__main__";
 static char __pyx_k_mode[] = "mode";
@@ -1551,6 +1515,7 @@ static char __pyx_k_vars[] = "vars";
 static char __pyx_k_when[] = "when";
 static char __pyx_k_15s_d[] = "%15s : %d";
 static char __pyx_k_15s_s[] = "%15s : %s";
+static char __pyx_k_DIMES[] = "DIMES";
 static char __pyx_k_LATER[] = "LATER";
 static char __pyx_k_adios[] = "adios";
 static char __pyx_k_array[] = "array";
@@ -1560,6 +1525,7 @@ 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_float[] = "float_";
 static char __pyx_k_fname[] = "fname";
 static char __pyx_k_group[] = "group";
 static char __pyx_k_int16[] = "int16";
@@ -1591,7 +1557,9 @@ static char __pyx_k_uint32[] = "uint32";
 static char __pyx_k_uint64[] = "uint64";
 static char __pyx_k_Reading[] = "Reading ... ";
 static char __pyx_k_UNKNOWN[] = "UNKNOWN";
-static char __pyx_k_complex[] = "complex";
+static char __pyx_k_advance[] = "advance";
+static char __pyx_k_complex[] = "complex_";
+static char __pyx_k_float16[] = "float16";
 static char __pyx_k_float32[] = "float32";
 static char __pyx_k_float64[] = "float64";
 static char __pyx_k_integer[] = "integer";
@@ -1601,6 +1569,7 @@ static char __pyx_k_unknown[] = "unknown";
 static char __pyx_k_varname[] = "varname";
 static char __pyx_k_version[] = "version";
 static char __pyx_k_DATATYPE[] = "DATATYPE";
+static char __pyx_k_FLEXPATH[] = "FLEXPATH";
 static char __pyx_k_float128[] = "float128";
 static char __pyx_k_group_id[] = "group_id";
 static char __pyx_k_itemsize[] = "itemsize";
@@ -1609,11 +1578,15 @@ static char __pyx_k_qualname[] = "__qualname__";
 static char __pyx_k_AdiosFile[] = "=== AdiosFile ===";
 static char __pyx_k_base_path[] = "base_path";
 static char __pyx_k_complex64[] = "complex64";
+static char __pyx_k_complex_2[] = "complex";
 static char __pyx_k_data_size[] = "data_size";
 static char __pyx_k_file_size[] = "file_size";
+static char __pyx_k_is_stream[] = "is_stream";
 static char __pyx_k_last_step[] = "last_step";
+static char __pyx_k_lock_mode[] = "lock_mode";
 static char __pyx_k_metaclass[] = "__metaclass__";
 static char __pyx_k_printself[] = "printself";
+static char __pyx_k_DATASPACES[] = "DATASPACES";
 static char __pyx_k_ValueError[] = "ValueError";
 static char __pyx_k_complex128[] = "complex128";
 static char __pyx_k_contiguous[] = "contiguous";
@@ -1627,6 +1600,9 @@ static char __pyx_k_time_index[] = "time_index";
 static char __pyx_k_time_steps[] = "time_steps";
 static char __pyx_k_buffer_size[] = "buffer_size";
 static char __pyx_k_long_double[] = "long_double";
+static char __pyx_k_method_name[] = "method_name";
+static char __pyx_k_timeout_sec[] = "timeout_sec";
+static char __pyx_k_BP_AGGREGATE[] = "BP_AGGREGATE";
 static char __pyx_k_RuntimeError[] = "RuntimeError";
 static char __pyx_k_current_step[] = "current_step";
 static char __pyx_k_var_namelist[] = "var_namelist";
@@ -1645,11 +1621,13 @@ static char __pyx_k_BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
 static char __pyx_k_No_valid_variable[] = "No valid variable";
 static char __pyx_k_global_dimensions[] = "global_dimensions";
 static char __pyx_k_Not_an_open_variable[] = "Not an open variable";
+static char __pyx_k_Use_default_BP_method[] = ". Use default BP method";
 static char __pyx_k_Count_dimension_mismatch[] = "Count dimension mismatch.";
 static char __pyx_k_Offset_dimension_mismatch[] = "Offset dimension mismatch";
 static char __pyx_k_Count_is_larger_than_shape[] = "Count is larger than shape.";
 static char __pyx_k_Step_index_is_out_of_range[] = "Step index is out of range";
 static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous";
+static char __pyx_k_WARN_Invalid_read_method_name[] = "[WARN] Invalid read method name:";
 static char __pyx_k_Data_type_is_not_supported_yet[] = "Data type is not supported yet";
 static char __pyx_k_ADIOS_is_freely_available_under[] = "\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_Users_jyc_project_adios_devel_w[] = "/Users/jyc/project/adios-devel/wrappers/numpy/adios.pyx";
@@ -1664,14 +1642,20 @@ static PyObject *__pyx_kp_s_15s_lu;
 static PyObject *__pyx_kp_s_15s_s;
 static PyObject *__pyx_kp_s_AdiosFile;
 static PyObject *__pyx_kp_s_AdiosVariable;
+static PyObject *__pyx_n_s_BP;
+static PyObject *__pyx_n_s_BP_AGGREGATE;
 static PyObject *__pyx_n_s_BUFFER_ALLOC_WHEN;
 static PyObject *__pyx_kp_s_Count_dimension_mismatch;
 static PyObject *__pyx_kp_s_Count_is_larger_than_shape;
+static PyObject *__pyx_n_s_DATASPACES;
 static PyObject *__pyx_n_s_DATATYPE;
+static PyObject *__pyx_n_s_DIMES;
 static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
 static PyObject *__pyx_n_s_FLAG;
+static PyObject *__pyx_n_s_FLEXPATH;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
+static PyObject *__pyx_n_s_ICEE;
 static PyObject *__pyx_n_s_LATER;
 static PyObject *__pyx_n_s_NO;
 static PyObject *__pyx_n_s_NOW;
@@ -1687,16 +1671,20 @@ static PyObject *__pyx_kp_s_Reading;
 static PyObject *__pyx_n_s_RuntimeError;
 static PyObject *__pyx_kp_s_Step_index_is_out_of_range;
 static PyObject *__pyx_n_s_UNKNOWN;
+static PyObject *__pyx_kp_s_Use_default_BP_method;
 static PyObject *__pyx_kp_s_Users_jyc_project_adios_devel_w;
 static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_kp_s_WARN_Invalid_read_method_name;
 static PyObject *__pyx_n_s_YES;
-static PyObject *__pyx_kp_s__10;
+static PyObject *__pyx_kp_s__8;
 static PyObject *__pyx_n_s_adios;
+static PyObject *__pyx_n_s_advance;
 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;
 static PyObject *__pyx_n_s_base_path;
+static PyObject *__pyx_n_s_bool;
 static PyObject *__pyx_n_s_bpls;
 static PyObject *__pyx_n_s_buffer_size;
 static PyObject *__pyx_n_s_byte;
@@ -1706,6 +1694,7 @@ 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_complex_2;
 static PyObject *__pyx_n_s_config;
 static PyObject *__pyx_n_s_contiguous;
 static PyObject *__pyx_n_s_copy;
@@ -1727,7 +1716,9 @@ 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_float;
 static PyObject *__pyx_n_s_float128;
+static PyObject *__pyx_n_s_float16;
 static PyObject *__pyx_n_s_float32;
 static PyObject *__pyx_n_s_float64;
 static PyObject *__pyx_n_s_fname;
@@ -1743,16 +1734,20 @@ 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_is_stream;
 static PyObject *__pyx_n_s_itemsize;
 static PyObject *__pyx_n_s_iterkeys;
 static PyObject *__pyx_n_s_k;
+static PyObject *__pyx_n_s_last;
 static PyObject *__pyx_n_s_last_step;
 static PyObject *__pyx_n_s_local_offsets;
+static PyObject *__pyx_n_s_lock_mode;
 static PyObject *__pyx_n_s_long;
 static PyObject *__pyx_n_s_long_double;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_metaclass;
 static PyObject *__pyx_n_s_method;
+static PyObject *__pyx_n_s_method_name;
 static PyObject *__pyx_n_s_mode;
 static PyObject *__pyx_n_s_module;
 static PyObject *__pyx_n_s_mype;
@@ -1781,10 +1776,12 @@ 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_str;
 static PyObject *__pyx_n_s_string;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_time_index;
 static PyObject *__pyx_n_s_time_steps;
+static PyObject *__pyx_n_s_timeout_sec;
 static PyObject *__pyx_n_s_type;
 static PyObject *__pyx_n_s_uint16;
 static PyObject *__pyx_n_s_uint32;
@@ -1826,11 +1823,11 @@ static PyObject *__pyx_int_neg_1;
 static MPI_Comm __pyx_k_;
 static MPI_Comm __pyx_k__2;
 static MPI_Comm __pyx_k__3;
-static ADIOS_READ_METHOD __pyx_k__4;
 static MPI_Comm __pyx_k__5;
-static ADIOS_READ_METHOD __pyx_k__7;
-static ADIOS_READ_METHOD __pyx_k__8;
-static MPI_Comm __pyx_k__9;
+static MPI_Comm __pyx_k__6;
+static ADIOS_LOCKMODE __pyx_k__7;
+static PyObject *__pyx_tuple__9;
+static PyObject *__pyx_tuple__10;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__12;
 static PyObject *__pyx_tuple__13;
@@ -1838,13 +1835,11 @@ static PyObject *__pyx_tuple__14;
 static PyObject *__pyx_tuple__15;
 static PyObject *__pyx_tuple__16;
 static PyObject *__pyx_tuple__17;
-static PyObject *__pyx_tuple__18;
 static PyObject *__pyx_tuple__19;
-static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_codeobj__18;
 static PyObject *__pyx_codeobj__20;
-static PyObject *__pyx_codeobj__22;
 
-/* "adios.pyx":256
+/* "adios.pyx":259
  * ## ====================
  * 
  * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -1868,7 +1863,7 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
     }
   }
 
-  /* "adios.pyx":257
+  /* "adios.pyx":260
  * 
  * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):
  *     return adios_init(config, comm)             # <<<<<<<<<<<<<<
@@ -1876,13 +1871,13 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
  * cpdef int64_t open(char * group_name,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_init(__pyx_v_config, __pyx_v_comm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(adios_init(__pyx_v_config, __pyx_v_comm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":256
+  /* "adios.pyx":259
  * ## ====================
  * 
  * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -1936,7 +1931,7 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
         }
       }
       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 = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -1946,16 +1941,16 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
         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 = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_config = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_config) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     if (values[1]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_comm = __pyx_k_;
     }
   }
   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 = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -1980,7 +1975,7 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
   __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 = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -1997,7 +1992,7 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
   return __pyx_r;
 }
 
-/* "adios.pyx":259
+/* "adios.pyx":262
  *     return adios_init(config, comm)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -2019,7 +2014,7 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
     }
   }
 
-  /* "adios.pyx":265
+  /* "adios.pyx":268
  *     cdef int64_t fd
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm)             # <<<<<<<<<<<<<<
@@ -2028,7 +2023,7 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
  */
   __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
-  /* "adios.pyx":266
+  /* "adios.pyx":269
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm)
  *     return fd             # <<<<<<<<<<<<<<
@@ -2038,7 +2033,7 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  /* "adios.pyx":259
+  /* "adios.pyx":262
  *     return adios_init(config, comm)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -2087,12 +2082,12 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
         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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (kw_args > 0) {
@@ -2101,7 +2096,7 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
         }
       }
       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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2113,18 +2108,18 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
         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 = 259; __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 = 260; __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 = 261; __pyx_clineno = __LINE__; goto __pyx_L3_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 = 262; __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 = 263; __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 = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     if (values[3]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[3]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[3]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_comm = __pyx_k__2;
     }
   }
   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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2151,7 +2146,7 @@ static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char
   __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_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -2168,7 +2163,7 @@ static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char
   return __pyx_r;
 }
 
-/* "adios.pyx":268
+/* "adios.pyx":271
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2184,7 +2179,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size", 0);
 
-  /* "adios.pyx":271
+  /* "adios.pyx":274
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -2193,7 +2188,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
  */
   __pyx_v_result = adios_group_size(__pyx_v_fd_p, __pyx_v_data_size, (&__pyx_v_total_size));
 
-  /* "adios.pyx":272
+  /* "adios.pyx":275
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -2203,7 +2198,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
   __pyx_r = __pyx_v_total_size;
   goto __pyx_L0;
 
-  /* "adios.pyx":268
+  /* "adios.pyx":271
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2248,11 +2243,11 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
         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 = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __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 = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2260,12 +2255,12 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-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("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2287,7 +2282,7 @@ static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_group_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_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 = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_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 = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2304,7 +2299,7 @@ static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":274
+/* "adios.pyx":277
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2327,23 +2322,23 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "adios.pyx":276
+  /* "adios.pyx":279
  * 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 = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 279; __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 = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 279; __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 = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":277
+    /* "adios.pyx":280
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:
  *         val_ = val             # <<<<<<<<<<<<<<
@@ -2356,38 +2351,38 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
   }
   /*else*/ {
 
-    /* "adios.pyx":279
+    /* "adios.pyx":282
  *         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 = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __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 = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 282; __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 = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __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 = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __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_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__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 = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_5);
     __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":281
+  /* "adios.pyx":284
  *         val_ = np.array(val, copy=True)
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)             # <<<<<<<<<<<<<<
@@ -2397,7 +2392,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val_->data));
   goto __pyx_L0;
 
-  /* "adios.pyx":274
+  /* "adios.pyx":277
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2452,16 +2447,16 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
         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 = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2470,19 +2465,19 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __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 = 277; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __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);
 
   /* function exit code */
@@ -2503,7 +2498,7 @@ static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int6
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2520,7 +2515,7 @@ static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":283
+/* "adios.pyx":286
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2534,7 +2529,7 @@ static int __pyx_f_5adios_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name, in
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_int", 0);
 
-  /* "adios.pyx":284
+  /* "adios.pyx":287
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2544,7 +2539,7 @@ static int __pyx_f_5adios_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name, in
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios.pyx":283
+  /* "adios.pyx":286
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2591,16 +2586,16 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
         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 = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __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 = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __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 = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2609,13 +2604,13 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __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 = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __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 = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2637,7 +2632,7 @@ static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_int", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2654,7 +2649,7 @@ static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":286
+/* "adios.pyx":289
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -2668,7 +2663,7 @@ static int __pyx_f_5adios_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_name, l
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_long", 0);
 
-  /* "adios.pyx":287
+  /* "adios.pyx":290
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2678,7 +2673,7 @@ static int __pyx_f_5adios_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_name, l
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios.pyx":286
+  /* "adios.pyx":289
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -2725,16 +2720,16 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
         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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2743,13 +2738,13 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2771,7 +2766,7 @@ static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_long", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2788,7 +2783,7 @@ static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":289
+/* "adios.pyx":292
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -2802,7 +2797,7 @@ static int __pyx_f_5adios_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_name,
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_float", 0);
 
-  /* "adios.pyx":290
+  /* "adios.pyx":293
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2812,7 +2807,7 @@ static int __pyx_f_5adios_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_name,
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios.pyx":289
+  /* "adios.pyx":292
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -2859,16 +2854,16 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
         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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2877,13 +2872,13 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __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 = 289; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __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 = 292; __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 = 292; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2905,7 +2900,7 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_float", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2922,7 +2917,7 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios.pyx":292
+/* "adios.pyx":295
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2944,7 +2939,7 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read", 0);
 
-  /* "adios.pyx":293
+  /* "adios.pyx":296
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -2953,36 +2948,36 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 296; __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 296; __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __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, __pyx_kp_s_Only_contiguous_arrays_are_suppo);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":294
+  /* "adios.pyx":297
  * 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 = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 297; __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 = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 297; __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 = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __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 = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_Reading);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_Reading);
@@ -2993,30 +2988,30 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_s_bytes);
   __Pyx_GIVEREF(__pyx_kp_s_bytes);
   __pyx_t_4 = 0;
-  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":295
+  /* "adios.pyx":298
  *     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 = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 298; __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 = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 298; __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 = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __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_As_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_As_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __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;
 
-  /* "adios.pyx":292
+  /* "adios.pyx":295
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -3069,16 +3064,16 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
         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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3087,19 +3082,19 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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 = 295; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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);
 
   /* function exit code */
@@ -3120,7 +3115,7 @@ static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int6
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3137,7 +3132,7 @@ static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":297
+/* "adios.pyx":300
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3151,17 +3146,17 @@ static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_sk
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios.pyx":298
+  /* "adios.pyx":301
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
  * 
- * cpdef finalize(int mype = 0):
+ * cpdef int finalize(int mype = 0):
  */
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  /* "adios.pyx":297
+  /* "adios.pyx":300
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3186,7 +3181,7 @@ static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_a
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
   assert(__pyx_arg_fd_p); {
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -3210,7 +3205,7 @@ static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3227,23 +3222,19 @@ static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int
   return __pyx_r;
 }
 
-/* "adios.pyx":300
+/* "adios.pyx":303
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int 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) {
+static int __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;
+  int __pyx_r;
   __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) {
@@ -3251,35 +3242,26 @@ static PyObject *__pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
 
-  /* "adios.pyx":301
+  /* "adios.pyx":304
  * 
- * cpdef finalize(int mype = 0):
+ * cpdef int finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_finalize(__pyx_v_mype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = adios_finalize(__pyx_v_mype);
   goto __pyx_L0;
 
-  /* "adios.pyx":300
+  /* "adios.pyx":303
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
 
   /* function exit code */
-  __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;
 }
@@ -3314,7 +3296,7 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
         }
       }
       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 = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3324,14 +3306,14 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __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 = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3347,8 +3329,9 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
 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;
+  int __pyx_t_1;
   struct __pyx_opt_args_5adios_finalize __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -3356,15 +3339,16 @@ static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self,
   __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 = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_5adios_finalize(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3373,7 +3357,7 @@ static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":306
+/* "adios.pyx":309
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -3393,7 +3377,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
     }
   }
 
-  /* "adios.pyx":307
+  /* "adios.pyx":310
  * ## ====================
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):
  *     return adios_init_noxml(comm)             # <<<<<<<<<<<<<<
@@ -3403,7 +3387,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
   __pyx_r = adios_init_noxml(__pyx_v_comm);
   goto __pyx_L0;
 
-  /* "adios.pyx":306
+  /* "adios.pyx":309
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -3447,7 +3431,7 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
         }
       }
       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 = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3457,14 +3441,14 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
       }
     }
     if (values[0]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[0]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[0]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_comm = __pyx_k__3;
     }
   }
   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 = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3491,7 +3475,7 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   __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 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -3508,7 +3492,7 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":309
+/* "adios.pyx":312
  *     return adios_init_noxml(comm)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -3522,7 +3506,7 @@ static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buf
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
 
-  /* "adios.pyx":311
+  /* "adios.pyx":314
  * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
  *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
@@ -3532,7 +3516,7 @@ static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buf
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  /* "adios.pyx":309
+  /* "adios.pyx":312
  *     return adios_init_noxml(comm)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -3577,11 +3561,11 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
         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 = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __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 = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3589,12 +3573,12 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __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 = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3616,7 +3600,7 @@ static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3633,32 +3617,42 @@ static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios.pyx":314
+/* "adios.pyx":317
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
+ *                             char * time_index = "",
+ *                             int stats = 1):
  */
 
 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) {
+static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_declare_group *__pyx_optional_args) {
+  char *__pyx_v_time_index = ((char *)__pyx_k__4);
+  int __pyx_v_stats = ((int)1);
   int64_t __pyx_v_id;
   int64_t __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_time_index = __pyx_optional_args->time_index;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_stats = __pyx_optional_args->stats;
+      }
+    }
+  }
 
-  /* "adios.pyx":317
- *                             char * time_index,
- *                             int stats):
+  /* "adios.pyx":320
+ *                             char * time_index = "",
+ *                             int stats = 1):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
  *     adios_declare_group (&id,
  *                          name,
  */
   __pyx_v_id = 0;
 
-  /* "adios.pyx":318
- *                             int stats):
+  /* "adios.pyx":321
+ *                             int stats = 1):
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
  *                          name,
@@ -3666,7 +3660,7 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
  */
   adios_declare_group((&__pyx_v_id), __pyx_v_name, __pyx_v_time_index, ((ADIOS_FLAG)__pyx_v_stats));
 
-  /* "adios.pyx":322
+  /* "adios.pyx":325
  *                          time_index,
  *                          <ADIOS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -3676,12 +3670,12 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  /* "adios.pyx":314
+  /* "adios.pyx":317
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
+ *                             char * time_index = "",
+ *                             int stats = 1):
  */
 
   /* function exit code */
@@ -3721,33 +3715,43 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
         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 = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index);
+          if (value) { values[1] = value; kw_args--; }
         }
         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 = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       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 = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __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);
+      switch (PyTuple_GET_SIZE(__pyx_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);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[1]) {
+      __pyx_v_time_index = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_time_index) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_time_index = ((char *)__pyx_k__4);
+    }
+    if (values[2]) {
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_stats = ((int)1);
     }
-    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __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 = 315; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __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 = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3763,21 +3767,27 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
 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;
+  int64_t __pyx_t_1;
+  struct __pyx_opt_args_5adios_declare_group __pyx_t_2;
+  PyObject *__pyx_t_3 = 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_From_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 = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.time_index = __pyx_v_time_index;
+  __pyx_t_2.stats = __pyx_v_stats;
+  __pyx_t_1 = __pyx_f_5adios_declare_group(__pyx_v_name, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3786,7 +3796,7 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":324
+/* "adios.pyx":327
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -3795,14 +3805,28 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
  */
 
 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) {
+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, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_define_var *__pyx_optional_args) {
+  char *__pyx_v_dimensions = ((char *)__pyx_k__4);
+  char *__pyx_v_global_dimensions = ((char *)__pyx_k__4);
+  char *__pyx_v_local_offsets = ((char *)__pyx_k__4);
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var", 0);
-
-  /* "adios.pyx":331
- *                      char * global_dimensions,
- *                      char * local_offsets):
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_dimensions = __pyx_optional_args->dimensions;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_global_dimensions = __pyx_optional_args->global_dimensions;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_local_offsets = __pyx_optional_args->local_offsets;
+        }
+      }
+    }
+  }
+
+  /* "adios.pyx":334
+ *                      char * global_dimensions = "",
+ *                      char * local_offsets = ""):
  *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
  *                             name, path,
  *                             <ADIOS_DATATYPES> type,
@@ -3810,7 +3834,7 @@ static int __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, char *__pyx_v_nam
   __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;
 
-  /* "adios.pyx":324
+  /* "adios.pyx":327
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -3865,59 +3889,73 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
         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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dimensions);
+          if (value) { values[4] = value; kw_args--; }
         }
         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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_global_dimensions);
+          if (value) { values[5] = value; kw_args--; }
         }
         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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_local_offsets);
+          if (value) { values[6] = value; kw_args--; }
         }
       }
       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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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);
+      switch (PyTuple_GET_SIZE(__pyx_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);
+        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_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 328; __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 = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[4]) {
+      __pyx_v_dimensions = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_dimensions = ((char *)__pyx_k__4);
+    }
+    if (values[5]) {
+      __pyx_v_global_dimensions = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_global_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_global_dimensions = ((char *)__pyx_k__4);
+    }
+    if (values[6]) {
+      __pyx_v_local_offsets = __Pyx_PyObject_AsString(values[6]); if (unlikely((!__pyx_v_local_offsets) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_local_offsets = ((char *)__pyx_k__4);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __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 = 325; __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 = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 328; __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 = 329; __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 = 330; __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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3933,21 +3971,28 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
 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_t_1;
+  struct __pyx_opt_args_5adios_define_var __pyx_t_2;
+  PyObject *__pyx_t_3 = 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 = __Pyx_PyInt_From_int(__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 = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.__pyx_n = 3;
+  __pyx_t_2.dimensions = __pyx_v_dimensions;
+  __pyx_t_2.global_dimensions = __pyx_v_global_dimensions;
+  __pyx_t_2.local_offsets = __pyx_v_local_offsets;
+  __pyx_t_1 = __pyx_f_5adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3956,7 +4001,7 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":338
+/* "adios.pyx":341
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -3970,7 +4015,7 @@ static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, char *__pyx_v_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios.pyx":344
+  /* "adios.pyx":347
  *                             char * value,
  *                             char * var):
  *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
@@ -3980,7 +4025,7 @@ static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, char *__pyx_v_
   __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;
 
-  /* "adios.pyx":338
+  /* "adios.pyx":341
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -4033,31 +4078,31 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
         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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4069,16 +4114,16 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __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 = 339; __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 = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 342; __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 = 343; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 342; __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 = 343; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __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 = 345; __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 = 346; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4100,7 +4145,7 @@ static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("define_attribute", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__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 = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4117,23 +4162,33 @@ static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":351
+/* "adios.pyx":354
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
  *                          char * method,
- *                          char * parameters,
+ *                          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) {
+static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, char *__pyx_v_method, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_select_method *__pyx_optional_args) {
+  char *__pyx_v_parameters = ((char *)__pyx_k__4);
+  char *__pyx_v_base_path = ((char *)__pyx_k__4);
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_parameters = __pyx_optional_args->parameters;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_base_path = __pyx_optional_args->base_path;
+      }
+    }
+  }
 
-  /* "adios.pyx":355
- *                          char * parameters,
- *                          char * base_path):
+  /* "adios.pyx":358
+ *                          char * parameters = "",
+ *                          char * base_path = ""):
  *     return adios_select_method (group,             # <<<<<<<<<<<<<<
  *                                 method,
  *                                 parameters,
@@ -4141,12 +4196,12 @@ static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, char *__pyx_v_met
   __pyx_r = adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
   goto __pyx_L0;
 
-  /* "adios.pyx":351
+  /* "adios.pyx":354
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
  *                          char * method,
- *                          char * parameters,
+ *                          char * parameters = "",
  */
 
   /* function exit code */
@@ -4190,38 +4245,48 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
         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 = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __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 = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters);
+          if (value) { values[2] = value; kw_args--; }
         }
         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 = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_base_path);
+          if (value) { values[3] = value; kw_args--; }
         }
       }
       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 = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __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);
+      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);
+        case  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 = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __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 = 355; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[2]) {
+      __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_parameters = ((char *)__pyx_k__4);
+    }
+    if (values[3]) {
+      __pyx_v_base_path = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_base_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_base_path = ((char *)__pyx_k__4);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __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 = 352; __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 = 353; __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 = 354; __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 = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4237,21 +4302,27 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
 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_t_1;
+  struct __pyx_opt_args_5adios_select_method __pyx_t_2;
+  PyObject *__pyx_t_3 = 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 = __Pyx_PyInt_From_int(__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 = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.parameters = __pyx_v_parameters;
+  __pyx_t_2.base_path = __pyx_v_base_path;
+  __pyx_t_1 = __pyx_f_5adios_select_method(__pyx_v_group, __pyx_v_method, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -4260,7 +4331,7 @@ static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":365
+/* "adios.pyx":368
  * ## ====================
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
@@ -4279,7 +4350,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adios2nptype", 0);
 
-  /* "adios.pyx":366
+  /* "adios.pyx":369
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None             # <<<<<<<<<<<<<<
@@ -4289,7 +4360,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyObject*)Py_None);
 
-  /* "adios.pyx":391
+  /* "adios.pyx":394
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4298,7 +4369,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
   switch (__pyx_v_t) {
 
-    /* "adios.pyx":367
+    /* "adios.pyx":370
  * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -4307,24 +4378,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_byte:
 
-    /* "adios.pyx":368
+    /* "adios.pyx":371
  *     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 = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 371; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":369
+    /* "adios.pyx":372
  *     if t == adios_byte:
  *         ntype = np.int8
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -4333,24 +4404,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_short:
 
-    /* "adios.pyx":370
+    /* "adios.pyx":373
  *         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 = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 373; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":371
+    /* "adios.pyx":374
  *     elif t == adios_short:
  *         ntype = np.int16
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -4359,24 +4430,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_integer:
 
-    /* "adios.pyx":372
+    /* "adios.pyx":375
  *         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 = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __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 = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 375; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":373
+    /* "adios.pyx":376
  *     elif t == adios_integer:
  *         ntype = np.int32
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -4385,24 +4456,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_long:
 
-    /* "adios.pyx":374
+    /* "adios.pyx":377
  *         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 = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 377; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":375
+    /* "adios.pyx":378
  *     elif t == adios_long:
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -4411,24 +4482,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_byte:
 
-    /* "adios.pyx":376
+    /* "adios.pyx":379
  *         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 = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 379; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":377
+    /* "adios.pyx":380
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -4437,24 +4508,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_short:
 
-    /* "adios.pyx":378
+    /* "adios.pyx":381
  *         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 = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 381; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":379
+    /* "adios.pyx":382
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -4463,24 +4534,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_integer:
 
-    /* "adios.pyx":380
+    /* "adios.pyx":383
  *         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 = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 383; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":381
+    /* "adios.pyx":384
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -4489,24 +4560,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_long:
 
-    /* "adios.pyx":382
+    /* "adios.pyx":385
  *         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 = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __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 = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 385; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":383
+    /* "adios.pyx":386
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -4515,24 +4586,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_real:
 
-    /* "adios.pyx":384
+    /* "adios.pyx":387
  *         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 = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 387; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":385
+    /* "adios.pyx":388
  *     elif t == adios_real:
  *         ntype = np.float32
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -4541,24 +4612,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_double:
 
-    /* "adios.pyx":386
+    /* "adios.pyx":389
  *         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 = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 389; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":387
+    /* "adios.pyx":390
  *     elif t == adios_double:
  *         ntype = np.float64
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -4567,24 +4638,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_long_double:
 
-    /* "adios.pyx":388
+    /* "adios.pyx":391
  *         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 = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 391; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":389
+    /* "adios.pyx":392
  *     elif t == adios_long_double:
  *         ntype = np.float128
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -4593,24 +4664,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_complex:
 
-    /* "adios.pyx":390
+    /* "adios.pyx":393
  *         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 = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __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 = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 393; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":391
+    /* "adios.pyx":394
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4619,25 +4690,25 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_double_complex:
 
-    /* "adios.pyx":392
+    /* "adios.pyx":395
  *         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 = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 395; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
     default:
 
-    /* "adios.pyx":394
+    /* "adios.pyx":397
  *         ntype = np.complex128
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -4649,7 +4720,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
     break;
   }
 
-  /* "adios.pyx":396
+  /* "adios.pyx":399
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
@@ -4661,7 +4732,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  /* "adios.pyx":365
+  /* "adios.pyx":368
  * ## ====================
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
@@ -4682,7 +4753,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   return __pyx_r;
 }
 
-/* "adios.pyx":398
+/* "adios.pyx":401
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -4703,16 +4774,16 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios.pyx":399
+  /* "adios.pyx":402
  * 
  * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __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 = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fh);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fh);
@@ -4720,22 +4791,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":400
+  /* "adios.pyx":403
  * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)
  *     print '%15s : %d' % ('nvars', f.nvars)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nvars);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nvars);
@@ -4743,30 +4814,30 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":401
+  /* "adios.pyx":404
  *     print '%15s : %lu' % ('fh', f.fh)
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nvars;
   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->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __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 = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __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 = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_var_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_var_namelist);
@@ -4774,22 +4845,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":402
+  /* "adios.pyx":405
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nattrs);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nattrs);
@@ -4797,30 +4868,30 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":403
+  /* "adios.pyx":406
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nattrs;
   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->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __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 = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __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 = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_attr_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_attr_namelist);
@@ -4828,22 +4899,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":404
+  /* "adios.pyx":407
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_current_step);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_current_step);
@@ -4851,22 +4922,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":405
+  /* "adios.pyx":408
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __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 = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_last_step);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_last_step);
@@ -4874,22 +4945,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":406
+  /* "adios.pyx":409
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_path);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_path);
@@ -4897,22 +4968,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":407
+  /* "adios.pyx":410
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('version', f.version)
  *     print '%15s : %lu' % ('file_size', f.file_size)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __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 = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_endianness);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_endianness);
@@ -4920,22 +4991,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":408
+  /* "adios.pyx":411
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)             # <<<<<<<<<<<<<<
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_version);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_version);
@@ -4943,22 +5014,22 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":409
+  /* "adios.pyx":412
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)
  *     print '%15s : %lu' % ('file_size', f.file_size)             # <<<<<<<<<<<<<<
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __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 = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_file_size);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_file_size);
@@ -4966,13 +5037,13 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":398
+  /* "adios.pyx":401
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -4994,7 +5065,7 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   return __pyx_r;
 }
 
-/* "adios.pyx":411
+/* "adios.pyx":414
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -5015,16 +5086,16 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios.pyx":412
+  /* "adios.pyx":415
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  *     print '%15s : %d' % ('varid', v.varid)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_varid);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_varid);
@@ -5032,22 +5103,22 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":413
+  /* "adios.pyx":416
  * cdef printvar(ADIOS_VARINFO * v):
  *     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)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_v->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __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 = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_type);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_type);
@@ -5055,22 +5126,22 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":414
+  /* "adios.pyx":417
  *     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' % ('nsteps', v.nsteps)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_ndim);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ndim);
@@ -5078,30 +5149,30 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":415
+  /* "adios.pyx":418
  *     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' % ('nsteps', v.nsteps)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __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_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __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 = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __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 = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_dims);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_dims);
@@ -5109,22 +5180,22 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":416
+  /* "adios.pyx":419
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
  *     print '%15s : %d' % ('nsteps', v.nsteps)             # <<<<<<<<<<<<<<
  * 
- * ## ====================
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __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 = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nsteps);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nsteps);
@@ -5132,13 +5203,13 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":411
+  /* "adios.pyx":414
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -5160,75 +5231,1016 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   return __pyx_r;
 }
 
-/* "adios.pyx":422
- * ## ====================
+/* "adios.pyx":421
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI_Comm comm = MPI_COMM_WORLD,
- *                 char * parameters = ""):
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):             # <<<<<<<<<<<<<<
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
  */
 
-static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_5adios_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_init *__pyx_optional_args) {
-  ADIOS_READ_METHOD __pyx_v_method = __pyx_k__4;
-  MPI_Comm __pyx_v_comm = __pyx_k__5;
-  char *__pyx_v_parameters = ((char *)__pyx_k__6);
-  PyObject *__pyx_r = NULL;
+static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_name) {
+  ADIOS_READ_METHOD __pyx_v_method;
+  ADIOS_READ_METHOD __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_init", 0);
-  if (__pyx_optional_args) {
-    if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_method = __pyx_optional_args->method;
-      if (__pyx_optional_args->__pyx_n > 1) {
-        __pyx_v_comm = __pyx_optional_args->comm;
-        if (__pyx_optional_args->__pyx_n > 2) {
-          __pyx_v_parameters = __pyx_optional_args->parameters;
-        }
-      }
-    }
-  }
-
-  /* "adios.pyx":425
- *                 MPI_Comm comm = MPI_COMM_WORLD,
- *                 char * parameters = ""):
- *     return adios_read_init_method (method, comm, parameters)             # <<<<<<<<<<<<<<
- * 
- * 
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_read_init_method(__pyx_v_method, __pyx_v_comm, __pyx_v_parameters)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __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_RefNannySetupContext("str2adiosreadmethod", 0);
 
   /* "adios.pyx":422
- * ## ====================
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI_Comm comm = MPI_COMM_WORLD,
- *                 char * parameters = ""):
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+ *     if (name == "BP"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):
+ */
+  __pyx_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "adios.pyx":423
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP             # <<<<<<<<<<<<<<
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_BP;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":424
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios.pyx":425
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE             # <<<<<<<<<<<<<<
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_BP_AGGREGATE;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":426
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):
+ */
+  __pyx_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "adios.pyx":427
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES             # <<<<<<<<<<<<<<
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_DATASPACES;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":428
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios.pyx":429
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES             # <<<<<<<<<<<<<<
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_DIMES;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":430
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):
+ */
+  __pyx_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "adios.pyx":431
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH             # <<<<<<<<<<<<<<
+ *     elif (name == "ICEE"):
+ *         method = ADIOS_READ_METHOD_ICEE
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_FLEXPATH;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":432
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_ICEE
+ *     else:
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios.pyx":433
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):
+ *         method = ADIOS_READ_METHOD_ICEE             # <<<<<<<<<<<<<<
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_ICEE;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "adios.pyx":435
+ *         method = ADIOS_READ_METHOD_ICEE
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP
+ * 
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_kp_s_WARN_Invalid_read_method_name);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_WARN_Invalid_read_method_name);
+    __Pyx_GIVEREF(__pyx_kp_s_WARN_Invalid_read_method_name);
+    __Pyx_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_name);
+    __Pyx_GIVEREF(__pyx_v_name);
+    __Pyx_INCREF(__pyx_kp_s_Use_default_BP_method);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_s_Use_default_BP_method);
+    __Pyx_GIVEREF(__pyx_kp_s_Use_default_BP_method);
+    if (__Pyx_Print(0, __pyx_t_3, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "adios.pyx":436
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'
+ *         method = ADIOS_READ_METHOD_BP             # <<<<<<<<<<<<<<
+ * 
+ *     return method
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_BP;
+  }
+  __pyx_L3:;
+
+  /* "adios.pyx":438
+ *         method = ADIOS_READ_METHOD_BP
+ * 
+ *     return method             # <<<<<<<<<<<<<<
+ * 
+ * cpdef np2adiostype(type nptype):
+ */
+  __pyx_r = __pyx_v_method;
+  goto __pyx_L0;
+
+  /* "adios.pyx":421
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
+ * 
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):             # <<<<<<<<<<<<<<
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_WriteUnraisable("adios.str2adiosreadmethod", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":440
+ *     return method
+ * 
+ * cpdef np2adiostype(type nptype):             # <<<<<<<<<<<<<<
+ *     """ Ignored: int_, intc, intp """
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype); /*proto*/
+static PyObject *__pyx_f_5adios_np2adiostype(PyObject *__pyx_v_nptype, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_atype = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("np2adiostype", 0);
+
+  /* "adios.pyx":443
+ *     """ Ignored: int_, intc, intp """
+ * 
+ *     cdef atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
+ * 
+ *     if (nptype == np.bool_):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_atype = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":445
+ *     cdef atype = DATATYPE.unknown
+ * 
+ *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":446
+ * 
+ *     if (nptype == np.bool_):
+ *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_integer); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":447
+ *     if (nptype == np.bool_):
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); 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(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":448
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":449
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __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 = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":450
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":451
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __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 = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":452
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":453
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __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 = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":454
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":455
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __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 = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":456
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":457
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __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 = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":458
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":459
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __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 = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":460
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":461
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __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 = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":462
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":463
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":464
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":465
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":466
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":467
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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);
+  __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 = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":468
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":469
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __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 = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":470
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":471
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":472
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":473
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __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 = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":474
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":475
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":476
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.str_):
+ *         atype = DATATYPE.byte
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios.pyx":477
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.byte
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_str); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":478
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):
+ *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
+ * 
+ *     return atype
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "adios.pyx":480
+ *         atype = DATATYPE.byte
+ * 
+ *     return atype             # <<<<<<<<<<<<<<
+ * 
+ * ## ====================
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_atype);
+  __pyx_r = __pyx_v_atype;
+  goto __pyx_L0;
+
+  /* "adios.pyx":440
+ *     return method
+ * 
+ * cpdef np2adiostype(type nptype):             # <<<<<<<<<<<<<<
+ *     """ Ignored: int_, intc, intp """
+ * 
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.np2adiostype", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_atype);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  ADIOS_READ_METHOD __pyx_v_method;
+static PyObject *__pyx_pw_5adios_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype); /*proto*/
+static char __pyx_doc_5adios_32np2adiostype[] = " Ignored: int_, intc, intp ";
+static PyObject *__pyx_pw_5adios_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype) {
+  CYTHON_UNUSED int __pyx_lineno = 0;
+  CYTHON_UNUSED const char *__pyx_filename = NULL;
+  CYTHON_UNUSED int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("np2adiostype (wrapper)", 0);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), (&PyType_Type), 1, "nptype", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_32np2adiostype(__pyx_self, ((PyObject*)__pyx_v_nptype));
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_32np2adiostype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nptype) {
+  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("np2adiostype", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_5adios_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.np2adiostype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":487
+ * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI_Comm comm = MPI_COMM_WORLD,
+ *                     char * parameters = ""):
+ */
+
+static PyObject *__pyx_pw_5adios_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_init *__pyx_optional_args) {
+  char *__pyx_v_method_name = ((char *)__pyx_k_BP);
+  MPI_Comm __pyx_v_comm = __pyx_k__5;
+  char *__pyx_v_parameters = ((char *)__pyx_k__4);
+  PyObject *__pyx_v_method = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  ADIOS_READ_METHOD __pyx_t_3;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read_init", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_method_name = __pyx_optional_args->method_name;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_comm = __pyx_optional_args->comm;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_parameters = __pyx_optional_args->parameters;
+        }
+      }
+    }
+  }
+
+  /* "adios.pyx":490
+ *                     MPI_Comm comm = MPI_COMM_WORLD,
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ *     return adios_read_init_method (method, comm, parameters)
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); 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_t_2 = PyInt_FromLong(__pyx_f_5adios_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":491
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)
+ *     return adios_read_init_method (method, comm, parameters)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_3 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = adios_read_init_method(__pyx_t_3, __pyx_v_comm, __pyx_v_parameters);
+  goto __pyx_L0;
+
+  /* "adios.pyx":487
+ * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI_Comm comm = MPI_COMM_WORLD,
+ *                     char * parameters = ""):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_WriteUnraisable("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_method);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_method_name;
   MPI_Comm __pyx_v_comm;
   char *__pyx_v_parameters;
   int __pyx_lineno = 0;
@@ -5238,7 +6250,7 @@ static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read_init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_comm,&__pyx_n_s_parameters,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_name,&__pyx_n_s_comm,&__pyx_n_s_parameters,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -5254,7 +6266,7 @@ static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__p
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[0] = value; kw_args--; }
         }
         case  1:
@@ -5269,7 +6281,7 @@ static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5281,59 +6293,61 @@ static PyObject *__pyx_pw_5adios_33read_init(PyObject *__pyx_self, PyObject *__p
       }
     }
     if (values[0]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[0])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__4;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
     if (values[1]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_comm = __pyx_k__5;
     }
     if (values[2]) {
-      __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __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 = 489; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_parameters = ((char *)__pyx_k__6);
+      __pyx_v_parameters = ((char *)__pyx_k__4);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_32read_init(__pyx_self, __pyx_v_method, __pyx_v_comm, __pyx_v_parameters);
+  __pyx_r = __pyx_pf_5adios_34read_init(__pyx_self, __pyx_v_method_name, __pyx_v_comm, __pyx_v_parameters);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_32read_init(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method, MPI_Comm __pyx_v_comm, char *__pyx_v_parameters) {
+static PyObject *__pyx_pf_5adios_34read_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name, MPI_Comm __pyx_v_comm, char *__pyx_v_parameters) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   struct __pyx_opt_args_5adios_read_init __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_init", 0);
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 3;
-  __pyx_t_2.method = __pyx_v_method;
+  __pyx_t_2.method_name = __pyx_v_method_name;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_2.parameters = __pyx_v_parameters;
-  __pyx_t_1 = __pyx_f_5adios_read_init(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_5adios_read_init(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5342,67 +6356,83 @@ static PyObject *__pyx_pf_5adios_32read_init(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":428
- * 
+/* "adios.pyx":495
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 
-static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_5adios_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_finalize *__pyx_optional_args) {
-  ADIOS_READ_METHOD __pyx_v_method = __pyx_k__7;
-  PyObject *__pyx_r = NULL;
+static PyObject *__pyx_pw_5adios_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_read_finalize *__pyx_optional_args) {
+  char *__pyx_v_method_name = ((char *)__pyx_k_BP);
+  PyObject *__pyx_v_method = 0;
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  ADIOS_READ_METHOD __pyx_t_3;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_finalize", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_method = __pyx_optional_args->method;
+      __pyx_v_method_name = __pyx_optional_args->method_name;
     }
   }
 
-  /* "adios.pyx":429
+  /* "adios.pyx":496
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):
+ *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_5adios_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":497
+ * cpdef int read_finalize(char * method_name = "BP"):
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)             # <<<<<<<<<<<<<<
  * 
- * cdef class file:
+ * """ Python class for ADIOS_FILE structure """
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_read_finalize_method(__pyx_v_method)); 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;
+  __pyx_t_3 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = adios_read_finalize_method(__pyx_t_3);
   goto __pyx_L0;
 
-  /* "adios.pyx":428
- * 
+  /* "adios.pyx":495
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_WriteUnraisable("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_XDECREF(__pyx_v_method);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  ADIOS_READ_METHOD __pyx_v_method;
+static PyObject *__pyx_pw_5adios_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_method_name;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -5410,7 +6440,7 @@ static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read_finalize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_name,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -5424,12 +6454,12 @@ static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5439,47 +6469,49 @@ static PyObject *__pyx_pw_5adios_35read_finalize(PyObject *__pyx_self, PyObject
       }
     }
     if (values[0]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[0])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__7;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_34read_finalize(__pyx_self, __pyx_v_method);
+  __pyx_r = __pyx_pf_5adios_36read_finalize(__pyx_self, __pyx_v_method_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_34read_finalize(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method) {
+static PyObject *__pyx_pf_5adios_36read_finalize(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   struct __pyx_opt_args_5adios_read_finalize __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_finalize", 0);
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
-  __pyx_t_2.method = __pyx_v_method;
-  __pyx_t_1 = __pyx_f_5adios_read_finalize(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.method_name = __pyx_v_method_name;
+  __pyx_t_1 = __pyx_f_5adios_read_finalize(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5488,20 +6520,23 @@ static PyObject *__pyx_pf_5adios_34read_finalize(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":448
- *     cpdef public dict attr
+/* "adios.pyx":520
  * 
+ *     """ Initialization. Call adios_read_open and populate public members """
  *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *                  char * method_name = "BP",
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
  */
 
 /* Python wrapper */
 static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_fname;
-  ADIOS_READ_METHOD __pyx_v_method;
+  char *__pyx_v_method_name;
   MPI_Comm __pyx_v_comm;
+  PyObject *__pyx_v_is_stream = 0;
+  ADIOS_LOCKMODE __pyx_v_lock_mode;
+  float __pyx_v_timeout_sec;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -5509,12 +6544,24 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method_name,&__pyx_n_s_comm,&__pyx_n_s_is_stream,&__pyx_n_s_lock_mode,&__pyx_n_s_timeout_sec,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+
+    /* "adios.pyx":523
+ *                  char * method_name = "BP",
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
+ *                  is_stream = False,             # <<<<<<<<<<<<<<
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+ *                  float timeout_sec = 0.0):
+ */
+    values[3] = ((PyObject *)Py_False);
     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);
@@ -5528,7 +6575,7 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[1] = value; kw_args--; }
         }
         case  2:
@@ -5536,12 +6583,30 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[2] = value; kw_args--; }
         }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_is_stream);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lock_mode);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_timeout_sec);
+          if (value) { values[5] = 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 = 448; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_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);
@@ -5549,67 +6614,89 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
         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 = 448; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fname = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_fname) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     if (values[1]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[1])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__8;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
     if (values[2]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[2]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[2]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_comm = __pyx_k__6;
+    }
+    __pyx_v_is_stream = values[3];
+    if (values[4]) {
+      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)PyInt_AsLong(values[4])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_lock_mode = __pyx_k__7;
+    }
+    if (values[5]) {
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_comm = __pyx_k__9;
+      __pyx_v_timeout_sec = ((float)0.0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_4file___init__(((struct __pyx_obj_5adios_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method, __pyx_v_comm);
+  __pyx_r = __pyx_pf_5adios_4file___init__(((struct __pyx_obj_5adios_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method_name, __pyx_v_comm, __pyx_v_is_stream, __pyx_v_lock_mode, __pyx_v_timeout_sec);
+
+  /* "adios.pyx":520
+ * 
+ *     """ Initialization. Call adios_read_open and populate public members """
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  char * method_name = "BP",
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
+ */
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_self, char *__pyx_v_fname, ADIOS_READ_METHOD __pyx_v_method, MPI_Comm __pyx_v_comm) {
+static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_self, char *__pyx_v_fname, char *__pyx_v_method_name, MPI_Comm __pyx_v_comm, PyObject *__pyx_v_is_stream, ADIOS_LOCKMODE __pyx_v_lock_mode, float __pyx_v_timeout_sec) {
+  PyObject *__pyx_v_method = 0;
   PyObject *__pyx_v_varname = 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_2;
+  PyObject *__pyx_t_3 = NULL;
+  ADIOS_READ_METHOD __pyx_t_4;
   int __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
+  uint64_t __pyx_t_6;
+  int __pyx_t_7;
+  Py_ssize_t __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":451
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+  /* "adios.pyx":526
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+ *                  float timeout_sec = 0.0):
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  *         self.var = {}
  *         self.attr = {}
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios.pyx":452
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+  /* "adios.pyx":527
+ *                  float timeout_sec = 0.0):
  *         self.fp = NULL
  *         self.var = {}             # <<<<<<<<<<<<<<
  *         self.attr = {}
- * 
+ *         self.is_stream = is_stream
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); 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_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->var);
@@ -5617,14 +6704,14 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->var = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":453
+  /* "adios.pyx":528
  *         self.fp = NULL
  *         self.var = {}
  *         self.attr = {}             # <<<<<<<<<<<<<<
- * 
- *         self.fp = adios_read_open_file(fname, method, comm)
+ *         self.is_stream = is_stream
+ *         cdef method = str2adiosreadmethod(method_name)
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attr);
@@ -5632,18 +6719,77 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":455
+  /* "adios.pyx":529
+ *         self.var = {}
  *         self.attr = {}
+ *         self.is_stream = is_stream             # <<<<<<<<<<<<<<
+ *         cdef method = str2adiosreadmethod(method_name)
  * 
- *         self.fp = adios_read_open_file(fname, method, comm)             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->is_stream = __pyx_t_2;
+
+  /* "adios.pyx":530
+ *         self.attr = {}
+ *         self.is_stream = is_stream
+ *         cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ * 
+ *         if (is_stream):
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = PyInt_FromLong(__pyx_f_5adios_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "adios.pyx":532
+ *         cdef method = str2adiosreadmethod(method_name)
+ * 
+ *         if (is_stream):             # <<<<<<<<<<<<<<
+ *             self.fp = adios_read_open(fname, method, comm,
+ *                                       lock_mode, timeout_sec)
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_2) {
+
+    /* "adios.pyx":533
+ * 
+ *         if (is_stream):
+ *             self.fp = adios_read_open(fname, method, comm,             # <<<<<<<<<<<<<<
+ *                                       lock_mode, timeout_sec)
+ *         else:
+ */
+    __pyx_t_4 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "adios.pyx":534
+ *         if (is_stream):
+ *             self.fp = adios_read_open(fname, method, comm,
+ *                                       lock_mode, timeout_sec)             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.fp = adios_read_open_file(fname, method, comm)
+ */
+    __pyx_v_self->fp = adios_read_open(__pyx_v_fname, __pyx_t_4, __pyx_v_comm, __pyx_v_lock_mode, __pyx_v_timeout_sec);
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "adios.pyx":536
+ *                                       lock_mode, timeout_sec)
+ *         else:
+ *             self.fp = adios_read_open_file(fname, method, comm)             # <<<<<<<<<<<<<<
  * 
+ *         assert self.fp != NULL, 'Not an open file'
  */
-  __pyx_v_self->fp = adios_read_open_file(__pyx_v_fname, __pyx_v_method, __pyx_v_comm);
+    __pyx_t_4 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_self->fp = adios_read_open_file(__pyx_v_fname, __pyx_t_4, __pyx_v_comm);
+  }
+  __pyx_L3:;
 
-  /* "adios.pyx":456
+  /* "adios.pyx":538
+ *             self.fp = adios_read_open_file(fname, method, comm)
  * 
- *         self.fp = adios_read_open_file(fname, method, comm)
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  * 
  *         self.name = fname.split('/')[-1]  ## basename
@@ -5652,168 +6798,176 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":458
+  /* "adios.pyx":540
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); 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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __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, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GIVEREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
-  __pyx_v_self->name = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios.pyx":459
+  /* "adios.pyx":541
  * 
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars             # <<<<<<<<<<<<<<
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  */
-  __pyx_t_3 = __pyx_v_self->fp->nvars;
-  __pyx_v_self->nvars = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->nvars;
+  __pyx_v_self->nvars = __pyx_t_5;
 
-  /* "adios.pyx":460
+  /* "adios.pyx":542
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs             # <<<<<<<<<<<<<<
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  */
-  __pyx_t_3 = __pyx_v_self->fp->nattrs;
-  __pyx_v_self->nattrs = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->nattrs;
+  __pyx_v_self->nattrs = __pyx_t_5;
 
-  /* "adios.pyx":461
+  /* "adios.pyx":543
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  */
-  __pyx_t_3 = __pyx_v_self->fp->current_step;
-  __pyx_v_self->current_step = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->current_step;
+  __pyx_v_self->current_step = __pyx_t_5;
 
-  /* "adios.pyx":462
+  /* "adios.pyx":544
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  */
-  __pyx_t_3 = __pyx_v_self->fp->last_step;
-  __pyx_v_self->last_step = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->last_step;
+  __pyx_v_self->last_step = __pyx_t_5;
 
-  /* "adios.pyx":463
+  /* "adios.pyx":545
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness             # <<<<<<<<<<<<<<
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size
  */
-  __pyx_t_3 = __pyx_v_self->fp->endianness;
-  __pyx_v_self->endianness = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->endianness;
+  __pyx_v_self->endianness = __pyx_t_5;
 
-  /* "adios.pyx":464
+  /* "adios.pyx":546
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version             # <<<<<<<<<<<<<<
  *         self.file_size = self.fp.file_size
  * 
  */
-  __pyx_t_3 = __pyx_v_self->fp->version;
-  __pyx_v_self->version = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->version;
+  __pyx_v_self->version = __pyx_t_5;
 
-  /* "adios.pyx":465
+  /* "adios.pyx":547
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size             # <<<<<<<<<<<<<<
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  */
-  __pyx_t_4 = __pyx_v_self->fp->file_size;
-  __pyx_v_self->file_size = __pyx_t_4;
+  __pyx_t_6 = __pyx_v_self->fp->file_size;
+  __pyx_v_self->file_size = __pyx_t_6;
 
-  /* "adios.pyx":467
+  /* "adios.pyx":549
  *         self.file_size = self.fp.file_size
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
  *             self.var[varname] = var(self, varname)
  * 
  */
-  __pyx_t_2 = PyList_New(0); 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_3 = __pyx_v_self->nvars;
-  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->var_namelist[__pyx_v_i])); 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 (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = __pyx_v_self->nvars;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_5; __pyx_t_7+=1) {
+    __pyx_v_i = __pyx_t_7;
+    __pyx_t_3 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __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 = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
-  __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
-    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
+    if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) 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 = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __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 = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
-    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_1);
+    __pyx_t_1 = 0;
 
-    /* "adios.pyx":468
+    /* "adios.pyx":550
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  *             self.var[varname] = var(self, varname)             # <<<<<<<<<<<<<<
  * 
  *     def __del__(self):
  */
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_2, 0, ((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_2, 1, __pyx_v_varname);
+    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
-    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_var)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_var)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_9);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(__pyx_v_self->var == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->var, __pyx_v_varname, __pyx_t_7) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    if (unlikely(PyDict_SetItem(__pyx_v_self->var, __pyx_v_varname, __pyx_t_9) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+    /* "adios.pyx":549
+ *         self.file_size = self.fp.file_size
+ * 
+ *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
+ *             self.var[varname] = var(self, varname)
+ * 
+ */
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":448
- *     cpdef public dict attr
+  /* "adios.pyx":520
  * 
+ *     """ Initialization. Call adios_read_open and populate public members """
  *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *                  char * method_name = "BP",
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
  */
 
   /* function exit code */
@@ -5821,17 +6975,18 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("adios.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_method);
   __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":470
+/* "adios.pyx":552
  *             self.var[varname] = var(self, varname)
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -5861,18 +7016,18 @@ static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":471
+  /* "adios.pyx":553
  * 
  *     def __del__(self):
  *             self.close()             # <<<<<<<<<<<<<<
  * 
- *     cpdef close(self):
+ *     """ Call adios_read_close """
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":470
+  /* "adios.pyx":552
  *             self.var[varname] = var(self, varname)
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -5893,9 +7048,9 @@ static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":473
- *             self.close()
+/* "adios.pyx":556
  * 
+ *     """ Call adios_read_close """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
@@ -5907,6 +7062,8 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -5915,12 +7072,29 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   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 = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 556; __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_4file_5close)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -5929,8 +7103,8 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":474
- * 
+  /* "adios.pyx":557
+ *     """ Call adios_read_close """
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  *         adios_read_close(self.fp)
@@ -5940,12 +7114,12 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":475
+  /* "adios.pyx":558
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
@@ -5954,18 +7128,18 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
  */
   adios_read_close(__pyx_v_self->fp);
 
-  /* "adios.pyx":476
+  /* "adios.pyx":559
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  * 
- *     cpdef printself(self):
+ *     """ Print self """
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios.pyx":473
- *             self.close()
+  /* "adios.pyx":556
  * 
+ *     """ Call adios_read_close """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
@@ -5977,6 +7151,8 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -6007,7 +7183,7 @@ static PyObject *__pyx_pf_5adios_4file_4close(struct __pyx_obj_5adios_file *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_5adios_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6024,9 +7200,9 @@ static PyObject *__pyx_pf_5adios_4file_4close(struct __pyx_obj_5adios_file *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":478
- *         self.fp = NULL
+/* "adios.pyx":562
  * 
+ *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
@@ -6038,6 +7214,8 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -6046,12 +7224,29 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   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 = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 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_4file_7printself)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); 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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6060,8 +7255,8 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":479
- * 
+  /* "adios.pyx":563
+ *     """ Print self """
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  *         print '=== AdiosFile ==='
@@ -6071,30 +7266,30 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":480
+  /* "adios.pyx":564
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  *         printfile(self.fp)
  */
-  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":481
+  /* "adios.pyx":565
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)             # <<<<<<<<<<<<<<
  *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __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 = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
@@ -6102,26 +7297,26 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":482
+  /* "adios.pyx":566
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
- * cdef class var:
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):
  */
-  __pyx_t_1 = __pyx_f_5adios_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_5adios_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":478
- *         self.fp = NULL
+  /* "adios.pyx":562
  * 
+ *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
@@ -6133,37 +7328,263 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("adios.file.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_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_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_4file_6printself(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_4file_6printself(struct __pyx_obj_5adios_file *__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 = __pyx_f_5adios_4file_printself(__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;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":568
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_4file_advance *__pyx_optional_args) {
+  int __pyx_v_last = ((int)0);
+  float __pyx_v_timeout_sec = ((float)0.0);
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  Py_ssize_t __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("advance", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_last = __pyx_optional_args->last;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_timeout_sec = __pyx_optional_args->timeout_sec;
+      }
+    }
+  }
+  /* 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_advance); 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);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_4file_9advance)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
+      __pyx_t_7 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+        if (likely(__pyx_t_6)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+          __Pyx_INCREF(__pyx_t_6);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
+          __pyx_t_7 = 1;
+        }
+      }
+      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      if (__pyx_t_6) {
+        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = NULL;
+      }
+      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_4);
+      __pyx_t_3 = 0;
+      __pyx_t_4 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __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":569
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):
+ *         return adios_advance_step(self.fp, last, timeout_sec)             # <<<<<<<<<<<<<<
+ * 
+ * """ Python class for ADIOS_VARINFO structure """
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_int(adios_advance_step(__pyx_v_self->fp, __pyx_v_last, __pyx_v_timeout_sec)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "adios.pyx":568
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("adios.file.advance", __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_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_4file_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_4file_6printself(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_last;
+  float __pyx_v_timeout_sec;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("advance (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_last,&__pyx_n_s_timeout_sec,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 (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_last);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_timeout_sec);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __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;
+      }
+    }
+    if (values[0]) {
+      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_last = ((int)0);
+    }
+    if (values[1]) {
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_timeout_sec = ((float)0.0);
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("advance", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_4file_8advance(((struct __pyx_obj_5adios_file *)__pyx_v_self), __pyx_v_last, __pyx_v_timeout_sec);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_4file_6printself(struct __pyx_obj_5adios_file *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_8advance(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_v_last, float __pyx_v_timeout_sec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_4file_advance __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_RefNannySetupContext("advance", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.last = __pyx_v_last;
+  __pyx_t_2.timeout_sec = __pyx_v_timeout_sec;
+  __pyx_t_1 = __pyx_vtabptr_5adios_file->advance(__pyx_v_self, 1, &__pyx_t_2); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6172,7 +7593,7 @@ static PyObject *__pyx_pf_5adios_4file_6printself(struct __pyx_obj_5adios_file *
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6180,7 +7601,7 @@ static PyObject *__pyx_pf_5adios_4file_6printself(struct __pyx_obj_5adios_file *
   return __pyx_r;
 }
 
-/* "adios.pyx":436
+/* "adios.pyx":505
  * 
  *     """ Public Memeber """
  *     cpdef public bytes name             # <<<<<<<<<<<<<<
@@ -6238,7 +7659,7 @@ static int __pyx_pf_5adios_4file_4name_2__set__(struct __pyx_obj_5adios_file *__
   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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -6288,7 +7709,7 @@ static int __pyx_pf_5adios_4file_4name_4__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":437
+/* "adios.pyx":506
  *     """ Public Memeber """
  *     cpdef public bytes name
  *     cpdef public int nvars             # <<<<<<<<<<<<<<
@@ -6318,7 +7739,7 @@ static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_fi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6356,7 +7777,7 @@ static int __pyx_pf_5adios_4file_5nvars_2__set__(struct __pyx_obj_5adios_file *_
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nvars = __pyx_t_1;
 
   /* function exit code */
@@ -6370,7 +7791,7 @@ static int __pyx_pf_5adios_4file_5nvars_2__set__(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":438
+/* "adios.pyx":507
  *     cpdef public bytes name
  *     cpdef public int nvars
  *     cpdef public int nattrs             # <<<<<<<<<<<<<<
@@ -6400,7 +7821,7 @@ static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_f
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6438,7 +7859,7 @@ static int __pyx_pf_5adios_4file_6nattrs_2__set__(struct __pyx_obj_5adios_file *
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nattrs = __pyx_t_1;
 
   /* function exit code */
@@ -6452,7 +7873,7 @@ static int __pyx_pf_5adios_4file_6nattrs_2__set__(struct __pyx_obj_5adios_file *
   return __pyx_r;
 }
 
-/* "adios.pyx":439
+/* "adios.pyx":508
  *     cpdef public int nvars
  *     cpdef public int nattrs
  *     cpdef public int current_step             # <<<<<<<<<<<<<<
@@ -6482,7 +7903,7 @@ static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6520,7 +7941,7 @@ static int __pyx_pf_5adios_4file_12current_step_2__set__(struct __pyx_obj_5adios
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->current_step = __pyx_t_1;
 
   /* function exit code */
@@ -6534,7 +7955,7 @@ static int __pyx_pf_5adios_4file_12current_step_2__set__(struct __pyx_obj_5adios
   return __pyx_r;
 }
 
-/* "adios.pyx":440
+/* "adios.pyx":509
  *     cpdef public int nattrs
  *     cpdef public int current_step
  *     cpdef public int last_step             # <<<<<<<<<<<<<<
@@ -6564,7 +7985,7 @@ static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adio
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6602,7 +8023,7 @@ static int __pyx_pf_5adios_4file_9last_step_2__set__(struct __pyx_obj_5adios_fil
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->last_step = __pyx_t_1;
 
   /* function exit code */
@@ -6616,7 +8037,7 @@ static int __pyx_pf_5adios_4file_9last_step_2__set__(struct __pyx_obj_5adios_fil
   return __pyx_r;
 }
 
-/* "adios.pyx":441
+/* "adios.pyx":510
  *     cpdef public int current_step
  *     cpdef public int last_step
  *     cpdef public int endianness             # <<<<<<<<<<<<<<
@@ -6646,7 +8067,7 @@ static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5ad
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6684,7 +8105,7 @@ static int __pyx_pf_5adios_4file_10endianness_2__set__(struct __pyx_obj_5adios_f
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->endianness = __pyx_t_1;
 
   /* function exit code */
@@ -6698,7 +8119,7 @@ static int __pyx_pf_5adios_4file_10endianness_2__set__(struct __pyx_obj_5adios_f
   return __pyx_r;
 }
 
-/* "adios.pyx":442
+/* "adios.pyx":511
  *     cpdef public int last_step
  *     cpdef public int endianness
  *     cpdef public int version             # <<<<<<<<<<<<<<
@@ -6728,7 +8149,7 @@ static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6766,7 +8187,7 @@ static int __pyx_pf_5adios_4file_7version_2__set__(struct __pyx_obj_5adios_file
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->version = __pyx_t_1;
 
   /* function exit code */
@@ -6780,7 +8201,7 @@ static int __pyx_pf_5adios_4file_7version_2__set__(struct __pyx_obj_5adios_file
   return __pyx_r;
 }
 
-/* "adios.pyx":443
+/* "adios.pyx":512
  *     cpdef public int endianness
  *     cpdef public int version
  *     cpdef public int file_size             # <<<<<<<<<<<<<<
@@ -6810,7 +8231,7 @@ static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adio
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6848,7 +8269,7 @@ static int __pyx_pf_5adios_4file_9file_size_2__set__(struct __pyx_obj_5adios_fil
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->file_size = __pyx_t_1;
 
   /* function exit code */
@@ -6862,7 +8283,7 @@ static int __pyx_pf_5adios_4file_9file_size_2__set__(struct __pyx_obj_5adios_fil
   return __pyx_r;
 }
 
-/* "adios.pyx":445
+/* "adios.pyx":514
  *     cpdef public int file_size
  * 
  *     cpdef public dict var             # <<<<<<<<<<<<<<
@@ -6920,7 +8341,7 @@ static int __pyx_pf_5adios_4file_3var_2__set__(struct __pyx_obj_5adios_file *__p
   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 %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -6970,12 +8391,12 @@ static int __pyx_pf_5adios_4file_3var_4__del__(struct __pyx_obj_5adios_file *__p
   return __pyx_r;
 }
 
-/* "adios.pyx":446
+/* "adios.pyx":515
  * 
  *     cpdef public dict var
  *     cpdef public dict attr             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, char * fname,
+ *     cpdef public bint is_stream
  */
 
 /* Python wrapper */
@@ -7028,7 +8449,7 @@ static int __pyx_pf_5adios_4file_4attr_2__set__(struct __pyx_obj_5adios_file *__
   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 %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -7078,9 +8499,91 @@ static int __pyx_pf_5adios_4file_4attr_4__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":497
- *     cpdef public int nsteps
+/* "adios.pyx":517
+ *     cpdef public dict attr
+ * 
+ *     cpdef public bint is_stream             # <<<<<<<<<<<<<<
+ * 
+ *     """ Initialization. Call adios_read_open and populate public members """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_4file_9is_stream_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_9is_stream_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_4file_9is_stream___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_4file_9is_stream___get__(struct __pyx_obj_5adios_file *__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 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.file.is_stream.__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_4file_9is_stream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_9is_stream_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_4file_9is_stream_2__set__(((struct __pyx_obj_5adios_file *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_4file_9is_stream_2__set__(struct __pyx_obj_5adios_file *__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_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->is_stream = __pyx_t_1;
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.file.is_stream.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":586
  * 
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
  *         self.file = file
  *         self.vp = NULL
@@ -7117,11 +8620,11 @@ static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__py
         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 = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __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 = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7130,17 +8633,17 @@ static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_file = ((struct __pyx_obj_5adios_file *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __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 = 586; __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 = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.__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_file, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_5adios_3var___init__(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -7165,8 +8668,8 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":498
- * 
+  /* "adios.pyx":587
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):
  *         self.file = file             # <<<<<<<<<<<<<<
  *         self.vp = NULL
@@ -7178,7 +8681,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":499
+  /* "adios.pyx":588
  *     def __init__(self, file file, char * name):
  *         self.file = file
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -7187,7 +8690,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":501
+  /* "adios.pyx":590
  *         self.vp = NULL
  * 
  *         assert self.file.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -7198,12 +8701,12 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->file->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":502
+  /* "adios.pyx":591
  * 
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, name)             # <<<<<<<<<<<<<<
@@ -7212,7 +8715,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_v_name);
 
-  /* "adios.pyx":503
+  /* "adios.pyx":592
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, name)
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -7223,19 +8726,19 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":505
+  /* "adios.pyx":594
  *         assert self.vp != NULL, 'Not a valid var'
  * 
  *         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 = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
@@ -7243,7 +8746,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":506
+  /* "adios.pyx":595
  * 
  *         self.name = name
  *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
@@ -7253,14 +8756,14 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_2 = __pyx_v_self->vp->varid;
   __pyx_v_self->varid = __pyx_t_2;
 
-  /* "adios.pyx":507
+  /* "adios.pyx":596
  *         self.name = name
  *         self.varid = self.vp.varid
  *         self.type = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->type);
@@ -7268,7 +8771,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_v_self->type = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":508
+  /* "adios.pyx":597
  *         self.varid = self.vp.varid
  *         self.type = adios2nptype(self.vp.type)
  *         self.ndim = self.vp.ndim             # <<<<<<<<<<<<<<
@@ -7278,24 +8781,24 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_2 = __pyx_v_self->vp->ndim;
   __pyx_v_self->ndim = __pyx_t_2;
 
-  /* "adios.pyx":509
+  /* "adios.pyx":598
  *         self.type = adios2nptype(self.vp.type)
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *         self.nsteps = self.vp.nsteps
  * 
  */
-  __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_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __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_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __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 = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_4);
@@ -7304,7 +8807,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":510
+  /* "adios.pyx":599
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -7314,9 +8817,9 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_2 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_2;
 
-  /* "adios.pyx":497
- *     cpdef public int nsteps
+  /* "adios.pyx":586
  * 
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
  *         self.file = file
  *         self.vp = NULL
@@ -7335,7 +8838,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   return __pyx_r;
 }
 
-/* "adios.pyx":512
+/* "adios.pyx":601
  *         self.nsteps = self.vp.nsteps
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -7365,18 +8868,18 @@ static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":513
+  /* "adios.pyx":602
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
- *     cpdef close(self):
+ *     """ Call adios_free_varinfo """
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":512
+  /* "adios.pyx":601
  *         self.nsteps = self.vp.nsteps
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -7397,9 +8900,9 @@ static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":515
- *         self.close()
+/* "adios.pyx":605
  * 
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
@@ -7411,6 +8914,8 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -7419,12 +8924,29 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   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 = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 605; __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_3var_5close)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -7433,8 +8955,8 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":516
- * 
+  /* "adios.pyx":606
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):
  *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
  *         adios_free_varinfo(self.vp)
@@ -7444,12 +8966,12 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_var);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":517
+  /* "adios.pyx":607
  *     cpdef close(self):
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
@@ -7458,18 +8980,18 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
  */
   adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios.pyx":518
+  /* "adios.pyx":608
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
  *         self.vp = NULL             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
+ *     """ Call adios_schedule_read and adios_perform_reads """
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":515
- *         self.close()
+  /* "adios.pyx":605
  * 
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
@@ -7481,6 +9003,8 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -7511,7 +9035,7 @@ static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_5adios_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7528,12 +9052,12 @@ static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":520
- *         self.vp = NULL
+/* "adios.pyx":611
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 
 static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
@@ -7555,12 +9079,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   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;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
   int __pyx_t_10;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -7584,133 +9108,163 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   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 = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 611; __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_3var_7read)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      __pyx_t_5 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+          __pyx_t_5 = 1;
+        }
+      }
+      __pyx_t_6 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      if (__pyx_t_4) {
+        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = NULL;
+      }
       __Pyx_INCREF(__pyx_v_offset);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_offset);
+      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
       __Pyx_GIVEREF(__pyx_v_offset);
       __Pyx_INCREF(__pyx_v_count);
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_count);
+      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
       __Pyx_GIVEREF(__pyx_v_count);
       __Pyx_INCREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_from_steps);
+      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_from_steps);
       __Pyx_GIVEREF(__pyx_v_from_steps);
       __Pyx_INCREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_nsteps);
+      PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_nsteps);
       __Pyx_GIVEREF(__pyx_v_nsteps);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __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":521
- * 
+  /* "adios.pyx":612
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
  *         assert self.type is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
- * 
+ *         if (self.nsteps > 0):
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = (__pyx_v_self->type != ((PyObject*)Py_None));
-    if (unlikely(!(__pyx_t_4 != 0))) {
+    __pyx_t_7 = (__pyx_v_self->type != ((PyObject*)Py_None));
+    if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":522
+  /* "adios.pyx":613
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'             # <<<<<<<<<<<<<<
+ *         if (self.nsteps > 0):             # <<<<<<<<<<<<<<
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ * 
+ */
+  __pyx_t_7 = ((__pyx_v_self->nsteps > 0) != 0);
+  if (__pyx_t_7) {
+
+    /* "adios.pyx":614
+ *         assert self.type is not None, 'Data type is not supported yet'
+ *         if (self.nsteps > 0):
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'             # <<<<<<<<<<<<<<
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_4)) {
-      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Step_index_is_out_of_range);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (unlikely(!__pyx_t_7)) {
+        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Step_index_is_out_of_range);
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
     }
+    #endif
+    goto __pyx_L3;
   }
-  #endif
+  __pyx_L3:;
 
-  /* "adios.pyx":524
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+  /* "adios.pyx":616
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
  * 
  *         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_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __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_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
+    __pyx_v_i = __pyx_t_9;
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_v_lshape = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_v_lshape = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios.pyx":525
+  /* "adios.pyx":617
  * 
  *         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_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __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 = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_lshape);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lshape);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lshape);
   __Pyx_GIVEREF(__pyx_v_lshape);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __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 = 525; __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_1, __pyx_n_s_dtype, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __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_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_8);
-  __pyx_t_8 = 0;
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-  /* "adios.pyx":528
+  /* "adios.pyx":620
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -7719,83 +9273,98 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   if (unlikely(__pyx_v_offset == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  if (__pyx_t_7) {
 
-    /* "adios.pyx":529
+    /* "adios.pyx":621
  *         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 = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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 = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_1);
-    __pyx_t_1 = 0;
+    __pyx_t_3 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_3)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_3);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
+      }
+    }
+    if (__pyx_t_3) {
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else {
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios.pyx":530
+    /* "adios.pyx":622
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    goto __pyx_L5;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "adios.pyx":532
+    /* "adios.pyx":624
  *             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 = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __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 = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __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 = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(__pyx_v_offset);
-    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_offset);
+    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_offset);
     __Pyx_GIVEREF(__pyx_v_offset);
-    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __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 = 532; __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_2, __pyx_n_s_dtype, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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 = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_6);
+    __pyx_t_6 = 0;
   }
-  __pyx_L5:;
+  __pyx_L6:;
 
-  /* "adios.pyx":535
+  /* "adios.pyx":627
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -7804,66 +9373,66 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   if (unlikely(__pyx_v_count == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  if (__pyx_t_7) {
 
-    /* "adios.pyx":536
+    /* "adios.pyx":628
  *         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 = 536; __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 = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
-    goto __pyx_L6;
+    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_6);
+    __pyx_t_6 = 0;
+    goto __pyx_L7;
   }
   /*else*/ {
 
-    /* "adios.pyx":538
+    /* "adios.pyx":630
  *             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 = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __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 = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_count);
-    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_count);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_count);
     __Pyx_GIVEREF(__pyx_v_count);
-    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_DECREF(__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 = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
-    __pyx_t_3 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_2);
+    __pyx_t_2 = 0;
   }
-  __pyx_L6:;
+  __pyx_L7:;
 
-  /* "adios.pyx":540
+  /* "adios.pyx":632
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'             # <<<<<<<<<<<<<<
@@ -7874,12 +9443,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npoffset->nd) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Offset_dimension_mismatch);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":541
+  /* "adios.pyx":633
  * 
  *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
  *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
@@ -7890,12 +9459,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npcount->nd) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Count_dimension_mismatch);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":542
+  /* "adios.pyx":634
  *         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.'             # <<<<<<<<<<<<<<
@@ -7904,97 +9473,112 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __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 = 542; __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_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __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 = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __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 = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (unlikely(!__pyx_t_4)) {
+    __pyx_t_1 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_v_npcount), Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_all); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
+      }
+    }
+    if (__pyx_t_6) {
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else {
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (unlikely(!__pyx_t_7)) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Count_is_larger_than_shape);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":544
+  /* "adios.pyx":636
  *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
  * 
  *         shape = list(npcount)             # <<<<<<<<<<<<<<
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
-  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_npcount));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_npcount));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_v_shape = ((PyObject*)__pyx_t_3);
-  __pyx_t_3 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_shape = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios.pyx":545
+  /* "adios.pyx":637
  * 
  *         shape = list(npcount)
  *         if (nsteps > 1):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)
  */
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (__pyx_t_4) {
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_7) {
 
-    /* "adios.pyx":546
+    /* "adios.pyx":638
  *         shape = list(npcount)
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)
  * 
  */
-    __pyx_t_10 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
+    __pyx_t_10 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L8;
   }
-  __pyx_L7:;
+  __pyx_L8:;
 
-  /* "adios.pyx":547
+  /* "adios.pyx":639
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __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 = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_shape);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->type)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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 = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_var = ((PyArrayObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->type)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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 = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_var = ((PyArrayObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios.pyx":550
+  /* "adios.pyx":642
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)             # <<<<<<<<<<<<<<
@@ -8003,18 +9587,18 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   __pyx_v_sel = adios_selection_boundingbox(__pyx_v_self->vp->ndim, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data));
 
-  /* "adios.pyx":552
+  /* "adios.pyx":644
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_6, ((void *)__pyx_v_var->data));
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_8, __pyx_t_9, ((void *)__pyx_v_var->data));
 
-  /* "adios.pyx":553
+  /* "adios.pyx":645
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -8023,7 +9607,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios.pyx":555
+  /* "adios.pyx":647
  *         adios_perform_reads(self.file.fp, 1)
  * 
  *         return var             # <<<<<<<<<<<<<<
@@ -8035,12 +9619,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios.pyx":520
- *         self.vp = NULL
+  /* "adios.pyx":611
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 
   /* function exit code */
@@ -8048,8 +9632,8 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __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_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("adios.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -8119,7 +9703,7 @@ static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__
         }
       }
       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 = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -8138,14 +9722,14 @@ static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.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 = 520; __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 = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __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 = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_5adios_3var_6read(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_offset, __pyx_v_count, __pyx_v_from_steps, __pyx_v_nsteps);
 
   /* function exit code */
@@ -8172,7 +9756,7 @@ static PyObject *__pyx_pf_5adios_3var_6read(struct __pyx_obj_5adios_var *__pyx_v
   __pyx_t_2.count = __pyx_v_count;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__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 = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_vtabptr_5adios_var->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8189,7 +9773,7 @@ static PyObject *__pyx_pf_5adios_3var_6read(struct __pyx_obj_5adios_var *__pyx_v
   return __pyx_r;
 }
 
-/* "adios.pyx":558
+/* "adios.pyx":650
  * 
  *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -8203,6 +9787,8 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -8211,12 +9797,29 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   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 = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 650; __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_3var_9printself)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -8225,7 +9828,7 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":559
+  /* "adios.pyx":651
  *     """ Print self """
  *     cpdef printself(self):
  *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
@@ -8236,30 +9839,30 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_variable);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios.pyx":560
+  /* "adios.pyx":652
  *     cpdef printself(self):
  *         assert self.vp != NULL, 'Not an open variable'
  *         print '=== AdiosVariable ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  */
-  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":561
+  /* "adios.pyx":653
  *         assert self.vp != NULL, 'Not an open variable'
  *         print '=== AdiosVariable ==='
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  *         printvar(self.vp)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __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 = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_vp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_vp);
@@ -8267,22 +9870,22 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":562
+  /* "adios.pyx":654
  *         print '=== AdiosVariable ==='
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)             # <<<<<<<<<<<<<<
  *         printvar(self.vp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __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 = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
@@ -8290,24 +9893,24 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":563
+  /* "adios.pyx":655
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  *         printvar(self.vp)             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  __pyx_t_1 = __pyx_f_5adios_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_5adios_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":558
+  /* "adios.pyx":650
  * 
  *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -8321,6 +9924,8 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -8351,7 +9956,7 @@ static PyObject *__pyx_pf_5adios_3var_8printself(struct __pyx_obj_5adios_var *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_5adios_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8368,7 +9973,7 @@ static PyObject *__pyx_pf_5adios_3var_8printself(struct __pyx_obj_5adios_var *__
   return __pyx_r;
 }
 
-/* "adios.pyx":490
+/* "adios.pyx":578
  * 
  *     """ Public Memeber """
  *     cpdef public bytes name             # <<<<<<<<<<<<<<
@@ -8426,7 +10031,7 @@ static int __pyx_pf_5adios_3var_4name_2__set__(struct __pyx_obj_5adios_var *__py
   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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -8476,7 +10081,7 @@ static int __pyx_pf_5adios_3var_4name_4__del__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":491
+/* "adios.pyx":579
  *     """ Public Memeber """
  *     cpdef public bytes name
  *     cpdef public int varid             # <<<<<<<<<<<<<<
@@ -8506,7 +10111,7 @@ static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8544,7 +10149,7 @@ static int __pyx_pf_5adios_3var_5varid_2__set__(struct __pyx_obj_5adios_var *__p
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->varid = __pyx_t_1;
 
   /* function exit code */
@@ -8558,7 +10163,7 @@ static int __pyx_pf_5adios_3var_5varid_2__set__(struct __pyx_obj_5adios_var *__p
   return __pyx_r;
 }
 
-/* "adios.pyx":492
+/* "adios.pyx":580
  *     cpdef public bytes name
  *     cpdef public int varid
  *     cpdef public type type             # <<<<<<<<<<<<<<
@@ -8616,7 +10221,7 @@ static int __pyx_pf_5adios_3var_4type_2__set__(struct __pyx_obj_5adios_var *__py
   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 %.16s, got %.200s", "type", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyType_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -8666,7 +10271,7 @@ static int __pyx_pf_5adios_3var_4type_4__del__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":493
+/* "adios.pyx":581
  *     cpdef public int varid
  *     cpdef public type type
  *     cpdef public int ndim             # <<<<<<<<<<<<<<
@@ -8696,7 +10301,7 @@ static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8734,7 +10339,7 @@ static int __pyx_pf_5adios_3var_4ndim_2__set__(struct __pyx_obj_5adios_var *__py
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->ndim = __pyx_t_1;
 
   /* function exit code */
@@ -8748,7 +10353,7 @@ static int __pyx_pf_5adios_3var_4ndim_2__set__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":494
+/* "adios.pyx":582
  *     cpdef public type type
  *     cpdef public int ndim
  *     cpdef public tuple dims             # <<<<<<<<<<<<<<
@@ -8806,7 +10411,7 @@ static int __pyx_pf_5adios_3var_4dims_2__set__(struct __pyx_obj_5adios_var *__py
   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 %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -8856,12 +10461,12 @@ static int __pyx_pf_5adios_3var_4dims_4__del__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":495
+/* "adios.pyx":583
  *     cpdef public int ndim
  *     cpdef public tuple dims
  *     cpdef public int nsteps             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, file file, char * name):
+ *     """ Initialization. Call adios_inq_var and populate public members """
  */
 
 /* Python wrapper */
@@ -8886,7 +10491,7 @@ static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_va
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8924,7 +10529,7 @@ static int __pyx_pf_5adios_3var_6nsteps_2__set__(struct __pyx_obj_5adios_var *__
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nsteps = __pyx_t_1;
 
   /* function exit code */
@@ -8938,18 +10543,18 @@ static int __pyx_pf_5adios_3var_6nsteps_2__set__(struct __pyx_obj_5adios_var *__
   return __pyx_r;
 }
 
-/* "adios.pyx":569
+/* "adios.pyx":661
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_37readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_5adios_37readvar = {__Pyx_NAMESTR("readvar"), (PyCFunction)__pyx_pw_5adios_37readvar, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_5adios_37readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_5adios_39readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_5adios_39readvar = {"readvar", (PyCFunction)__pyx_pw_5adios_39readvar, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_5adios_39readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fname = 0;
   PyObject *__pyx_v_varname = 0;
   int __pyx_lineno = 0;
@@ -8978,11 +10583,11 @@ static PyObject *__pyx_pw_5adios_37readvar(PyObject *__pyx_self, PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8995,77 +10600,84 @@ static PyObject *__pyx_pw_5adios_37readvar(PyObject *__pyx_self, PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_36readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
+  __pyx_r = __pyx_pf_5adios_38readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname) {
+static PyObject *__pyx_pf_5adios_38readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname) {
   struct __pyx_obj_5adios_file *__pyx_v_f = NULL;
   PyObject *__pyx_v_v = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_5;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios.pyx":570
+  /* "adios.pyx":662
  * 
  * def readvar(fname, varname):
- *     f = file(fname)             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI_COMM_SELF)             # <<<<<<<<<<<<<<
  *     if not f.var.has_key(varname):
  *         print "No valid variable"
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_file)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios.pyx":571
+  /* "adios.pyx":663
  * def readvar(fname, varname):
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):             # <<<<<<<<<<<<<<
  *         print "No valid variable"
  *         return
  */
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = PyDict_Contains(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((!(__pyx_t_3 != 0)) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_4 = PyDict_Contains(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0);
+  if (__pyx_t_5) {
 
-    /* "adios.pyx":572
- *     f = file(fname)
+    /* "adios.pyx":664
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):
  *         print "No valid variable"             # <<<<<<<<<<<<<<
  *         return
  * 
  */
-    if (__Pyx_PrintOne(0, __pyx_kp_s_No_valid_variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PrintOne(0, __pyx_kp_s_No_valid_variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "adios.pyx":573
+    /* "adios.pyx":665
  *     if not f.var.has_key(varname):
  *         print "No valid variable"
  *         return             # <<<<<<<<<<<<<<
@@ -9077,7 +10689,7 @@ static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, P
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":575
+  /* "adios.pyx":667
  *         return
  * 
  *     v = f.var[varname]             # <<<<<<<<<<<<<<
@@ -9086,14 +10698,14 @@ static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, P
  */
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_v = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_v = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "adios.pyx":576
+  /* "adios.pyx":668
  * 
  *     v = f.var[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
@@ -9101,28 +10713,28 @@ static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, P
  * def bpls(fname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":569
+  /* "adios.pyx":661
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):
  */
 
@@ -9130,7 +10742,7 @@ static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, P
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -9141,29 +10753,29 @@ static PyObject *__pyx_pf_5adios_36readvar(CYTHON_UNUSED PyObject *__pyx_self, P
   return __pyx_r;
 }
 
-/* "adios.pyx":578
+/* "adios.pyx":670
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_39bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/
-static PyMethodDef __pyx_mdef_5adios_39bpls = {__Pyx_NAMESTR("bpls"), (PyCFunction)__pyx_pw_5adios_39bpls, METH_O, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_5adios_39bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname) {
+static PyObject *__pyx_pw_5adios_41bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/
+static PyMethodDef __pyx_mdef_5adios_41bpls = {"bpls", (PyCFunction)__pyx_pw_5adios_41bpls, METH_O, 0};
+static PyObject *__pyx_pw_5adios_41bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("bpls (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_38bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
+  __pyx_r = __pyx_pf_5adios_40bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
+static PyObject *__pyx_pf_5adios_40bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
   struct __pyx_obj_5adios_file *__pyx_v_f = NULL;
   PyObject *__pyx_v_k = NULL;
   PyObject *__pyx_r = NULL;
@@ -9181,162 +10793,167 @@ static PyObject *__pyx_pf_5adios_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios.pyx":579
+  /* "adios.pyx":671
  * 
  * def bpls(fname):
- *     f = file(fname)             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI_COMM_SELF)             # <<<<<<<<<<<<<<
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_file)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios.pyx":580
+  /* "adios.pyx":672
  * def bpls(fname):
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,             # <<<<<<<<<<<<<<
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nvars, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nvars, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":581
- *     f = file(fname)
+  /* "adios.pyx":673
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,             # <<<<<<<<<<<<<<
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nattrs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nattrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":582
+  /* "adios.pyx":674
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_4 = 0;
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_f->var, 1, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_f->var, 1, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_3);
-  __pyx_t_3 = __pyx_t_7;
+  __Pyx_XDECREF(__pyx_t_1);
+  __pyx_t_1 = __pyx_t_7;
   __pyx_t_7 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_7, NULL, NULL, __pyx_t_6);
+    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_4, &__pyx_t_7, NULL, NULL, __pyx_t_6);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
     __pyx_t_7 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_vars, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_vars, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":583
+  /* "adios.pyx":675
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_5 = 0;
   if (unlikely(__pyx_v_f->attr == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_f->attr, 1, __pyx_n_s_iterkeys, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_f->attr, 1, __pyx_n_s_iterkeys, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_1);
-  __pyx_t_1 = __pyx_t_7;
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_7;
   __pyx_t_7 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_5, &__pyx_t_7, NULL, NULL, __pyx_t_6);
+    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_5, &__pyx_t_7, NULL, NULL, __pyx_t_6);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
     __pyx_t_7 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_attrs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":584
+  /* "adios.pyx":676
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),             # <<<<<<<<<<<<<<
  *             'file_size': f.file_size}
- * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_2 = 0;
   __pyx_t_1 = 0;
-  __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_time_steps, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_time_steps, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "adios.pyx":585
+  /* "adios.pyx":677
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
- * 
  */
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_file_size, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_file_size, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":578
+  /* "adios.pyx":670
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  */
 
@@ -9356,7 +10973,7 @@ static PyObject *__pyx_pf_5adios_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
  *         # experimental exception made for __getbuffer__ and __releasebuffer__
  *         # -- the details of this may change.
  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
@@ -9392,13 +11009,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
-  char *__pyx_t_9;
+  PyObject *__pyx_t_6 = NULL;
+  char *__pyx_t_7;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -9408,7 +11023,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_GIVEREF(__pyx_v_info->obj);
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":200
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":200
  *             # of flags
  * 
  *             if info == NULL: return             # <<<<<<<<<<<<<<
@@ -9421,7 +11036,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     goto __pyx_L0;
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
  * 
  *             cdef int copy_shape, i, ndim
  *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
@@ -9430,7 +11045,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_endian_detector = 1;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":204
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":204
  *             cdef int copy_shape, i, ndim
  *             cdef int endian_detector = 1
  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
@@ -9439,7 +11054,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":206
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":206
  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
  * 
  *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
@@ -9448,7 +11063,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
  *             ndim = PyArray_NDIM(self)
  * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
@@ -9458,7 +11073,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
  * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  *                 copy_shape = 1             # <<<<<<<<<<<<<<
@@ -9470,7 +11085,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":211
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":211
  *                 copy_shape = 1
  *             else:
  *                 copy_shape = 0             # <<<<<<<<<<<<<<
@@ -9481,83 +11096,87 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   __pyx_L4:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":213
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L6_bool_binop_done;
+  }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":214
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L6_bool_binop_done:;
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":215
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __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 = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":217
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L9_bool_binop_done;
+  }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":218
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L9_bool_binop_done:;
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":219
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __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 = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":221
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":221
  *                 raise ValueError(u"ndarray is not Fortran contiguous")
  * 
  *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
@@ -9566,7 +11185,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
  * 
  *             info.buf = PyArray_DATA(self)
  *             info.ndim = ndim             # <<<<<<<<<<<<<<
@@ -9575,17 +11194,17 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->ndim = __pyx_v_ndim;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":223
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_1 = (__pyx_v_copy_shape != 0);
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":226
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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)             # <<<<<<<<<<<<<<
@@ -9594,7 +11213,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":227
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -9603,18 +11222,18 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":228
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_4 = __pyx_v_ndim;
+    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+      __pyx_v_i = __pyx_t_5;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":229
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":229
  *                 info.shape = info.strides + ndim
  *                 for i in range(ndim):
  *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
@@ -9623,7 +11242,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
       (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":230
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":230
  *                 for i in range(ndim):
  *                     info.strides[i] = PyArray_STRIDES(self)[i]
  *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
@@ -9632,11 +11251,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
       (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
     }
-    goto __pyx_L7;
+    goto __pyx_L11;
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":232
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":232
  *                     info.shape[i] = PyArray_DIMS(self)[i]
  *             else:
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
@@ -9645,7 +11264,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":233
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":233
  *             else:
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
@@ -9654,9 +11273,9 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
   }
-  __pyx_L7:;
+  __pyx_L11:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":234
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":234
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
@@ -9665,7 +11284,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->suboffsets = NULL;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":235
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":235
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
@@ -9674,7 +11293,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":236
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":236
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)
  *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
@@ -9683,7 +11302,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":239
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":239
  * 
  *             cdef int t
  *             cdef char* f = NULL             # <<<<<<<<<<<<<<
@@ -9692,19 +11311,19 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_f = NULL;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":240
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+  __pyx_t_3 = ((PyObject *)__pyx_v_self->descr);
+  __Pyx_INCREF(__pyx_t_3);
+  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
  *             cdef int offset
  * 
  *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
@@ -9713,7 +11332,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":246
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":246
  *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
  * 
  *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
@@ -9722,14 +11341,16 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __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;
+    goto __pyx_L15_bool_binop_done;
   }
+  __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L15_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":248
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":248
  *             if not hasfields and not copy_shape:
  *                 # do not call releasebuffer
  *                 info.obj = None             # <<<<<<<<<<<<<<
@@ -9741,11 +11362,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_GOTREF(__pyx_v_info->obj);
     __Pyx_DECREF(__pyx_v_info->obj);
     __pyx_v_info->obj = Py_None;
-    goto __pyx_L10;
+    goto __pyx_L14;
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":251
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":251
  *             else:
  *                 # need to call releasebuffer
  *                 info.obj = self             # <<<<<<<<<<<<<<
@@ -9758,9 +11379,9 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_DECREF(__pyx_v_info->obj);
     __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
   }
-  __pyx_L10:;
+  __pyx_L14:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":253
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":253
  *                 info.obj = self
  * 
  *             if not hasfields:             # <<<<<<<<<<<<<<
@@ -9770,66 +11391,69 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":254
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_4 = __pyx_v_descr->type_num;
+    __pyx_v_t = __pyx_t_4;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":255
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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);
+    __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0);
+    if (!__pyx_t_2) {
+      goto __pyx_L20_next_or;
     } else {
-      __pyx_t_2 = __pyx_t_1;
     }
+    __pyx_t_2 = (__pyx_v_little_endian != 0);
     if (!__pyx_t_2) {
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L19_bool_binop_done;
+    }
+    __pyx_L20_next_or:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":256
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0);
+    if (__pyx_t_2) {
     } else {
       __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L19_bool_binop_done;
     }
+    __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0);
+    __pyx_t_1 = __pyx_t_2;
+    __pyx_L19_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":257
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __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 = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
  *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
@@ -9838,7 +11462,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     switch (__pyx_v_t) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":258
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":258
  *                     (descr.byteorder == c'<' and not little_endian)):
  *                     raise ValueError(u"Non-native byte order not supported")
  *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
@@ -9849,7 +11473,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_b;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
  *                     raise ValueError(u"Non-native byte order not supported")
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
@@ -9860,7 +11484,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_B;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":260
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":260
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
@@ -9871,7 +11495,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_h;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":261
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":261
  *                 elif t == NPY_UBYTE:       f = "B"
  *                 elif t == NPY_SHORT:       f = "h"
  *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
@@ -9882,7 +11506,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_H;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":262
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":262
  *                 elif t == NPY_SHORT:       f = "h"
  *                 elif t == NPY_USHORT:      f = "H"
  *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
@@ -9893,7 +11517,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_i;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":263
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":263
  *                 elif t == NPY_USHORT:      f = "H"
  *                 elif t == NPY_INT:         f = "i"
  *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
@@ -9904,7 +11528,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_I;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":264
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":264
  *                 elif t == NPY_INT:         f = "i"
  *                 elif t == NPY_UINT:        f = "I"
  *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
@@ -9915,7 +11539,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_l;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":265
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":265
  *                 elif t == NPY_UINT:        f = "I"
  *                 elif t == NPY_LONG:        f = "l"
  *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
@@ -9926,7 +11550,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_L;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":266
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":266
  *                 elif t == NPY_LONG:        f = "l"
  *                 elif t == NPY_ULONG:       f = "L"
  *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
@@ -9937,7 +11561,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_q;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":267
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":267
  *                 elif t == NPY_ULONG:       f = "L"
  *                 elif t == NPY_LONGLONG:    f = "q"
  *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
@@ -9948,7 +11572,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Q;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":268
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":268
  *                 elif t == NPY_LONGLONG:    f = "q"
  *                 elif t == NPY_ULONGLONG:   f = "Q"
  *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
@@ -9959,7 +11583,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_f;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":269
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":269
  *                 elif t == NPY_ULONGLONG:   f = "Q"
  *                 elif t == NPY_FLOAT:       f = "f"
  *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
@@ -9970,7 +11594,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_d;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":270
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":270
  *                 elif t == NPY_FLOAT:       f = "f"
  *                 elif t == NPY_DOUBLE:      f = "d"
  *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
@@ -9981,7 +11605,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_g;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":271
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":271
  *                 elif t == NPY_DOUBLE:      f = "d"
  *                 elif t == NPY_LONGDOUBLE:  f = "g"
  *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
@@ -9992,7 +11616,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zf;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":272
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":272
  *                 elif t == NPY_LONGDOUBLE:  f = "g"
  *                 elif t == NPY_CFLOAT:      f = "Zf"
  *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
@@ -10003,7 +11627,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zd;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":273
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":273
  *                 elif t == NPY_CFLOAT:      f = "Zf"
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
@@ -10014,7 +11638,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zg;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
  *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
@@ -10026,33 +11650,33 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       break;
       default:
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":276
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyInt_From_int(__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 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __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(__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, __pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_8);
-      __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __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(__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_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_6);
+      __pyx_t_6 = 0;
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       break;
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":277
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":277
  *                 else:
  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *                 info.format = f             # <<<<<<<<<<<<<<
@@ -10061,7 +11685,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->format = __pyx_v_f;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":278
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":278
  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *                 info.format = f
  *                 return             # <<<<<<<<<<<<<<
@@ -10073,7 +11697,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":280
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":280
  *                 return
  *             else:
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
@@ -10082,7 +11706,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->format = ((char *)malloc(255));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":281
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":281
  *             else:
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
  *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
@@ -10091,7 +11715,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     (__pyx_v_info->format[0]) = '^';
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":282
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":282
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
  *                 info.format[0] = c'^' # Native data types, manual alignment
  *                 offset = 0             # <<<<<<<<<<<<<<
@@ -10100,17 +11724,17 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_offset = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":283
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":283
  *                 info.format[0] = c'^' # Native data types, manual alignment
  *                 offset = 0
  *                 f = _util_dtypestring(descr, info.format + 1,             # <<<<<<<<<<<<<<
  *                                       info.format + _buffer_format_string_len,
  *                                       &offset)
  */
-    __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;
+    __pyx_t_7 = __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_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_f = __pyx_t_7;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":286
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":286
  *                                       info.format + _buffer_format_string_len,
  *                                       &offset)
  *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
@@ -10120,7 +11744,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     (__pyx_v_f[0]) = '\x00';
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
  *         # experimental exception made for __getbuffer__ and __releasebuffer__
  *         # -- the details of this may change.
  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
@@ -10132,8 +11756,8 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
@@ -10152,7 +11776,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
  *                 f[0] = c'\0' # Terminate format string
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
@@ -10176,7 +11800,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":289
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":289
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):
  *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
@@ -10186,7 +11810,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":290
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":290
  *         def __releasebuffer__(ndarray self, Py_buffer* info):
  *             if PyArray_HASFIELDS(self):
  *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
@@ -10198,7 +11822,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   }
   __pyx_L3:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":291
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":291
  *             if PyArray_HASFIELDS(self):
  *                 stdlib.free(info.format)
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
@@ -10208,7 +11832,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":292
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":292
  *                 stdlib.free(info.format)
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
@@ -10220,7 +11844,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   }
   __pyx_L4:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
  *                 f[0] = c'\0' # Terminate format string
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
@@ -10232,7 +11856,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
  * ctypedef npy_cdouble     complex_t
  * 
  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
@@ -10249,7 +11873,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":769
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":769
  * 
  * cdef inline object PyArray_MultiIterNew1(a):
  *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
@@ -10263,7 +11887,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
  * ctypedef npy_cdouble     complex_t
  * 
  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
@@ -10282,7 +11906,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
  *     return PyArray_MultiIterNew(1, <void*>a)
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
@@ -10299,7 +11923,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":772
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":772
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
@@ -10313,7 +11937,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
  *     return PyArray_MultiIterNew(1, <void*>a)
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
@@ -10332,7 +11956,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
@@ -10349,7 +11973,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":775
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":775
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
@@ -10363,7 +11987,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
@@ -10382,7 +12006,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
@@ -10399,7 +12023,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":778
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":778
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
@@ -10413,7 +12037,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
@@ -10432,7 +12056,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
  * 
  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
@@ -10449,7 +12073,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":781
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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)             # <<<<<<<<<<<<<<
@@ -10463,7 +12087,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
  * 
  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
@@ -10482,7 +12106,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":783
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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:             # <<<<<<<<<<<<<<
@@ -10507,16 +12131,14 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   int __pyx_t_5;
   int __pyx_t_6;
   int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
-  long __pyx_t_10;
-  char *__pyx_t_11;
+  long __pyx_t_8;
+  char *__pyx_t_9;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_util_dtypestring", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":790
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":790
  *     cdef int delta_offset
  *     cdef tuple i
  *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
@@ -10525,7 +12147,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
   __pyx_v_endian_detector = 1;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":791
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":791
  *     cdef tuple i
  *     cdef int endian_detector = 1
  *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
@@ -10534,7 +12156,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
  *     cdef tuple fields
  * 
  *     for childname in descr.names:             # <<<<<<<<<<<<<<
@@ -10556,7 +12178,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":795
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":795
  * 
  *     for childname in descr.names:
  *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
@@ -10569,7 +12191,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":796
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":796
  *     for childname in descr.names:
  *         fields = descr.fields[childname]
  *         child, new_offset = fields             # <<<<<<<<<<<<<<
@@ -10608,7 +12230,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":798
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":798
  *         child, new_offset = fields
  * 
  *         if (end - f) - <int>(new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
@@ -10625,70 +12247,73 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0);
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
  *         if (end - f) - <int>(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_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __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 = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":801
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_6 = ((__pyx_v_child->byteorder == '>') != 0);
-    if (__pyx_t_6) {
-      __pyx_t_7 = (__pyx_v_little_endian != 0);
+    __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0);
+    if (!__pyx_t_7) {
+      goto __pyx_L8_next_or;
     } else {
-      __pyx_t_7 = __pyx_t_6;
     }
+    __pyx_t_7 = (__pyx_v_little_endian != 0);
     if (!__pyx_t_7) {
+    } else {
+      __pyx_t_6 = __pyx_t_7;
+      goto __pyx_L7_bool_binop_done;
+    }
+    __pyx_L8_next_or:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":802
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_6 = ((__pyx_v_child->byteorder == '<') != 0);
-      if (__pyx_t_6) {
-        __pyx_t_8 = ((!(__pyx_v_little_endian != 0)) != 0);
-        __pyx_t_9 = __pyx_t_8;
-      } else {
-        __pyx_t_9 = __pyx_t_6;
-      }
-      __pyx_t_6 = __pyx_t_9;
+    __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
+    if (__pyx_t_7) {
     } else {
       __pyx_t_6 = __pyx_t_7;
+      goto __pyx_L7_bool_binop_done;
     }
+    __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0);
+    __pyx_t_6 = __pyx_t_7;
+    __pyx_L7_bool_binop_done:;
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __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 = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":813
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":813
  * 
  *         # Output padding bytes
  *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
@@ -10704,7 +12329,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (!__pyx_t_6) break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":814
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":814
  *         # Output padding bytes
  *         while offset[0] < new_offset:
  *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
@@ -10713,7 +12338,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
       (__pyx_v_f[0]) = 120;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":815
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":815
  *         while offset[0] < new_offset:
  *             f[0] = 120 # "x"; pad byte
  *             f += 1             # <<<<<<<<<<<<<<
@@ -10722,28 +12347,28 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
       __pyx_v_f = (__pyx_v_f + 1);
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":816
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":816
  *             f[0] = 120 # "x"; pad byte
  *             f += 1
  *             offset[0] += 1             # <<<<<<<<<<<<<<
  * 
  *         offset[0] += child.itemsize
  */
-      __pyx_t_10 = 0;
-      (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1);
+      __pyx_t_8 = 0;
+      (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1);
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
  *             offset[0] += 1
  * 
  *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
  * 
  *         if not PyDataType_HASFIELDS(child):
  */
-    __pyx_t_10 = 0;
-    (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize);
+    __pyx_t_8 = 0;
+    (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
  *         offset[0] += child.itemsize
  * 
  *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
@@ -10753,7 +12378,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
  * 
  *         if not PyDataType_HASFIELDS(child):
  *             t = child.type_num             # <<<<<<<<<<<<<<
@@ -10765,7 +12390,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":822
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":822
  *         if not PyDataType_HASFIELDS(child):
  *             t = child.type_num
  *             if end - f < 5:             # <<<<<<<<<<<<<<
@@ -10775,21 +12400,21 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
       if (__pyx_t_6) {
 
-        /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
+        /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __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 = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":826
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":826
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
@@ -10804,10 +12429,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 98;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":827
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10822,10 +12447,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 66;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":828
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10840,10 +12465,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 104;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":829
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10858,10 +12483,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 72;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":830
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10876,10 +12501,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 105;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":831
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10894,10 +12519,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 73;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":832
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10912,10 +12537,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 108;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":833
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10930,10 +12555,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 76;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":834
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10948,10 +12573,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 113;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":835
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10966,10 +12591,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 81;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":836
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -10984,10 +12609,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 102;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":837
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11002,10 +12627,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 100;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":838
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11020,10 +12645,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 103;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":839
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11040,10 +12665,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 102;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":840
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11060,10 +12685,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 100;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":841
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11080,10 +12705,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 103;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":842
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11098,11 +12723,11 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 79;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
       /*else*/ {
 
-        /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":844
+        /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":844
  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
  *             else:
  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
@@ -11123,9 +12748,9 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_L11:;
+      __pyx_L15:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":845
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":845
  *             else:
  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *             f += 1             # <<<<<<<<<<<<<<
@@ -11133,25 +12758,33 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # Cython ignores struct boundary information ("T{...}"),
  */
       __pyx_v_f = (__pyx_v_f + 1);
-      goto __pyx_L9;
+      goto __pyx_L13;
     }
     /*else*/ {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":849
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":849
  *             # Cython ignores struct boundary information ("T{...}"),
  *             # so don't output it
  *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
  *     return f
  * 
  */
-      __pyx_t_11 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_v_f = __pyx_t_11;
+      __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_f = __pyx_t_9;
     }
-    __pyx_L9:;
+    __pyx_L13:;
+
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
+ *     cdef tuple fields
+ * 
+ *     for childname in descr.names:             # <<<<<<<<<<<<<<
+ *         fields = descr.fields[childname]
+ *         child, new_offset = fields
+ */
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":850
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":850
  *             # so don't output it
  *             f = _util_dtypestring(child, f, end, offset)
  *     return f             # <<<<<<<<<<<<<<
@@ -11161,7 +12794,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   __pyx_r = __pyx_v_f;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":783
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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:             # <<<<<<<<<<<<<<
@@ -11186,7 +12819,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
  * 
  * 
  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
@@ -11201,7 +12834,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("set_array_base", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":968
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":968
  * cdef inline void set_array_base(ndarray arr, object base):
  *      cdef PyObject* baseptr
  *      if base is None:             # <<<<<<<<<<<<<<
@@ -11212,7 +12845,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":969
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":969
  *      cdef PyObject* baseptr
  *      if base is None:
  *          baseptr = NULL             # <<<<<<<<<<<<<<
@@ -11224,7 +12857,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":971
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":971
  *          baseptr = NULL
  *      else:
  *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
@@ -11233,7 +12866,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
     Py_INCREF(__pyx_v_base);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":972
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":972
  *      else:
  *          Py_INCREF(base) # important to do this before decref below!
  *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
@@ -11244,7 +12877,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   }
   __pyx_L3:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":973
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":973
  *          Py_INCREF(base) # important to do this before decref below!
  *          baseptr = <PyObject*>base
  *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
@@ -11253,7 +12886,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
   Py_XDECREF(__pyx_v_arr->base);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":974
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":974
  *          baseptr = <PyObject*>base
  *      Py_XDECREF(arr.base)
  *      arr.base = baseptr             # <<<<<<<<<<<<<<
@@ -11262,7 +12895,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
   __pyx_v_arr->base = __pyx_v_baseptr;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
  * 
  * 
  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
@@ -11274,7 +12907,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
@@ -11288,7 +12921,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("get_array_base", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":977
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":977
  * 
  * cdef inline object get_array_base(ndarray arr):
  *     if arr.base is NULL:             # <<<<<<<<<<<<<<
@@ -11298,7 +12931,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":978
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":978
  * cdef inline object get_array_base(ndarray arr):
  *     if arr.base is NULL:
  *         return None             # <<<<<<<<<<<<<<
@@ -11312,7 +12945,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":980
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":980
  *         return None
  *     else:
  *         return <object>arr.base             # <<<<<<<<<<<<<<
@@ -11323,7 +12956,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
     goto __pyx_L0;
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
@@ -11531,10 +13164,25 @@ static int __pyx_setprop_5adios_4file_attr(PyObject *o, PyObject *v, CYTHON_UNUS
   }
 }
 
+static PyObject *__pyx_getprop_5adios_4file_is_stream(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_9is_stream_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_4file_is_stream(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_9is_stream_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
 static PyMethodDef __pyx_methods_5adios_file[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_4file_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_4file_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_4file_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {"__del__", (PyCFunction)__pyx_pw_5adios_4file_3__del__, METH_NOARGS, 0},
+  {"close", (PyCFunction)__pyx_pw_5adios_4file_5close, METH_NOARGS, 0},
+  {"printself", (PyCFunction)__pyx_pw_5adios_4file_7printself, METH_NOARGS, 0},
+  {"advance", (PyCFunction)__pyx_pw_5adios_4file_9advance, METH_VARARGS|METH_KEYWORDS, 0},
   {0, 0, 0, 0}
 };
 
@@ -11549,12 +13197,13 @@ static struct PyGetSetDef __pyx_getsets_5adios_file[] = {
   {(char *)"file_size", __pyx_getprop_5adios_4file_file_size, __pyx_setprop_5adios_4file_file_size, 0, 0},
   {(char *)"var", __pyx_getprop_5adios_4file_var, __pyx_setprop_5adios_4file_var, 0, 0},
   {(char *)"attr", __pyx_getprop_5adios_4file_attr, __pyx_setprop_5adios_4file_attr, 0, 0},
+  {(char *)"is_stream", __pyx_getprop_5adios_4file_is_stream, __pyx_setprop_5adios_4file_is_stream, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
 static PyTypeObject __pyx_type_5adios_file = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.file"), /*tp_name*/
+  "adios.file", /*tp_name*/
   sizeof(struct __pyx_obj_5adios_file), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_5adios_file, /*tp_dealloc*/
@@ -11577,7 +13226,7 @@ static PyTypeObject __pyx_type_5adios_file = {
   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*/
+  " Private Memeber ", /*tp_doc*/
   __pyx_tp_traverse_5adios_file, /*tp_traverse*/
   __pyx_tp_clear_5adios_file, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -11603,9 +13252,7 @@ static PyTypeObject __pyx_type_5adios_file = {
   0, /*tp_subclasses*/
   0, /*tp_weaklist*/
   0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
   0, /*tp_version_tag*/
-  #endif
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
@@ -11757,10 +13404,10 @@ static int __pyx_setprop_5adios_3var_nsteps(PyObject *o, PyObject *v, CYTHON_UNU
 }
 
 static PyMethodDef __pyx_methods_5adios_var[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_3var_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_3var_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_3var_7read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_3var_9printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {"__del__", (PyCFunction)__pyx_pw_5adios_3var_3__del__, METH_NOARGS, 0},
+  {"close", (PyCFunction)__pyx_pw_5adios_3var_5close, METH_NOARGS, 0},
+  {"read", (PyCFunction)__pyx_pw_5adios_3var_7read, METH_VARARGS|METH_KEYWORDS, 0},
+  {"printself", (PyCFunction)__pyx_pw_5adios_3var_9printself, METH_NOARGS, 0},
   {0, 0, 0, 0}
 };
 
@@ -11776,7 +13423,7 @@ static struct PyGetSetDef __pyx_getsets_5adios_var[] = {
 
 static PyTypeObject __pyx_type_5adios_var = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.var"), /*tp_name*/
+  "adios.var", /*tp_name*/
   sizeof(struct __pyx_obj_5adios_var), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_5adios_var, /*tp_dealloc*/
@@ -11799,7 +13446,7 @@ static PyTypeObject __pyx_type_5adios_var = {
   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*/
+  " Private Memeber ", /*tp_doc*/
   __pyx_tp_traverse_5adios_var, /*tp_traverse*/
   __pyx_tp_clear_5adios_var, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -11825,33 +13472,32 @@ static PyTypeObject __pyx_type_5adios_var = {
   0, /*tp_subclasses*/
   0, /*tp_weaklist*/
   0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
   0, /*tp_version_tag*/
-  #endif
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #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("read_init"), (PyCFunction)__pyx_pw_5adios_33read_init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_finalize"), (PyCFunction)__pyx_pw_5adios_35read_finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {"init", (PyCFunction)__pyx_pw_5adios_1init, METH_VARARGS|METH_KEYWORDS, 0},
+  {"open", (PyCFunction)__pyx_pw_5adios_3open, METH_VARARGS|METH_KEYWORDS, 0},
+  {"set_group_size", (PyCFunction)__pyx_pw_5adios_5set_group_size, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write", (PyCFunction)__pyx_pw_5adios_7write, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_int", (PyCFunction)__pyx_pw_5adios_9write_int, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_long", (PyCFunction)__pyx_pw_5adios_11write_long, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_float", (PyCFunction)__pyx_pw_5adios_13write_float, METH_VARARGS|METH_KEYWORDS, 0},
+  {"read", (PyCFunction)__pyx_pw_5adios_15read, METH_VARARGS|METH_KEYWORDS, 0},
+  {"close", (PyCFunction)__pyx_pw_5adios_17close, METH_O, 0},
+  {"finalize", (PyCFunction)__pyx_pw_5adios_19finalize, METH_VARARGS|METH_KEYWORDS, 0},
+  {"init_noxml", (PyCFunction)__pyx_pw_5adios_21init_noxml, METH_VARARGS|METH_KEYWORDS, 0},
+  {"allocate_buffer", (PyCFunction)__pyx_pw_5adios_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, 0},
+  {"declare_group", (PyCFunction)__pyx_pw_5adios_25declare_group, METH_VARARGS|METH_KEYWORDS, 0},
+  {"define_var", (PyCFunction)__pyx_pw_5adios_27define_var, METH_VARARGS|METH_KEYWORDS, 0},
+  {"define_attribute", (PyCFunction)__pyx_pw_5adios_29define_attribute, METH_VARARGS|METH_KEYWORDS, 0},
+  {"select_method", (PyCFunction)__pyx_pw_5adios_31select_method, METH_VARARGS|METH_KEYWORDS, 0},
+  {"np2adiostype", (PyCFunction)__pyx_pw_5adios_33np2adiostype, METH_O, __pyx_doc_5adios_32np2adiostype},
+  {"read_init", (PyCFunction)__pyx_pw_5adios_35read_init, METH_VARARGS|METH_KEYWORDS, 0},
+  {"read_finalize", (PyCFunction)__pyx_pw_5adios_37read_finalize, METH_VARARGS|METH_KEYWORDS, 0},
   {0, 0, 0, 0}
 };
 
@@ -11862,8 +13508,8 @@ static struct PyModuleDef __pyx_moduledef = {
   #else
     PyModuleDef_HEAD_INIT,
   #endif
-    __Pyx_NAMESTR("adios"),
-    __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), /* m_doc */
+    "adios",
+    __pyx_k_ADIOS_is_freely_available_under, /* m_doc */
     -1, /* m_size */
     __pyx_methods /* m_methods */,
     NULL, /* m_reload */
@@ -11879,14 +13525,20 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_15s_s, __pyx_k_15s_s, sizeof(__pyx_k_15s_s), 0, 0, 1, 0},
   {&__pyx_kp_s_AdiosFile, __pyx_k_AdiosFile, sizeof(__pyx_k_AdiosFile), 0, 0, 1, 0},
   {&__pyx_kp_s_AdiosVariable, __pyx_k_AdiosVariable, sizeof(__pyx_k_AdiosVariable), 0, 0, 1, 0},
+  {&__pyx_n_s_BP, __pyx_k_BP, sizeof(__pyx_k_BP), 0, 0, 1, 1},
+  {&__pyx_n_s_BP_AGGREGATE, __pyx_k_BP_AGGREGATE, sizeof(__pyx_k_BP_AGGREGATE), 0, 0, 1, 1},
   {&__pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_k_BUFFER_ALLOC_WHEN, sizeof(__pyx_k_BUFFER_ALLOC_WHEN), 0, 0, 1, 1},
   {&__pyx_kp_s_Count_dimension_mismatch, __pyx_k_Count_dimension_mismatch, sizeof(__pyx_k_Count_dimension_mismatch), 0, 0, 1, 0},
   {&__pyx_kp_s_Count_is_larger_than_shape, __pyx_k_Count_is_larger_than_shape, sizeof(__pyx_k_Count_is_larger_than_shape), 0, 0, 1, 0},
+  {&__pyx_n_s_DATASPACES, __pyx_k_DATASPACES, sizeof(__pyx_k_DATASPACES), 0, 0, 1, 1},
   {&__pyx_n_s_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 0, 0, 1, 1},
+  {&__pyx_n_s_DIMES, __pyx_k_DIMES, sizeof(__pyx_k_DIMES), 0, 0, 1, 1},
   {&__pyx_kp_s_Data_type_is_not_supported_yet, __pyx_k_Data_type_is_not_supported_yet, sizeof(__pyx_k_Data_type_is_not_supported_yet), 0, 0, 1, 0},
   {&__pyx_n_s_FLAG, __pyx_k_FLAG, sizeof(__pyx_k_FLAG), 0, 0, 1, 1},
+  {&__pyx_n_s_FLEXPATH, __pyx_k_FLEXPATH, sizeof(__pyx_k_FLEXPATH), 0, 0, 1, 1},
   {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0},
   {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0},
+  {&__pyx_n_s_ICEE, __pyx_k_ICEE, sizeof(__pyx_k_ICEE), 0, 0, 1, 1},
   {&__pyx_n_s_LATER, __pyx_k_LATER, sizeof(__pyx_k_LATER), 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},
@@ -11902,16 +13554,20 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
   {&__pyx_kp_s_Step_index_is_out_of_range, __pyx_k_Step_index_is_out_of_range, sizeof(__pyx_k_Step_index_is_out_of_range), 0, 0, 1, 0},
   {&__pyx_n_s_UNKNOWN, __pyx_k_UNKNOWN, sizeof(__pyx_k_UNKNOWN), 0, 0, 1, 1},
+  {&__pyx_kp_s_Use_default_BP_method, __pyx_k_Use_default_BP_method, sizeof(__pyx_k_Use_default_BP_method), 0, 0, 1, 0},
   {&__pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_k_Users_jyc_project_adios_devel_w, sizeof(__pyx_k_Users_jyc_project_adios_devel_w), 0, 0, 1, 0},
   {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+  {&__pyx_kp_s_WARN_Invalid_read_method_name, __pyx_k_WARN_Invalid_read_method_name, sizeof(__pyx_k_WARN_Invalid_read_method_name), 0, 0, 1, 0},
   {&__pyx_n_s_YES, __pyx_k_YES, sizeof(__pyx_k_YES), 0, 0, 1, 1},
-  {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
+  {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0},
   {&__pyx_n_s_adios, __pyx_k_adios, sizeof(__pyx_k_adios), 0, 0, 1, 1},
+  {&__pyx_n_s_advance, __pyx_k_advance, sizeof(__pyx_k_advance), 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, __pyx_k_attrs, sizeof(__pyx_k_attrs), 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_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
   {&__pyx_n_s_bpls, __pyx_k_bpls, sizeof(__pyx_k_bpls), 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},
@@ -11921,6 +13577,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_complex_2, __pyx_k_complex_2, sizeof(__pyx_k_complex_2), 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},
@@ -11942,7 +13599,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},
   {&__pyx_n_s_float128, __pyx_k_float128, sizeof(__pyx_k_float128), 0, 0, 1, 1},
+  {&__pyx_n_s_float16, __pyx_k_float16, sizeof(__pyx_k_float16), 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},
@@ -11958,16 +13617,20 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_is_stream, __pyx_k_is_stream, sizeof(__pyx_k_is_stream), 0, 0, 1, 1},
   {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
   {&__pyx_n_s_iterkeys, __pyx_k_iterkeys, sizeof(__pyx_k_iterkeys), 0, 0, 1, 1},
   {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
+  {&__pyx_n_s_last, __pyx_k_last, sizeof(__pyx_k_last), 0, 0, 1, 1},
   {&__pyx_n_s_last_step, __pyx_k_last_step, sizeof(__pyx_k_last_step), 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_lock_mode, __pyx_k_lock_mode, sizeof(__pyx_k_lock_mode), 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_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_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1},
+  {&__pyx_n_s_method_name, __pyx_k_method_name, sizeof(__pyx_k_method_name), 0, 0, 1, 1},
   {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
   {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
   {&__pyx_n_s_mype, __pyx_k_mype, sizeof(__pyx_k_mype), 0, 0, 1, 1},
@@ -11996,10 +13659,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
   {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_time_steps, __pyx_k_time_steps, sizeof(__pyx_k_time_steps), 0, 0, 1, 1},
+  {&__pyx_n_s_timeout_sec, __pyx_k_timeout_sec, sizeof(__pyx_k_timeout_sec), 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},
@@ -12026,7 +13691,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __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 = 404; __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;
@@ -12038,117 +13703,117 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "adios.pyx":458
+  /* "adios.pyx":540
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__11);
-  __Pyx_GIVEREF(__pyx_tuple__11);
+  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s__8); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__9);
+  __Pyx_GIVEREF(__pyx_tuple__9);
 
-  /* "adios.pyx":530
+  /* "adios.pyx":622
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__12);
-  __Pyx_GIVEREF(__pyx_tuple__12);
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__10);
+  __Pyx_GIVEREF(__pyx_tuple__10);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":215
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__13);
-  __Pyx_GIVEREF(__pyx_tuple__13);
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__11);
+  __Pyx_GIVEREF(__pyx_tuple__11);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":219
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__14);
-  __Pyx_GIVEREF(__pyx_tuple__14);
+  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__12);
+  __Pyx_GIVEREF(__pyx_tuple__12);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":257
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__15);
-  __Pyx_GIVEREF(__pyx_tuple__15);
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__13);
+  __Pyx_GIVEREF(__pyx_tuple__13);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
  *         if (end - f) - <int>(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_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__16);
-  __Pyx_GIVEREF(__pyx_tuple__16);
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__14);
+  __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__17);
-  __Pyx_GIVEREF(__pyx_tuple__17);
+  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__15);
+  __Pyx_GIVEREF(__pyx_tuple__15);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__18);
-  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_GIVEREF(__pyx_tuple__16);
 
-  /* "adios.pyx":569
+  /* "adios.pyx":661
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):
  */
-  __pyx_tuple__19 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__19);
-  __Pyx_GIVEREF(__pyx_tuple__19);
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar, 569, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__17 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__17);
+  __Pyx_GIVEREF(__pyx_tuple__17);
+  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar, 661, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":578
+  /* "adios.pyx":670
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  */
-  __pyx_tuple__21 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__21);
-  __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 578, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__19 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__19);
+  __Pyx_GIVEREF(__pyx_tuple__19);
+  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 670, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -12223,25 +13888,25 @@ PyMODINIT_FUNC PyInit_adios(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  __pyx_m = Py_InitModule4("adios", __pyx_methods, __pyx_k_ADIOS_is_freely_available_under, 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);
-  __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;}
+  __pyx_b = PyImport_AddModule(__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;};
+  if (PyObject_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;};
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   #if PY_MAJOR_VERSION >= 3
   {
@@ -12262,19 +13927,20 @@ PyMODINIT_FUNC PyInit_adios(void)
   __pyx_vtabptr_5adios_file = &__pyx_vtable_5adios_file;
   __pyx_vtable_5adios_file.close = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch))__pyx_f_5adios_4file_close;
   __pyx_vtable_5adios_file.printself = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch))__pyx_f_5adios_4file_printself;
-  if (PyType_Ready(&__pyx_type_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_vtable_5adios_file.advance = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_4file_advance *__pyx_optional_args))__pyx_f_5adios_4file_advance;
+  if (PyType_Ready(&__pyx_type_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_5adios_file.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_5adios_file.tp_dict, __pyx_vtabptr_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_5adios_file.tp_dict, __pyx_vtabptr_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_5adios_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_5adios_file = &__pyx_type_5adios_file;
   __pyx_vtabptr_5adios_var = &__pyx_vtable_5adios_var;
   __pyx_vtable_5adios_var.close = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch))__pyx_f_5adios_3var_close;
   __pyx_vtable_5adios_var.read = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_3var_read *__pyx_optional_args))__pyx_f_5adios_3var_read;
   __pyx_vtable_5adios_var.printself = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch))__pyx_f_5adios_3var_printself;
-  if (PyType_Ready(&__pyx_type_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_5adios_var.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_5adios_var.tp_dict, __pyx_vtabptr_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_5adios_var.tp_dict, __pyx_vtabptr_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_5adios_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_5adios_var = &__pyx_type_5adios_var;
   /*--- Type import code ---*/
   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
@@ -12305,265 +13971,265 @@ PyMODINIT_FUNC PyInit_adios(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":225
+  /* "adios.pyx":228
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":226
+  /* "adios.pyx":229
  * 
  * class DATATYPE:
  *     unknown = -1             # <<<<<<<<<<<<<<
  *     byte = 0
  *     short = 1
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":227
+  /* "adios.pyx":230
  * class DATATYPE:
  *     unknown = -1
  *     byte = 0             # <<<<<<<<<<<<<<
  *     short = 1
  *     integer = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":228
+  /* "adios.pyx":231
  *     unknown = -1
  *     byte = 0
  *     short = 1             # <<<<<<<<<<<<<<
  *     integer = 2
  *     long = 4
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":229
+  /* "adios.pyx":232
  *     byte = 0
  *     short = 1
  *     integer = 2             # <<<<<<<<<<<<<<
  *     long = 4
  *     unsigned_byte = 50
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":230
+  /* "adios.pyx":233
  *     short = 1
  *     integer = 2
  *     long = 4             # <<<<<<<<<<<<<<
  *     unsigned_byte = 50
  *     unsigned_short = 51
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":231
+  /* "adios.pyx":234
  *     integer = 2
  *     long = 4
  *     unsigned_byte = 50             # <<<<<<<<<<<<<<
  *     unsigned_short = 51
  *     unsigned_integer = 52
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":232
+  /* "adios.pyx":235
  *     long = 4
  *     unsigned_byte = 50
  *     unsigned_short = 51             # <<<<<<<<<<<<<<
  *     unsigned_integer = 52
  *     unsigned_long = 54
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":233
+  /* "adios.pyx":236
  *     unsigned_byte = 50
  *     unsigned_short = 51
  *     unsigned_integer = 52             # <<<<<<<<<<<<<<
  *     unsigned_long = 54
  *     real = 5
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":234
+  /* "adios.pyx":237
  *     unsigned_short = 51
  *     unsigned_integer = 52
  *     unsigned_long = 54             # <<<<<<<<<<<<<<
  *     real = 5
  *     double = 6
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":235
+  /* "adios.pyx":238
  *     unsigned_integer = 52
  *     unsigned_long = 54
  *     real = 5             # <<<<<<<<<<<<<<
  *     double = 6
  *     long_double = 7
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":236
+  /* "adios.pyx":239
  *     unsigned_long = 54
  *     real = 5
  *     double = 6             # <<<<<<<<<<<<<<
  *     long_double = 7
  *     string = 9
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":237
+  /* "adios.pyx":240
  *     real = 5
  *     double = 6
  *     long_double = 7             # <<<<<<<<<<<<<<
  *     string = 9
  *     complex = 10
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":238
+  /* "adios.pyx":241
  *     double = 6
  *     long_double = 7
  *     string = 9             # <<<<<<<<<<<<<<
  *     complex = 10
  *     double_complex = 11
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":239
+  /* "adios.pyx":242
  *     long_double = 7
  *     string = 9
  *     complex = 10             # <<<<<<<<<<<<<<
  *     double_complex = 11
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_complex, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_complex_2, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":240
+  /* "adios.pyx":243
  *     string = 9
  *     complex = 10
  *     double_complex = 11             # <<<<<<<<<<<<<<
  * 
  * class FLAG:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":225
+  /* "adios.pyx":228
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":242
+  /* "adios.pyx":245
  *     double_complex = 11
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":243
+  /* "adios.pyx":246
  * 
  * class FLAG:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     YES = 1
  *     NO = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":244
+  /* "adios.pyx":247
  * class FLAG:
  *     UNKNOWN = 0
  *     YES = 1             # <<<<<<<<<<<<<<
  *     NO = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":245
+  /* "adios.pyx":248
  *     UNKNOWN = 0
  *     YES = 1
  *     NO = 2             # <<<<<<<<<<<<<<
  * 
  * class BUFFER_ALLOC_WHEN:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":242
+  /* "adios.pyx":245
  *     double_complex = 11
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":247
+  /* "adios.pyx":250
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); 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);
 
-  /* "adios.pyx":248
+  /* "adios.pyx":251
  * 
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     NOW = 1
  *     LATER = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":249
+  /* "adios.pyx":252
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0
  *     NOW = 1             # <<<<<<<<<<<<<<
  *     LATER = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":250
+  /* "adios.pyx":253
  *     UNKNOWN = 0
  *     NOW = 1
  *     LATER = 2             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":247
+  /* "adios.pyx":250
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); 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);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_2) < 0) {__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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":256
+  /* "adios.pyx":259
  * ## ====================
  * 
  * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -12571,8 +14237,9 @@ PyMODINIT_FUNC PyInit_adios(void)
  * 
  */
   __pyx_k_ = MPI_COMM_WORLD;
+  __pyx_k_ = MPI_COMM_WORLD;
 
-  /* "adios.pyx":262
+  /* "adios.pyx":265
  *                    char * name,
  *                    char * mode,
  *                    MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -12581,7 +14248,16 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__2 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":306
+  /* "adios.pyx":262
+ *     return adios_init(config, comm)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+  __pyx_k__2 = MPI_COMM_WORLD;
+
+  /* "adios.pyx":309
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -12589,74 +14265,66 @@ PyMODINIT_FUNC PyInit_adios(void)
  * 
  */
   __pyx_k__3 = MPI_COMM_WORLD;
+  __pyx_k__3 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":422
- * ## ====================
- * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI_Comm comm = MPI_COMM_WORLD,
- *                 char * parameters = ""):
- */
-  __pyx_k__4 = ADIOS_READ_METHOD_BP;
-
-  /* "adios.pyx":423
- * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                 MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
- *                 char * parameters = ""):
- *     return adios_read_init_method (method, comm, parameters)
+  /* "adios.pyx":488
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",
+ *                     MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)
  */
   __pyx_k__5 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":428
- * 
- * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
- *     return adios_read_finalize_method (method)
+  /* "adios.pyx":487
  * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI_Comm comm = MPI_COMM_WORLD,
+ *                     char * parameters = ""):
  */
-  __pyx_k__7 = ADIOS_READ_METHOD_BP;
+  __pyx_k__5 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":449
- * 
+  /* "adios.pyx":522
  *     def __init__(self, char * fname,
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                  MPI_Comm comm = MPI_COMM_WORLD):
- *         self.fp = NULL
+ *                  char * method_name = "BP",
+ *                  MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                  is_stream = False,
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
  */
-  __pyx_k__8 = ADIOS_READ_METHOD_BP;
+  __pyx_k__6 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":450
- *     def __init__(self, char * fname,
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+  /* "adios.pyx":524
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
+ *                  is_stream = False,
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,             # <<<<<<<<<<<<<<
+ *                  float timeout_sec = 0.0):
  *         self.fp = NULL
- *         self.var = {}
  */
-  __pyx_k__9 = MPI_COMM_WORLD;
+  __pyx_k__7 = ADIOS_LOCKMODE_ALL;
 
-  /* "adios.pyx":569
+  /* "adios.pyx":661
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     if not f.var.has_key(varname):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5adios_37readvar, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5adios_39readvar, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":578
+  /* "adios.pyx":670
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
- *     f = file(fname)
+ *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5adios_39bpls, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5adios_41bpls, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "adios.pyx":1
@@ -12669,19 +14337,24 @@ PyMODINIT_FUNC PyInit_adios(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
  *     if arr.base is NULL:
  *         return None
  */
+
+  /*--- Wrapped vars code ---*/
+
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init adios", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    if (__pyx_d) {
+      __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");
@@ -12710,7 +14383,7 @@ end:
     Py_XDECREF(m);
     return (__Pyx_RefNannyAPIStruct *)r;
 }
-#endif /* CYTHON_REFNANNY */
+#endif
 
 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
@@ -12868,7 +14541,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
 #if CYTHON_COMPILING_IN_CPYTHON
     result = PyDict_GetItem(__pyx_d, name);
-    if (result) {
+    if (likely(result)) {
         Py_INCREF(result);
     } else {
 #else
@@ -12887,14 +14560,10 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
     ternaryfunc call = func->ob_type->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
-#if PY_VERSION_HEX >= 0x02060000
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
         return NULL;
-#endif
     result = (*call)(func, arg, kw);
-#if PY_VERSION_HEX >= 0x02060000
     Py_LeaveRecursiveCall();
-#endif
     if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
         PyErr_SetString(
             PyExc_SystemError,
@@ -13000,6 +14669,43 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
     return 0;
 }
 
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+    if (s1 == s2) {
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        const char *ps1, *ps2;
+        Py_ssize_t length = PyBytes_GET_SIZE(s1);
+        if (length != PyBytes_GET_SIZE(s2))
+            return (equals == Py_NE);
+        ps1 = PyBytes_AS_STRING(s1);
+        ps2 = PyBytes_AS_STRING(s2);
+        if (ps1[0] != ps2[0]) {
+            return (equals == Py_NE);
+        } else if (length == 1) {
+            return (equals == Py_EQ);
+        } else {
+            int result = memcmp(ps1, ps2, (size_t)length);
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+#endif
+}
+
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
     PyObject *r;
     if (!j) return NULL;
@@ -13078,6 +14784,70 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
 }
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
+    PyObject *self, *result;
+    PyCFunction cfunc;
+    cfunc = PyCFunction_GET_FUNCTION(func);
+    self = PyCFunction_GET_SELF(func);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = cfunc(self, arg);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_New(1);
+    if (unlikely(!args)) return NULL;
+    Py_INCREF(arg);
+    PyTuple_SET_ITEM(args, 0, arg);
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+            return __Pyx_PyObject_CallMethO(func, arg);
+        }
+    }
+    return __Pyx__PyObject_CallOneArg(func, arg);
+}
+#else
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject* args = PyTuple_Pack(1, arg);
+    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
+}
+#endif
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
+            return __Pyx_PyObject_CallMethO(func, NULL);
+        }
+    }
+    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
+}
+#endif
+
 static CYTHON_INLINE int __Pyx_IterFinish(void) {
 #if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
@@ -13112,6 +14882,27 @@ static CYTHON_INLINE int __Pyx_IterFinish(void) {
 #endif
 }
 
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
+    PyObject *method, *result = NULL;
+    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
+    if (unlikely(!method)) goto bad;
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyMethod_Check(method))) {
+        PyObject *self = PyMethod_GET_SELF(method);
+        if (likely(self)) {
+            PyObject *function = PyMethod_GET_FUNCTION(method);
+            result = __Pyx_PyObject_CallOneArg(function, self);
+            Py_DECREF(method);
+            return result;
+        }
+    }
+#endif
+    result = __Pyx_PyObject_CallNoArg(method);
+    Py_DECREF(method);
+bad:
+    return result;
+}
+
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
     PyErr_Format(PyExc_ValueError,
                  "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
@@ -13306,11 +15097,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             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);
@@ -13325,17 +15112,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             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)) {
@@ -13343,7 +15119,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                 "raise: exception class must be a subclass of BaseException");
             goto raise_error;
         }
-        #endif
     }
     __Pyx_ErrRestore(type, value, tb);
     return;
@@ -13353,7 +15128,7 @@ raise_error:
     Py_XDECREF(tb);
     return;
 }
-#else /* Python 3+ */
+#else
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
     PyObject* owned_instance = NULL;
     if (tb == Py_None) {
@@ -13439,6 +15214,13 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(tmp_type, tmp_value, tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
+#else
         PyThreadState *tstate = PyThreadState_GET();
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -13446,6 +15228,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#endif
     }
 bad:
     Py_XDECREF(owned_instance);
@@ -13454,7 +15237,7 @@ bad:
 #endif
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
+#if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
     PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
@@ -13570,8 +15353,167 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
         result = PyObject_Call(metaclass, margs, mkw);
         Py_DECREF(margs);
     }
-    Py_XDECREF(owned_metaclass);
-    return result;
+    Py_XDECREF(owned_metaclass);
+    return result;
+}
+
+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, (size_t)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,
+        0,
+        0,
+        0,
+        0,
+        __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,
+        __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;
+    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_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        __pyx_d,      /*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 CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
@@ -13600,17 +15542,16 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     }
 }
 
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func)             \
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)       \
     {                                                                     \
-        func_type value = func(x);                                        \
+        func_type value = func_value;                                     \
         if (sizeof(target_type) < sizeof(func_type)) {                    \
             if (unlikely(value != (func_type) (target_type) value)) {     \
                 func_type zero = 0;                                       \
-                PyErr_SetString(PyExc_OverflowError,                      \
-                    (is_unsigned && unlikely(value < zero)) ?             \
-                    "can't convert negative value to " #target_type :     \
-                    "value too large to convert to " #target_type);       \
-                return (target_type) -1;                                  \
+                if (is_unsigned && unlikely(value < zero))                \
+                    goto raise_neg_overflow;                              \
+                else                                                      \
+                    goto raise_overflow;                                  \
             }                                                             \
         }                                                                 \
         return (target_type) value;                                       \
@@ -13621,19 +15562,18 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
   #include "longintrepr.h"
  #endif
 #endif
+
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
     const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(int) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int");
-                return (int) -1;
+                goto raise_neg_overflow;
             }
             return (int) val;
         }
@@ -13643,40 +15583,34 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (int) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int");
-                return (int) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(int) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(int) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(int) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(int) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(int) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x))
             } else if (sizeof(int) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -13714,6 +15648,14 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int");
+    return (int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int");
+    return (int) -1;
 }
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
@@ -13742,7 +15684,6 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
     empty_dict = PyDict_New();
     if (!empty_dict)
         goto bad;
-    #if PY_VERSION_HEX >= 0x02050000
     {
         #if PY_MAJOR_VERSION >= 3
         if (level == -1) {
@@ -13764,7 +15705,7 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
                     PyErr_Clear();
                 }
             }
-            level = 0; /* try absolute import on failure */
+            level = 0;
         }
         #endif
         if (!module) {
@@ -13781,14 +15722,6 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int 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);
@@ -13798,24 +15731,17 @@ bad:
     return module;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *x) {
     const MPI_Comm neg_one = (MPI_Comm) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(MPI_Comm) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(MPI_Comm, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(MPI_Comm, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to MPI_Comm");
-                return (MPI_Comm) -1;
+                goto raise_neg_overflow;
             }
             return (MPI_Comm) val;
         }
@@ -13825,40 +15751,34 @@ static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(MPI_Comm)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (MPI_Comm) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MPI_Comm, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to MPI_Comm");
-                return (MPI_Comm) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(MPI_Comm) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(MPI_Comm) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(MPI_Comm)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(MPI_Comm) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(MPI_Comm) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MPI_Comm,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(MPI_Comm, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(MPI_Comm) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(MPI_Comm, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, long, PyLong_AsLong(x))
             } else if (sizeof(MPI_Comm) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(MPI_Comm, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -13896,26 +15816,27 @@ static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MPI_Comm");
+    return (MPI_Comm) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MPI_Comm");
+    return (MPI_Comm) -1;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
     const int64_t neg_one = (int64_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(int64_t) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int64_t");
-                return (int64_t) -1;
+                goto raise_neg_overflow;
             }
             return (int64_t) val;
         }
@@ -13925,40 +15846,34 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (int64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int64_t, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int64_t");
-                return (int64_t) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(int64_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(int64_t) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(int64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int64_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(int64_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong(x))
             } else if (sizeof(int64_t) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -13996,26 +15911,27 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int64_t");
+    return (int64_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int64_t");
+    return (int64_t) -1;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(uint64_t) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to uint64_t");
-                return (uint64_t) -1;
+                goto raise_neg_overflow;
             }
             return (uint64_t) val;
         }
@@ -14025,40 +15941,34 @@ static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(uint64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint64_t, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to uint64_t");
-                return (uint64_t) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(uint64_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(uint64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint64_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(uint64_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(uint64_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong(x))
             } else if (sizeof(uint64_t) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14096,26 +16006,27 @@ static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to uint64_t");
+    return (uint64_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to uint64_t");
+    return (uint64_t) -1;
 }
 
-#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_As_long(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))) {
         if (sizeof(long) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
         } else {
             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;
+                goto raise_neg_overflow;
             }
             return (long) val;
         }
@@ -14125,40 +16036,34 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *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];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, ((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;
+                goto raise_neg_overflow;
             }
             if (sizeof(long) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(long) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong(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];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(long) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x))
             } else if (sizeof(long) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14196,6 +16101,14 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to long");
+    return (long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to long");
+    return (long) -1;
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
@@ -14273,7 +16186,7 @@ error:
     Py_DECREF(f);
     return -1;
 }
-#else /* Python 3 has a print function */
+#else
 static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
     PyObject* kwargs = 0;
     PyObject* result = 0;
@@ -14379,7 +16292,7 @@ error:
      * warnings about unused functions */
     return __Pyx_Print(f, NULL, 0);
 }
-#else /* Python 3 has a print function */
+#else
 static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
     int res;
     PyObject* arg_tuple = PyTuple_Pack(1, o);
@@ -14693,11 +16606,7 @@ static int __Pyx_check_binary_version(void) {
                       "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;
 }
@@ -14767,11 +16676,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
         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,
@@ -14787,168 +16692,6 @@ bad:
 }
 #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
@@ -14959,7 +16702,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
         } else {
             *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
         }
-        #else  /* Python 3+ has unicode identifiers */
+        #else
         if (t->is_unicode | t->is_str) {
             if (t->intern) {
                 *t->p = PyUnicode_InternFromString(t->s);
@@ -14979,8 +16722,8 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *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 PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
+    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
 }
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
     Py_ssize_t ignore;
@@ -15009,33 +16752,31 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
                 }
             }
         }
-#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/
+#endif
         *length = PyBytes_GET_SIZE(defenc);
         return defenc_c;
-#else /* PY_VERSION_HEX < 0x03030000 */
-        if (PyUnicode_READY(o) == -1) return NULL;
+#else
+        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
         if (PyUnicode_IS_ASCII(o)) {
-            *length = PyUnicode_GET_DATA_SIZE(o);
+            *length = PyUnicode_GET_LENGTH(o);
             return PyUnicode_AsUTF8(o);
         } else {
             PyUnicode_AsASCIIString(o);
             return NULL;
         }
-#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
+#else
         return PyUnicode_AsUTF8AndSize(o, length);
-#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
-#endif /* PY_VERSION_HEX < 0x03030000 */
+#endif
+#endif
     } else
-#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#endif
 #if !CYTHON_COMPILING_IN_PYPY
-#if PY_VERSION_HEX >= 0x02060000
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
     } else
 #endif
-#endif
     {
         char* result;
         int r = PyBytes_AsStringAndSize(o, &result, length);
@@ -15096,11 +16837,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
   }
   return res;
 }
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   Py_ssize_t ival;
   PyObject *x;
@@ -15118,11 +16854,7 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
        }
      #endif
     #endif
-  #if PY_VERSION_HEX < 0x02060000
-    return PyInt_AsSsize_t(b);
-  #else
     return PyLong_AsSsize_t(b);
-  #endif
   }
   x = PyNumber_Index(b);
   if (!x) return -1;
@@ -15131,17 +16863,7 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   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
+    return PyInt_FromSize_t(ival);
 }
 
 
diff --git a/wrappers/numpy/adios.pyx b/wrappers/numpy/adios.pyx
index 691b50a..cadbf95 100644
--- a/wrappers/numpy/adios.pyx
+++ b/wrappers/numpy/adios.pyx
@@ -12,10 +12,8 @@
 import numpy as np
 cimport numpy as np
 
-
-## This is a serial version of Adios. No use of MPI.
-##import mpi4py.MPI as MPI 
-##cimport mpi4py.MPI as MPI
+#import mpi4py.MPI_as MPI_
+#cimport mpi4py.MPI_as MPI
 
 import cython
 cimport cython
@@ -56,6 +54,7 @@ cdef extern from "adios_types.h":
 cdef extern from "adios.h":
     ctypedef int MPI_Comm
     int MPI_COMM_WORLD
+    int MPI_COMM_SELF
 
     ctypedef char* const_char_ptr "const char*"
 
@@ -153,6 +152,10 @@ cdef extern from "adios_read.h":
     ctypedef enum ADIOS_READ_METHOD:
         ADIOS_READ_METHOD_BP
         ADIOS_READ_METHOD_BP_AGGREGATE
+        ADIOS_READ_METHOD_DATASPACES
+        ADIOS_READ_METHOD_DIMES
+        ADIOS_READ_METHOD_FLEXPATH
+        ADIOS_READ_METHOD_ICEE
         pass
 
     ctypedef enum ADIOS_LOCKMODE:
@@ -297,7 +300,7 @@ cpdef int read(int64_t fd_p, char * name, np.ndarray val):
 cpdef int close(int64_t fd_p):
     return adios_close(fd_p)
 
-cpdef finalize(int mype = 0):
+cpdef int finalize(int mype = 0):
     return adios_finalize(mype)
 
 ## ====================
@@ -312,8 +315,8 @@ cpdef int allocate_buffer(int when,
                                  buffer_size)
 
 cpdef int64_t declare_group(char * name,
-                            char * time_index,
-                            int stats):
+                            char * time_index = "",
+                            int stats = 1):
     cdef int64_t id = 0
     adios_declare_group (&id,
                          name,
@@ -325,9 +328,9 @@ cpdef int define_var(int64_t group_id,
                      char * name,
                      char * path,
                      int type,
-                     char * dimensions,
-                     char * global_dimensions,
-                     char * local_offsets):
+                     char * dimensions = "",
+                     char * global_dimensions = "",
+                     char * local_offsets = ""):
     return adios_define_var(group_id,
                             name, path,
                             <ADIOS_DATATYPES> type,
@@ -350,8 +353,8 @@ cpdef int define_attribute (int64_t group,
 
 cpdef int select_method (int64_t group,
                          char * method,
-                         char * parameters,
-                         char * base_path):
+                         char * parameters = "",
+                         char * base_path = ""):
     return adios_select_method (group,
                                 method,
                                 parameters,
@@ -415,19 +418,85 @@ cdef printvar(ADIOS_VARINFO * v):
     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
     print '%15s : %d' % ('nsteps', v.nsteps)
 
+cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+    if (name == "BP"):
+        method = ADIOS_READ_METHOD_BP
+    elif (name == "BP_AGGREGATE"):
+        method = ADIOS_READ_METHOD_BP_AGGREGATE
+    elif (name == "DATASPACES"):
+        method = ADIOS_READ_METHOD_DATASPACES
+    elif (name == "DIMES"):
+        method = ADIOS_READ_METHOD_DIMES
+    elif (name == "FLEXPATH"):
+        method = ADIOS_READ_METHOD_FLEXPATH
+    elif (name == "ICEE"):
+        method = ADIOS_READ_METHOD_ICEE
+    else:
+        print '[WARN] Invalid read method name:', name, '. Use default BP method'
+        method = ADIOS_READ_METHOD_BP
+        
+    return method
+
+cpdef np2adiostype(type nptype):
+    """ Ignored: int_, intc, intp """
+
+    cdef atype = DATATYPE.unknown
+
+    if (nptype == np.bool_):
+        atype = DATATYPE.integer
+    elif (nptype == np.int8):
+        atype = DATATYPE.byte
+    elif (nptype == np.int16):
+        atype = DATATYPE.short
+    elif (nptype == np.int32):
+        atype = DATATYPE.integer
+    elif (nptype == np.int64):
+        atype = DATATYPE.long
+    elif (nptype == np.uint8):
+        atype = DATATYPE.unsigned_byte
+    elif (nptype == np.uint16):
+        atype = DATATYPE.unsigned_short
+    elif (nptype == np.uint32):
+        atype = DATATYPE.unsigned_integer
+    elif (nptype == np.uint64):
+        atype = DATATYPE.unsigned_long
+    elif (nptype == np.float_):
+        atype = DATATYPE.double
+    elif (nptype == np.float16):
+        atype = DATATYPE.real
+    elif (nptype == np.float32):
+        atype = DATATYPE.real
+    elif (nptype == np.float64):
+        atype = DATATYPE.double
+    elif (nptype == np.complex_):
+        atype = DATATYPE.double_complex
+    elif (nptype == np.complex64):
+        atype = DATATYPE.complex
+    elif (nptype == np.complex128):
+        atype = DATATYPE.double_complex
+    elif (nptype == np.str_):
+        atype = DATATYPE.byte
+
+    return atype
+
 ## ====================
 ## ADIOS Class Definitions for Read
 ## ====================
 
-cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
-                MPI_Comm comm = MPI_COMM_WORLD,
-                char * parameters = ""):
+""" Call adios_read_init_method """
+cpdef int read_init(char * method_name = "BP",
+                    MPI_Comm comm = MPI_COMM_WORLD,
+                    char * parameters = ""):
+    cdef method = str2adiosreadmethod(method_name)
     return adios_read_init_method (method, comm, parameters)
 
 
-cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+""" Call adios_read_finalize_method """
+cpdef int read_finalize(char * method_name = "BP"):
+    cdef method = str2adiosreadmethod(method_name)
     return adios_read_finalize_method (method)
 
+""" Python class for ADIOS_FILE structure """
 cdef class file:
     """ Private Memeber """
     cpdef ADIOS_FILE * fp
@@ -445,14 +514,27 @@ cdef class file:
     cpdef public dict var
     cpdef public dict attr
 
+    cpdef public bint is_stream
+
+    """ Initialization. Call adios_read_open and populate public members """
     def __init__(self, char * fname,
-                 ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
-                 MPI_Comm comm = MPI_COMM_WORLD):
+                 char * method_name = "BP",
+                 MPI_Comm comm = MPI_COMM_WORLD,
+                 is_stream = False,
+                 ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+                 float timeout_sec = 0.0):
         self.fp = NULL
         self.var = {}
         self.attr = {}
+        self.is_stream = is_stream
+        cdef method = str2adiosreadmethod(method_name)
 
-        self.fp = adios_read_open_file(fname, method, comm)
+        if (is_stream):
+            self.fp = adios_read_open(fname, method, comm,
+                                      lock_mode, timeout_sec)
+        else:
+            self.fp = adios_read_open_file(fname, method, comm)
+            
         assert self.fp != NULL, 'Not an open file'
 
         self.name = fname.split('/')[-1]  ## basename
@@ -460,9 +542,9 @@ cdef class file:
         self.nattrs = self.fp.nattrs
         self.current_step = self.fp.current_step
         self.last_step = self.fp.last_step
-        self.endianness = self.fp.endianness  
-        self.version = self.fp.version     
-        self.file_size = self.fp.file_size   
+        self.endianness = self.fp.endianness
+        self.version = self.fp.version
+        self.file_size = self.fp.file_size
     
         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
             self.var[varname] = var(self, varname)
@@ -470,17 +552,23 @@ cdef class file:
     def __del__(self):
             self.close()
             
+    """ Call adios_read_close """
     cpdef close(self):
         assert self.fp != NULL, 'Not an open file'
         adios_read_close(self.fp)
         self.fp = NULL
         
+    """ Print self """
     cpdef printself(self):
         assert self.fp != NULL, 'Not an open file'
         print '=== AdiosFile ==='
         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
         printfile(self.fp)
 
+    cpdef advance(self, int last = 0, float timeout_sec = 0.0):
+        return adios_advance_step(self.fp, last, timeout_sec)
+
+""" Python class for ADIOS_VARINFO structure """
 cdef class var:
     """ Private Memeber """
     cdef file file
@@ -494,6 +582,7 @@ cdef class var:
     cpdef public tuple dims
     cpdef public int nsteps
 
+    """ Initialization. Call adios_inq_var and populate public members """
     def __init__(self, file file, char * name):
         self.file = file
         self.vp = NULL
@@ -512,14 +601,17 @@ cdef class var:
     def __del__(self):
         self.close()
 
+    """ Call adios_free_varinfo """
     cpdef close(self):
         assert self.vp != NULL, 'Not an open var'
         adios_free_varinfo(self.vp)
         self.vp = NULL
 
+    """ Call adios_schedule_read and adios_perform_reads """
     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
         assert self.type is not None, 'Data type is not supported yet'
-        assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+        if (self.nsteps > 0):
+            assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
         
         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
@@ -567,7 +659,7 @@ cdef class var:
 ## ====================
 
 def readvar(fname, varname):
-    f = file(fname)
+    f = file(fname, comm=MPI_COMM_SELF)
     if not f.var.has_key(varname):
         print "No valid variable"
         return
@@ -576,11 +668,10 @@ def readvar(fname, varname):
     return v.read(from_steps=0, nsteps=v.nsteps)
 
 def bpls(fname):
-    f = file(fname)
+    f = file(fname, comm=MPI_COMM_SELF)
     return {'nvars': f.nvars,
             'nattrs': f.nattrs,
             'vars': tuple([ k for k in f.var.iterkeys() ]),
             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
             'time_steps': (f.current_step, f.last_step),
             'file_size': f.file_size}
-    
diff --git a/wrappers/numpy/adios_mpi.cpp b/wrappers/numpy/adios_mpi.cpp
index 8bece82..c8671db 100644
--- a/wrappers/numpy/adios_mpi.cpp
+++ b/wrappers/numpy/adios_mpi.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.20.1 on Tue May 27 13:00:55 2014 */
+/* Generated by Cython 0.21.1 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -16,11 +16,11 @@
 #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+.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
+    #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_20_1"
-#include <stddef.h> /* For offsetof */
+#define CYTHON_ABI "0_21_1"
+#include <stddef.h>
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
@@ -54,65 +54,11 @@
 #define CYTHON_COMPILING_IN_PYPY 0
 #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
-#if CYTHON_COMPILING_IN_PYPY
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600
 #define Py_OptimizeFlag 0
 #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_As_int(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
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
 #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) \
@@ -124,22 +70,11 @@
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyType_Type
 #endif
-#if PY_VERSION_HEX < 0x02060000
-  #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 < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT)
-  #define Py_TPFLAGS_IS_ABSTRACT 0
-#endif
 #if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
@@ -164,12 +99,14 @@
 #if CYTHON_COMPILING_IN_PYPY
   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+  #define __Pyx_PyFrozenSet_Size(s)         PyObject_Size(s)
 #else
   #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
       PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+  #define __Pyx_PyFrozenSet_Size(s)         PySet_Size(s)
 #endif
-#define __Pyx_PyString_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
@@ -183,36 +120,13 @@
   #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_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
   #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
 #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
@@ -237,6 +151,11 @@
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+  #ifndef PyUnicode_InternFromString
+    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+  #endif
+#endif
 #if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
@@ -245,42 +164,10 @@
   #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))
+  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
 #else
-  #define __Pyx_NAMESTR(n) (n)
-  #define __Pyx_DOCSTR(n)  (n)
+  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
@@ -316,6 +203,12 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#ifdef __cplusplus
+template<typename T>
+void __Pyx_call_destructor(T* x) {
+    x->~T();
+}
+#endif
 
 
 #if PY_MAJOR_VERSION >= 3
@@ -373,7 +266,7 @@ static CYTHON_INLINE float __PYX_NAN() {
 # 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*/
+                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
 #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
@@ -396,7 +289,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t*
 #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
 #define __Pyx_PyBytes_FromString        PyBytes_FromString
 #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
 #if PY_MAJOR_VERSION < 3
     #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
@@ -406,17 +299,17 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
 #endif
 #define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
 #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_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((char*)s)
-#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((char*)s)
-#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s)
+#define __Pyx_PyObject_FromUString(s)  __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromUString(s)   __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((const 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;
+    return (size_t)(u_end - u - 1);
 }
 #else
 #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
@@ -439,18 +332,21 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #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(void) {
-    PyObject* sys = NULL;
+    PyObject* sys;
     PyObject* default_encoding = NULL;
     PyObject* ascii_chars_u = NULL;
     PyObject* ascii_chars_b = NULL;
+    const char* default_encoding_c;
     sys = PyImport_ImportModule("sys");
-    if (sys == NULL) goto bad;
+    if (!sys) 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) {
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    if (strcmp(default_encoding_c, "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++) {
@@ -458,23 +354,21 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) {
         }
         __Pyx_sys_getdefaultencoding_not_ascii = 1;
         ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
-        if (ascii_chars_u == NULL) goto bad;
+        if (!ascii_chars_u) 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) {
+        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(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 '%.200s' is not a superset of ascii.",
                 default_encoding_c);
             goto bad;
         }
+        Py_DECREF(ascii_chars_u);
+        Py_DECREF(ascii_chars_b);
     }
-    Py_XDECREF(sys);
-    Py_XDECREF(default_encoding);
-    Py_XDECREF(ascii_chars_u);
-    Py_XDECREF(ascii_chars_b);
+    Py_DECREF(default_encoding);
     return 0;
 bad:
-    Py_XDECREF(sys);
     Py_XDECREF(default_encoding);
     Py_XDECREF(ascii_chars_u);
     Py_XDECREF(ascii_chars_b);
@@ -488,21 +382,22 @@ bad:
 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
 static char* __PYX_DEFAULT_STRING_ENCODING;
 static int __Pyx_init_sys_getdefaultencoding_params(void) {
-    PyObject* sys = NULL;
+    PyObject* sys;
     PyObject* default_encoding = NULL;
     char* default_encoding_c;
     sys = PyImport_ImportModule("sys");
-    if (sys == NULL) goto bad;
+    if (!sys) 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);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
     __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));
+    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
     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;
 }
@@ -510,16 +405,11 @@ bad:
 #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__ */
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+  #define likely(x)   __builtin_expect(!!(x), 1)
+  #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
   #define likely(x)   (x)
   #define unlikely(x) (x)
 #endif /* __GNUC__ */
@@ -563,7 +453,7 @@ static const char *__pyx_f[] = {
   "MPI.pxd",
 };
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":723
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":723
  * # in Cython to enable them only on the right systems.
  * 
  * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
@@ -572,7 +462,7 @@ static const char *__pyx_f[] = {
  */
 typedef npy_int8 __pyx_t_5numpy_int8_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":724
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":724
  * 
  * ctypedef npy_int8       int8_t
  * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
@@ -581,7 +471,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t;
  */
 typedef npy_int16 __pyx_t_5numpy_int16_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":725
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":725
  * ctypedef npy_int8       int8_t
  * ctypedef npy_int16      int16_t
  * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
@@ -590,7 +480,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t;
  */
 typedef npy_int32 __pyx_t_5numpy_int32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":726
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":726
  * ctypedef npy_int16      int16_t
  * ctypedef npy_int32      int32_t
  * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
@@ -599,7 +489,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t;
  */
 typedef npy_int64 __pyx_t_5numpy_int64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":730
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":730
  * #ctypedef npy_int128     int128_t
  * 
  * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
@@ -608,7 +498,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t;
  */
 typedef npy_uint8 __pyx_t_5numpy_uint8_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":731
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":731
  * 
  * ctypedef npy_uint8      uint8_t
  * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
@@ -617,7 +507,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t;
  */
 typedef npy_uint16 __pyx_t_5numpy_uint16_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":732
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":732
  * ctypedef npy_uint8      uint8_t
  * ctypedef npy_uint16     uint16_t
  * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
@@ -626,7 +516,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t;
  */
 typedef npy_uint32 __pyx_t_5numpy_uint32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":733
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":733
  * ctypedef npy_uint16     uint16_t
  * ctypedef npy_uint32     uint32_t
  * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
@@ -635,7 +525,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t;
  */
 typedef npy_uint64 __pyx_t_5numpy_uint64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":737
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":737
  * #ctypedef npy_uint128    uint128_t
  * 
  * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
@@ -644,7 +534,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t;
  */
 typedef npy_float32 __pyx_t_5numpy_float32_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":738
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":738
  * 
  * ctypedef npy_float32    float32_t
  * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
@@ -653,7 +543,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t;
  */
 typedef npy_float64 __pyx_t_5numpy_float64_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":747
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -662,7 +552,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t;
  */
 typedef npy_long __pyx_t_5numpy_int_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":748
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":748
  * # numpy.int corresponds to 'l' and numpy.long to 'q'
  * ctypedef npy_long       int_t
  * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
@@ -671,7 +561,7 @@ typedef npy_long __pyx_t_5numpy_int_t;
  */
 typedef npy_longlong __pyx_t_5numpy_long_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":749
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":749
  * ctypedef npy_long       int_t
  * ctypedef npy_longlong   long_t
  * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
@@ -680,7 +570,7 @@ typedef npy_longlong __pyx_t_5numpy_long_t;
  */
 typedef npy_longlong __pyx_t_5numpy_longlong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":751
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":751
  * ctypedef npy_longlong   longlong_t
  * 
  * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
@@ -689,7 +579,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t;
  */
 typedef npy_ulong __pyx_t_5numpy_uint_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":752
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":752
  * 
  * ctypedef npy_ulong      uint_t
  * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
@@ -698,7 +588,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":753
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":753
  * ctypedef npy_ulong      uint_t
  * ctypedef npy_ulonglong  ulong_t
  * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
@@ -707,7 +597,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":755
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":755
  * ctypedef npy_ulonglong  ulonglong_t
  * 
  * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
@@ -716,7 +606,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
  */
 typedef npy_intp __pyx_t_5numpy_intp_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":756
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":756
  * 
  * ctypedef npy_intp       intp_t
  * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
@@ -725,7 +615,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t;
  */
 typedef npy_uintp __pyx_t_5numpy_uintp_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":758
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":758
  * ctypedef npy_uintp      uintp_t
  * 
  * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
@@ -734,7 +624,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t;
  */
 typedef npy_double __pyx_t_5numpy_float_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":759
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":759
  * 
  * ctypedef npy_double     float_t
  * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
@@ -743,7 +633,7 @@ typedef npy_double __pyx_t_5numpy_float_t;
  */
 typedef npy_double __pyx_t_5numpy_double_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":760
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":760
  * ctypedef npy_double     float_t
  * ctypedef npy_double     double_t
  * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
@@ -793,7 +683,7 @@ struct PyMPIFileObject;
 struct __pyx_obj_9adios_mpi_file;
 struct __pyx_obj_9adios_mpi_var;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":762
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":762
  * ctypedef npy_longdouble longdouble_t
  * 
  * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
@@ -802,7 +692,7 @@ struct __pyx_obj_9adios_mpi_var;
  */
 typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":763
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":763
  * 
  * ctypedef npy_cfloat      cfloat_t
  * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
@@ -811,7 +701,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
  */
 typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":764
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":764
  * ctypedef npy_cfloat      cfloat_t
  * ctypedef npy_cdouble     cdouble_t
  * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
@@ -820,7 +710,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
  */
 typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":766
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":766
  * ctypedef npy_clongdouble clongdouble_t
  * 
  * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
@@ -832,11 +722,15 @@ struct __pyx_opt_args_9adios_mpi_init;
 struct __pyx_opt_args_9adios_mpi_open;
 struct __pyx_opt_args_9adios_mpi_finalize;
 struct __pyx_opt_args_9adios_mpi_init_noxml;
+struct __pyx_opt_args_9adios_mpi_declare_group;
+struct __pyx_opt_args_9adios_mpi_define_var;
+struct __pyx_opt_args_9adios_mpi_select_method;
 struct __pyx_opt_args_9adios_mpi_read_init;
 struct __pyx_opt_args_9adios_mpi_read_finalize;
+struct __pyx_opt_args_9adios_mpi_4file_advance;
 struct __pyx_opt_args_9adios_mpi_3var_read;
 
-/* "adios_mpi.pyx":254
+/* "adios_mpi.pyx":258
  * ## ====================
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -848,7 +742,7 @@ struct __pyx_opt_args_9adios_mpi_init {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":257
+/* "adios_mpi.pyx":261
  *     return adios_init(config, comm.ob_mpi)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -860,10 +754,10 @@ struct __pyx_opt_args_9adios_mpi_open {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":298
+/* "adios_mpi.pyx":302
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
@@ -872,7 +766,7 @@ struct __pyx_opt_args_9adios_mpi_finalize {
   int mype;
 };
 
-/* "adios_mpi.pyx":304
+/* "adios_mpi.pyx":308
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -884,38 +778,91 @@ struct __pyx_opt_args_9adios_mpi_init_noxml {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":420
- * ## ====================
+/* "adios_mpi.pyx":316
+ *                                  buffer_size)
+ * 
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index = "",
+ *                             int stats = 1):
+ */
+struct __pyx_opt_args_9adios_mpi_declare_group {
+  int __pyx_n;
+  char *time_index;
+  int stats;
+};
+
+/* "adios_mpi.pyx":326
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+struct __pyx_opt_args_9adios_mpi_define_var {
+  int __pyx_n;
+  char *dimensions;
+  char *global_dimensions;
+  char *local_offsets;
+};
+
+/* "adios_mpi.pyx":353
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters = "",
+ */
+struct __pyx_opt_args_9adios_mpi_select_method {
+  int __pyx_n;
+  char *parameters;
+  char *base_path;
+};
+
+/* "adios_mpi.pyx":486
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI.Comm comm = MPI.COMM_WORLD,
- *                 char * parameters = ""):
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI.Comm comm = MPI.COMM_WORLD,
+ *                     char * parameters = ""):
  */
 struct __pyx_opt_args_9adios_mpi_read_init {
   int __pyx_n;
-  ADIOS_READ_METHOD method;
+  char *method_name;
   struct PyMPICommObject *comm;
   char *parameters;
 };
 
-/* "adios_mpi.pyx":426
- * 
+/* "adios_mpi.pyx":494
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 struct __pyx_opt_args_9adios_mpi_read_finalize {
   int __pyx_n;
-  ADIOS_READ_METHOD method;
+  char *method_name;
 };
 
-/* "adios_mpi.pyx":518
- *         self.vp = NULL
+/* "adios_mpi.pyx":567
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+struct __pyx_opt_args_9adios_mpi_4file_advance {
+  int __pyx_n;
+  int last;
+  float timeout_sec;
+};
+
+/* "adios_mpi.pyx":610
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 struct __pyx_opt_args_9adios_mpi_3var_read {
   int __pyx_n;
@@ -925,7 +872,7 @@ struct __pyx_opt_args_9adios_mpi_3var_read {
   PyObject *nsteps;
 };
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":49
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":49
  *     ctypedef MPI_Offset Offset "MPI_Offset"
  * 
  * ctypedef public api class Status [             # <<<<<<<<<<<<<<
@@ -941,7 +888,7 @@ typedef struct PyMPIStatusObject PyMPIStatusObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":56
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":56
  *     cdef int        flags
  * 
  * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
@@ -957,7 +904,7 @@ typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":63
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":63
  *     cdef int          flags
  * 
  * ctypedef public api class Request [             # <<<<<<<<<<<<<<
@@ -974,7 +921,7 @@ typedef struct PyMPIRequestObject PyMPIRequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":71
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":71
  *     cdef object      ob_buf
  * 
  * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
@@ -988,7 +935,7 @@ typedef struct PyMPIPrequestObject PyMPIPrequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":77
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":77
  *     pass
  * 
  * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
@@ -1003,7 +950,7 @@ typedef struct PyMPIGrequestObject PyMPIGrequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":83
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":83
  *     cdef MPI_Request ob_grequest
  * 
  * ctypedef public api class Op [             # <<<<<<<<<<<<<<
@@ -1021,7 +968,7 @@ typedef struct PyMPIOpObject PyMPIOpObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":92
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":92
  *     cdef int    ob_usrid
  * 
  * ctypedef public api class Group [             # <<<<<<<<<<<<<<
@@ -1037,7 +984,7 @@ typedef struct PyMPIGroupObject PyMPIGroupObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":99
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":99
  *     cdef int       flags
  * 
  * ctypedef public api class Info [             # <<<<<<<<<<<<<<
@@ -1053,7 +1000,7 @@ typedef struct PyMPIInfoObject PyMPIInfoObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":106
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":106
  *     cdef int      flags
  * 
  * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
@@ -1069,7 +1016,7 @@ typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":113
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":113
  *     cdef int            flags
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -1085,7 +1032,7 @@ typedef struct PyMPICommObject PyMPICommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":120
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":120
  *     cdef int      flags
  * 
  * ctypedef public api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
@@ -1099,7 +1046,7 @@ typedef struct PyMPIIntracommObject PyMPIIntracommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":126
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":126
  *     pass
  * 
  * ctypedef public api class Cartcomm(Intracomm) [             # <<<<<<<<<<<<<<
@@ -1113,7 +1060,7 @@ typedef struct PyMPICartcommObject PyMPICartcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":132
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":132
  *     pass
  * 
  * ctypedef public api class Graphcomm(Intracomm) [             # <<<<<<<<<<<<<<
@@ -1127,7 +1074,7 @@ typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":138
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":138
  *     pass
  * 
  * ctypedef public api class Distgraphcomm(Intracomm) [             # <<<<<<<<<<<<<<
@@ -1141,7 +1088,7 @@ typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":144
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":144
  *     pass
  * 
  * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
@@ -1155,7 +1102,7 @@ typedef struct PyMPIIntercommObject PyMPIIntercommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":150
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":150
  *     pass
  * 
  * ctypedef public api class Win [             # <<<<<<<<<<<<<<
@@ -1171,7 +1118,7 @@ typedef struct PyMPIWinObject PyMPIWinObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;
 
-/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":157
+/* "../../../../Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":157
  *     cdef int     flags
  * 
  * ctypedef public api class File [             # <<<<<<<<<<<<<<
@@ -1187,9 +1134,9 @@ typedef struct PyMPIFileObject PyMPIFileObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;
 
-/* "adios_mpi.pyx":429
- *     return adios_read_finalize_method (method)
+/* "adios_mpi.pyx":499
  * 
+ * """ Python class for ADIOS_FILE structure """
  * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
@@ -1208,12 +1155,13 @@ struct __pyx_obj_9adios_mpi_file {
   int file_size;
   PyObject *var;
   PyObject *attr;
+  int is_stream;
 };
 
 
-/* "adios_mpi.pyx":482
- *         printfile(self.fp)
+/* "adios_mpi.pyx":571
  * 
+ * """ Python class for ADIOS_VARINFO structure """
  * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cdef file file
@@ -1233,9 +1181,9 @@ struct __pyx_obj_9adios_mpi_var {
 
 
 
-/* "adios_mpi.pyx":429
- *     return adios_read_finalize_method (method)
+/* "adios_mpi.pyx":499
  * 
+ * """ Python class for ADIOS_FILE structure """
  * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
@@ -1244,13 +1192,14 @@ struct __pyx_obj_9adios_mpi_var {
 struct __pyx_vtabstruct_9adios_mpi_file {
   PyObject *(*close)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch);
   PyObject *(*printself)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch);
+  PyObject *(*advance)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_4file_advance *__pyx_optional_args);
 };
 static struct __pyx_vtabstruct_9adios_mpi_file *__pyx_vtabptr_9adios_mpi_file;
 
 
-/* "adios_mpi.pyx":482
- *         printfile(self.fp)
+/* "adios_mpi.pyx":571
  * 
+ * """ Python class for ADIOS_VARINFO structure """
  * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cdef file file
@@ -1275,7 +1224,7 @@ static struct __pyx_vtabstruct_9adios_mpi_var *__pyx_vtabptr_9adios_mpi_var;
     void (*FinishContext)(void**);
   } __Pyx_RefNannyAPIStruct;
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
-  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
 #ifdef WITH_THREAD
   #define __Pyx_RefNannySetupContext(name, acquire_gil) \
@@ -1312,7 +1261,7 @@ static struct __pyx_vtabstruct_9adios_mpi_var *__pyx_vtabptr_9adios_mpi_var;
   #define __Pyx_XDECREF(r) Py_XDECREF(r)
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
-#endif /* CYTHON_REFNANNY */
+#endif
 #define __Pyx_XDECREF_SET(r, v) do {                            \
         PyObject *tmp = (PyObject *) r;                         \
         r = v; __Pyx_XDECREF(tmp);                              \
@@ -1339,36 +1288,36 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
 #endif
 
-static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
-static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
-    const char* function_name); /*proto*/
+    const char* function_name);
 
 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*/
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
 
 static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact); /*proto*/
+    const char *name, int exact);
 
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
 
 #if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
 #else
 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
 #endif
 
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
-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 CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb);
 
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                   int lineno, const char *filename,
-                                  int full_traceback); /*proto*/
+                                  int full_traceback);
 
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
@@ -1386,6 +1335,10 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
+#include <string.h>
+
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
 #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
     __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
@@ -1407,6 +1360,18 @@ 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 CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+#else
+#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
+#endif
+
 #if PY_MAJOR_VERSION >= 3
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
@@ -1427,37 +1392,19 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
-static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+static CYTHON_INLINE int __Pyx_IterFinish(void);
 
-static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) {
-    PyObject *method, *result = NULL;
-    if (unlikely(!args)) return NULL;
-    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
-    if (unlikely(!method)) goto bad;
-    result = __Pyx_PyObject_Call(method, args, NULL);
-    Py_DECREF(method);
-bad:
-    Py_DECREF(args);
-    return result;
-}
-#define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3))
-#define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2))
-#define __Pyx_PyObject_CallMethod1(obj, name, arg1) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1))
-#define __Pyx_PyObject_CallMethod0(obj, name) \
-    __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF(__pyx_empty_tuple), __pyx_empty_tuple))
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
 
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
 
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
 
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
 
 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
 
-static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);
 
 static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
                                              int is_tuple, int has_known_size, int decref_tuple);
@@ -1467,22 +1414,39 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict,
 static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
                                               PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
 
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
-static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
 
 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
-                                           PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/
+                                           PyObject *mkw, PyObject *modname, PyObject *doc);
 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
-                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
+                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
+
+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);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
 
 static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
 
@@ -1492,7 +1456,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
 
-static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
+static int __Pyx_Print(PyObject*, PyObject *, int);
 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
 static PyObject* __pyx_print = 0;
 static PyObject* __pyx_print_kwargs = 0;
@@ -1500,7 +1464,7 @@ static PyObject* __pyx_print_kwargs = 0;
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value);
 
-static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
@@ -1614,29 +1578,18 @@ static int __Pyx_check_binary_version(void);
 #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 PyObject *__Pyx_ImportModule(const char *name);
 
-static void __Pyx_AddTraceback(const char *funcname, int c_line,
-                               int py_line, const char *filename); /*proto*/
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);
 
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
 
+static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_4file_advance *__pyx_optional_args); /* proto*/
+static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
+static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_3var_read *__pyx_optional_args); /* proto*/
+static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
 
 /* Module declarations from 'cpython.buffer' */
 
@@ -1700,18 +1653,20 @@ static int __pyx_f_9adios_mpi_write_long(int64_t, char *, long, int __pyx_skip_d
 static int __pyx_f_9adios_mpi_write_float(int64_t, char *, float, int __pyx_skip_dispatch); /*proto*/
 static int __pyx_f_9adios_mpi_read(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
 static int __pyx_f_9adios_mpi_close(int64_t, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_finalize *__pyx_optional_args); /*proto*/
+static int __pyx_f_9adios_mpi_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_finalize *__pyx_optional_args); /*proto*/
 static int __pyx_f_9adios_mpi_init_noxml(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_init_noxml *__pyx_optional_args); /*proto*/
 static int __pyx_f_9adios_mpi_allocate_buffer(int, uint64_t, int __pyx_skip_dispatch); /*proto*/
-static int64_t __pyx_f_9adios_mpi_declare_group(char *, char *, int, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_9adios_mpi_define_var(int64_t, char *, char *, int, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
+static int64_t __pyx_f_9adios_mpi_declare_group(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_declare_group *__pyx_optional_args); /*proto*/
+static int __pyx_f_9adios_mpi_define_var(int64_t, char *, char *, int, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_define_var *__pyx_optional_args); /*proto*/
 static int __pyx_f_9adios_mpi_define_attribute(int64_t, char *, char *, int, char *, char *, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_9adios_mpi_select_method(int64_t, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_9adios_mpi_select_method(int64_t, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_select_method *__pyx_optional_args); /*proto*/
 static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES); /*proto*/
 static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *); /*proto*/
 static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_read_init(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_init *__pyx_optional_args); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_read_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_finalize *__pyx_optional_args); /*proto*/
+static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyObject *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_9adios_mpi_read_init(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_init *__pyx_optional_args); /*proto*/
+static int __pyx_f_9adios_mpi_read_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_finalize *__pyx_optional_args); /*proto*/
 #define __Pyx_MODULE_NAME "adios_mpi"
 int __pyx_module_is_main_adios_mpi = 0;
 
@@ -1735,12 +1690,14 @@ static PyObject *__pyx_pf_9adios_mpi_24declare_group(CYTHON_UNUSED PyObject *__p
 static PyObject *__pyx_pf_9adios_mpi_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_9adios_mpi_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_9adios_mpi_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_9adios_mpi_32read_init(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method, struct PyMPICommObject *__pyx_v_comm, char *__pyx_v_parameters); /* proto */
-static PyObject *__pyx_pf_9adios_mpi_34read_finalize(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method); /* proto */
-static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, char *__pyx_v_fname, ADIOS_READ_METHOD __pyx_v_method, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_32np2adiostype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nptype); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_34read_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name, struct PyMPICommObject *__pyx_v_comm, char *__pyx_v_parameters); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_36read_finalize(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name); /* proto */
+static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, char *__pyx_v_fname, char *__pyx_v_method_name, struct PyMPICommObject *__pyx_v_comm, PyObject *__pyx_v_is_stream, ADIOS_LOCKMODE __pyx_v_lock_mode, float __pyx_v_timeout_sec); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_4file_4close(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_4file_6printself(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_8advance(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_v_last, float __pyx_v_timeout_sec); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_4file_4name___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
 static int __pyx_pf_9adios_mpi_4file_4name_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_9adios_mpi_4file_4name_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
@@ -1764,6 +1721,8 @@ static int __pyx_pf_9adios_mpi_4file_3var_4__del__(struct __pyx_obj_9adios_mpi_f
 static PyObject *__pyx_pf_9adios_mpi_4file_4attr___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
 static int __pyx_pf_9adios_mpi_4file_4attr_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_9adios_mpi_4file_4attr_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_9is_stream___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_9is_stream_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, struct __pyx_obj_9adios_mpi_file *__pyx_v_file, char *__pyx_v_name); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
@@ -1784,8 +1743,8 @@ static int __pyx_pf_9adios_mpi_3var_4dims_2__set__(struct __pyx_obj_9adios_mpi_v
 static int __pyx_pf_9adios_mpi_3var_4dims_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
 static int __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname); /* proto */
-static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_38readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_40bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* 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_9adios_mpi_file(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
@@ -1806,11 +1765,13 @@ static char __pyx_k_k[] = "k";
 static char __pyx_k_l[] = "l";
 static char __pyx_k_q[] = "q";
 static char __pyx_k_v[] = "v";
+static char __pyx_k_BP[] = "BP";
 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__6[] = "";
+static char __pyx_k__4[] = "";
+static char __pyx_k__8[] = "/";
 static char __pyx_k_fh[] = "fh";
 static char __pyx_k_fp[] = "fp";
 static char __pyx_k_np[] = "np";
@@ -1818,14 +1779,16 @@ 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__10[] = "/";
-static char __pyx_k__19[] = "*";
+static char __pyx_k__17[] = "*";
 static char __pyx_k_all[] = "all";
 static char __pyx_k_doc[] = "__doc__";
 static char __pyx_k_end[] = "end";
+static char __pyx_k_str[] = "str_";
 static char __pyx_k_val[] = "val";
 static char __pyx_k_var[] = "var";
 static char __pyx_k_FLAG[] = "FLAG";
+static char __pyx_k_ICEE[] = "ICEE";
+static char __pyx_k_bool[] = "bool_";
 static char __pyx_k_bpls[] = "bpls";
 static char __pyx_k_byte[] = "byte";
 static char __pyx_k_comm[] = "comm";
@@ -1835,6 +1798,7 @@ 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_last[] = "last";
 static char __pyx_k_long[] = "long";
 static char __pyx_k_main[] = "__main__";
 static char __pyx_k_mode[] = "mode";
@@ -1851,6 +1815,7 @@ static char __pyx_k_vars[] = "vars";
 static char __pyx_k_when[] = "when";
 static char __pyx_k_15s_d[] = "%15s : %d";
 static char __pyx_k_15s_s[] = "%15s : %s";
+static char __pyx_k_DIMES[] = "DIMES";
 static char __pyx_k_LATER[] = "LATER";
 static char __pyx_k_array[] = "array";
 static char __pyx_k_attrs[] = "attrs";
@@ -1859,6 +1824,7 @@ 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_float[] = "float_";
 static char __pyx_k_fname[] = "fname";
 static char __pyx_k_group[] = "group";
 static char __pyx_k_int16[] = "int16";
@@ -1890,7 +1856,9 @@ static char __pyx_k_uint32[] = "uint32";
 static char __pyx_k_uint64[] = "uint64";
 static char __pyx_k_Reading[] = "Reading ... ";
 static char __pyx_k_UNKNOWN[] = "UNKNOWN";
-static char __pyx_k_complex[] = "complex";
+static char __pyx_k_advance[] = "advance";
+static char __pyx_k_complex[] = "complex_";
+static char __pyx_k_float16[] = "float16";
 static char __pyx_k_float32[] = "float32";
 static char __pyx_k_float64[] = "float64";
 static char __pyx_k_integer[] = "integer";
@@ -1900,6 +1868,7 @@ static char __pyx_k_unknown[] = "unknown";
 static char __pyx_k_varname[] = "varname";
 static char __pyx_k_version[] = "version";
 static char __pyx_k_DATATYPE[] = "DATATYPE";
+static char __pyx_k_FLEXPATH[] = "FLEXPATH";
 static char __pyx_k_float128[] = "float128";
 static char __pyx_k_group_id[] = "group_id";
 static char __pyx_k_itemsize[] = "itemsize";
@@ -1910,12 +1879,16 @@ static char __pyx_k_COMM_SELF[] = "COMM_SELF";
 static char __pyx_k_adios_mpi[] = "adios_mpi";
 static char __pyx_k_base_path[] = "base_path";
 static char __pyx_k_complex64[] = "complex64";
+static char __pyx_k_complex_2[] = "complex";
 static char __pyx_k_data_size[] = "data_size";
 static char __pyx_k_file_size[] = "file_size";
+static char __pyx_k_is_stream[] = "is_stream";
 static char __pyx_k_last_step[] = "last_step";
+static char __pyx_k_lock_mode[] = "lock_mode";
 static char __pyx_k_metaclass[] = "__metaclass__";
 static char __pyx_k_printself[] = "printself";
 static char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
+static char __pyx_k_DATASPACES[] = "DATASPACES";
 static char __pyx_k_ValueError[] = "ValueError";
 static char __pyx_k_complex128[] = "complex128";
 static char __pyx_k_contiguous[] = "contiguous";
@@ -1930,6 +1903,9 @@ static char __pyx_k_time_index[] = "time_index";
 static char __pyx_k_time_steps[] = "time_steps";
 static char __pyx_k_buffer_size[] = "buffer_size";
 static char __pyx_k_long_double[] = "long_double";
+static char __pyx_k_method_name[] = "method_name";
+static char __pyx_k_timeout_sec[] = "timeout_sec";
+static char __pyx_k_BP_AGGREGATE[] = "BP_AGGREGATE";
 static char __pyx_k_RuntimeError[] = "RuntimeError";
 static char __pyx_k_current_step[] = "current_step";
 static char __pyx_k_var_namelist[] = "var_namelist";
@@ -1948,11 +1924,13 @@ static char __pyx_k_BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
 static char __pyx_k_No_valid_variable[] = "No valid variable";
 static char __pyx_k_global_dimensions[] = "global_dimensions";
 static char __pyx_k_Not_an_open_variable[] = "Not an open variable";
+static char __pyx_k_Use_default_BP_method[] = ". Use default BP method";
 static char __pyx_k_Count_dimension_mismatch[] = "Count dimension mismatch.";
 static char __pyx_k_Offset_dimension_mismatch[] = "Offset dimension mismatch";
 static char __pyx_k_Count_is_larger_than_shape[] = "Count is larger than shape.";
 static char __pyx_k_Step_index_is_out_of_range[] = "Step index is out of range";
 static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous";
+static char __pyx_k_WARN_Invalid_read_method_name[] = "[WARN] Invalid read method name:";
 static char __pyx_k_Data_type_is_not_supported_yet[] = "Data type is not supported yet";
 static char __pyx_k_ADIOS_is_freely_available_under[] = "\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_Users_jyc_project_adios_devel_w[] = "/Users/jyc/project/adios-devel/wrappers/numpy/adios_mpi.pyx";
@@ -1967,16 +1945,22 @@ static PyObject *__pyx_kp_s_15s_lu;
 static PyObject *__pyx_kp_s_15s_s;
 static PyObject *__pyx_kp_s_AdiosFile;
 static PyObject *__pyx_kp_s_AdiosVariable;
+static PyObject *__pyx_n_s_BP;
+static PyObject *__pyx_n_s_BP_AGGREGATE;
 static PyObject *__pyx_n_s_BUFFER_ALLOC_WHEN;
 static PyObject *__pyx_n_s_COMM_SELF;
 static PyObject *__pyx_n_s_COMM_WORLD;
 static PyObject *__pyx_kp_s_Count_dimension_mismatch;
 static PyObject *__pyx_kp_s_Count_is_larger_than_shape;
+static PyObject *__pyx_n_s_DATASPACES;
 static PyObject *__pyx_n_s_DATATYPE;
+static PyObject *__pyx_n_s_DIMES;
 static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
 static PyObject *__pyx_n_s_FLAG;
+static PyObject *__pyx_n_s_FLEXPATH;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
+static PyObject *__pyx_n_s_ICEE;
 static PyObject *__pyx_n_s_LATER;
 static PyObject *__pyx_n_s_MPI;
 static PyObject *__pyx_n_s_NO;
@@ -1993,17 +1977,21 @@ static PyObject *__pyx_kp_s_Reading;
 static PyObject *__pyx_n_s_RuntimeError;
 static PyObject *__pyx_kp_s_Step_index_is_out_of_range;
 static PyObject *__pyx_n_s_UNKNOWN;
+static PyObject *__pyx_kp_s_Use_default_BP_method;
 static PyObject *__pyx_kp_s_Users_jyc_project_adios_devel_w;
 static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_kp_s_WARN_Invalid_read_method_name;
 static PyObject *__pyx_n_s_YES;
-static PyObject *__pyx_kp_s__10;
-static PyObject *__pyx_n_s__19;
+static PyObject *__pyx_n_s__17;
+static PyObject *__pyx_kp_s__8;
 static PyObject *__pyx_n_s_adios_mpi;
+static PyObject *__pyx_n_s_advance;
 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;
 static PyObject *__pyx_n_s_base_path;
+static PyObject *__pyx_n_s_bool;
 static PyObject *__pyx_n_s_bpls;
 static PyObject *__pyx_n_s_buffer_size;
 static PyObject *__pyx_n_s_byte;
@@ -2013,6 +2001,7 @@ 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_complex_2;
 static PyObject *__pyx_n_s_config;
 static PyObject *__pyx_n_s_contiguous;
 static PyObject *__pyx_n_s_copy;
@@ -2034,7 +2023,9 @@ 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_float;
 static PyObject *__pyx_n_s_float128;
+static PyObject *__pyx_n_s_float16;
 static PyObject *__pyx_n_s_float32;
 static PyObject *__pyx_n_s_float64;
 static PyObject *__pyx_n_s_fname;
@@ -2050,16 +2041,20 @@ 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_is_stream;
 static PyObject *__pyx_n_s_itemsize;
 static PyObject *__pyx_n_s_iterkeys;
 static PyObject *__pyx_n_s_k;
+static PyObject *__pyx_n_s_last;
 static PyObject *__pyx_n_s_last_step;
 static PyObject *__pyx_n_s_local_offsets;
+static PyObject *__pyx_n_s_lock_mode;
 static PyObject *__pyx_n_s_long;
 static PyObject *__pyx_n_s_long_double;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_metaclass;
 static PyObject *__pyx_n_s_method;
+static PyObject *__pyx_n_s_method_name;
 static PyObject *__pyx_n_s_mode;
 static PyObject *__pyx_n_s_module;
 static PyObject *__pyx_n_s_mpi4py_MPI;
@@ -2089,10 +2084,12 @@ 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_str;
 static PyObject *__pyx_n_s_string;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_time_index;
 static PyObject *__pyx_n_s_time_steps;
+static PyObject *__pyx_n_s_timeout_sec;
 static PyObject *__pyx_n_s_type;
 static PyObject *__pyx_n_s_uint16;
 static PyObject *__pyx_n_s_uint32;
@@ -2134,25 +2131,23 @@ static PyObject *__pyx_int_neg_1;
 static struct PyMPICommObject *__pyx_k_;
 static struct PyMPICommObject *__pyx_k__2;
 static struct PyMPICommObject *__pyx_k__3;
-static ADIOS_READ_METHOD __pyx_k__4;
 static struct PyMPICommObject *__pyx_k__5;
-static ADIOS_READ_METHOD __pyx_k__7;
-static struct PyMPICommObject *__pyx_k__8;
-static ADIOS_READ_METHOD __pyx_k__9;
+static struct PyMPICommObject *__pyx_k__6;
+static ADIOS_LOCKMODE __pyx_k__7;
+static PyObject *__pyx_tuple__9;
+static PyObject *__pyx_tuple__10;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__12;
 static PyObject *__pyx_tuple__13;
 static PyObject *__pyx_tuple__14;
 static PyObject *__pyx_tuple__15;
 static PyObject *__pyx_tuple__16;
-static PyObject *__pyx_tuple__17;
 static PyObject *__pyx_tuple__18;
 static PyObject *__pyx_tuple__20;
-static PyObject *__pyx_tuple__22;
+static PyObject *__pyx_codeobj__19;
 static PyObject *__pyx_codeobj__21;
-static PyObject *__pyx_codeobj__23;
 
-/* "adios_mpi.pyx":254
+/* "adios_mpi.pyx":258
  * ## ====================
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -2176,7 +2171,7 @@ static PyObject *__pyx_f_9adios_mpi_init(char *__pyx_v_config, CYTHON_UNUSED int
     }
   }
 
-  /* "adios_mpi.pyx":255
+  /* "adios_mpi.pyx":259
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
  *     return adios_init(config, comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -2184,13 +2179,13 @@ static PyObject *__pyx_f_9adios_mpi_init(char *__pyx_v_config, CYTHON_UNUSED int
  * cpdef int64_t open(char * group_name,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_init(__pyx_v_config, __pyx_v_comm->ob_mpi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(adios_init(__pyx_v_config, __pyx_v_comm->ob_mpi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":254
+  /* "adios_mpi.pyx":258
  * ## ====================
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -2245,7 +2240,7 @@ static PyObject *__pyx_pw_9adios_mpi_1init(PyObject *__pyx_self, PyObject *__pyx
         }
       }
       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 = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2255,18 +2250,18 @@ static PyObject *__pyx_pw_9adios_mpi_1init(PyObject *__pyx_self, PyObject *__pyx
         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 = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_config = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_config) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __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 = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.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 = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_init(__pyx_self, __pyx_v_config, __pyx_v_comm);
 
   /* function exit code */
@@ -2290,7 +2285,7 @@ static PyObject *__pyx_pf_9adios_mpi_init(CYTHON_UNUSED PyObject *__pyx_self, ch
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
-  __pyx_t_1 = __pyx_f_9adios_mpi_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2307,7 +2302,7 @@ static PyObject *__pyx_pf_9adios_mpi_init(CYTHON_UNUSED PyObject *__pyx_self, ch
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":257
+/* "adios_mpi.pyx":261
  *     return adios_init(config, comm.ob_mpi)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -2329,7 +2324,7 @@ static int64_t __pyx_f_9adios_mpi_open(char *__pyx_v_group_name, char *__pyx_v_n
     }
   }
 
-  /* "adios_mpi.pyx":263
+  /* "adios_mpi.pyx":267
  *     cdef int64_t fd
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -2338,7 +2333,7 @@ static int64_t __pyx_f_9adios_mpi_open(char *__pyx_v_group_name, char *__pyx_v_n
  */
   __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm->ob_mpi);
 
-  /* "adios_mpi.pyx":264
+  /* "adios_mpi.pyx":268
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)
  *     return fd             # <<<<<<<<<<<<<<
@@ -2348,7 +2343,7 @@ static int64_t __pyx_f_9adios_mpi_open(char *__pyx_v_group_name, char *__pyx_v_n
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":257
+  /* "adios_mpi.pyx":261
  *     return adios_init(config, comm.ob_mpi)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -2398,12 +2393,12 @@ static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx
         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 = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __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 = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (kw_args > 0) {
@@ -2412,7 +2407,7 @@ static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx
         }
       }
       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 = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2424,20 +2419,20 @@ static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx
         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 = 257; __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 = 258; __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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_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 = 261; __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 = 262; __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 = 263; __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 = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 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_mpi.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 = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_2open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
@@ -2463,7 +2458,7 @@ static PyObject *__pyx_pf_9adios_mpi_2open(CYTHON_UNUSED PyObject *__pyx_self, c
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_9adios_mpi_open(__pyx_v_group_name, __pyx_v_name, __pyx_v_mode, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__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;
@@ -2480,7 +2475,7 @@ static PyObject *__pyx_pf_9adios_mpi_2open(CYTHON_UNUSED PyObject *__pyx_self, c
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":266
+/* "adios_mpi.pyx":270
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2496,7 +2491,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size", 0);
 
-  /* "adios_mpi.pyx":269
+  /* "adios_mpi.pyx":273
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -2505,7 +2500,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
  */
   __pyx_v_result = adios_group_size(__pyx_v_fd_p, __pyx_v_data_size, (&__pyx_v_total_size));
 
-  /* "adios_mpi.pyx":270
+  /* "adios_mpi.pyx":274
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -2515,7 +2510,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
   __pyx_r = __pyx_v_total_size;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":266
+  /* "adios_mpi.pyx":270
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2560,11 +2555,11 @@ static PyObject *__pyx_pw_9adios_mpi_5set_group_size(PyObject *__pyx_self, PyObj
         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 = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __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 = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2572,12 +2567,12 @@ static PyObject *__pyx_pw_9adios_mpi_5set_group_size(PyObject *__pyx_self, PyObj
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __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 = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2599,7 +2594,7 @@ static PyObject *__pyx_pf_9adios_mpi_4set_group_size(CYTHON_UNUSED PyObject *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_group_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_9adios_mpi_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_9adios_mpi_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2616,7 +2611,7 @@ static PyObject *__pyx_pf_9adios_mpi_4set_group_size(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":272
+/* "adios_mpi.pyx":276
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2639,23 +2634,23 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "adios_mpi.pyx":274
+  /* "adios_mpi.pyx":278
  * 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 = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 278; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 278; __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 = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":275
+    /* "adios_mpi.pyx":279
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:
  *         val_ = val             # <<<<<<<<<<<<<<
@@ -2668,38 +2663,38 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, Py
   }
   /*else*/ {
 
-    /* "adios_mpi.pyx":277
+    /* "adios_mpi.pyx":281
  *         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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 281; __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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_copy, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __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_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__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 = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_5);
     __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":279
+  /* "adios_mpi.pyx":283
  *         val_ = np.array(val, copy=True)
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)             # <<<<<<<<<<<<<<
@@ -2709,7 +2704,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, Py
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val_->data));
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":272
+  /* "adios_mpi.pyx":276
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2764,16 +2759,16 @@ static PyObject *__pyx_pw_9adios_mpi_7write(PyObject *__pyx_self, PyObject *__py
         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 = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __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 = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __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 = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2782,19 +2777,19 @@ static PyObject *__pyx_pw_9adios_mpi_7write(PyObject *__pyx_self, PyObject *__py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __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 = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __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 = 276; __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 = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.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 = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_6write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -2815,7 +2810,7 @@ static PyObject *__pyx_pf_9adios_mpi_6write(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2832,7 +2827,7 @@ static PyObject *__pyx_pf_9adios_mpi_6write(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":281
+/* "adios_mpi.pyx":285
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2846,7 +2841,7 @@ static int __pyx_f_9adios_mpi_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_int", 0);
 
-  /* "adios_mpi.pyx":282
+  /* "adios_mpi.pyx":286
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2856,7 +2851,7 @@ static int __pyx_f_9adios_mpi_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":281
+  /* "adios_mpi.pyx":285
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2903,16 +2898,16 @@ static PyObject *__pyx_pw_9adios_mpi_9write_int(PyObject *__pyx_self, PyObject *
         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 = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __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 = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __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 = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2921,13 +2916,13 @@ static PyObject *__pyx_pw_9adios_mpi_9write_int(PyObject *__pyx_self, PyObject *
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __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 = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __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 = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && 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("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2949,7 +2944,7 @@ static PyObject *__pyx_pf_9adios_mpi_8write_int(CYTHON_UNUSED PyObject *__pyx_se
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_int", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2966,7 +2961,7 @@ static PyObject *__pyx_pf_9adios_mpi_8write_int(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":284
+/* "adios_mpi.pyx":288
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -2980,7 +2975,7 @@ static int __pyx_f_9adios_mpi_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_nam
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_long", 0);
 
-  /* "adios_mpi.pyx":285
+  /* "adios_mpi.pyx":289
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2990,7 +2985,7 @@ static int __pyx_f_9adios_mpi_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_nam
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":284
+  /* "adios_mpi.pyx":288
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -3037,16 +3032,16 @@ static PyObject *__pyx_pw_9adios_mpi_11write_long(PyObject *__pyx_self, PyObject
         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 = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __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 = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __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 = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3055,13 +3050,13 @@ static PyObject *__pyx_pw_9adios_mpi_11write_long(PyObject *__pyx_self, PyObject
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __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 = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __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 = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __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 = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3083,7 +3078,7 @@ static PyObject *__pyx_pf_9adios_mpi_10write_long(CYTHON_UNUSED PyObject *__pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_long", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3100,7 +3095,7 @@ static PyObject *__pyx_pf_9adios_mpi_10write_long(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":287
+/* "adios_mpi.pyx":291
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -3114,7 +3109,7 @@ static int __pyx_f_9adios_mpi_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_na
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_float", 0);
 
-  /* "adios_mpi.pyx":288
+  /* "adios_mpi.pyx":292
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -3124,7 +3119,7 @@ static int __pyx_f_9adios_mpi_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_na
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":287
+  /* "adios_mpi.pyx":291
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -3171,16 +3166,16 @@ static PyObject *__pyx_pw_9adios_mpi_13write_float(PyObject *__pyx_self, PyObjec
         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 = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __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 = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __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 = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3189,13 +3184,13 @@ static PyObject *__pyx_pw_9adios_mpi_13write_float(PyObject *__pyx_self, PyObjec
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __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 = 287; __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 = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __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 = 291; __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 = 291; __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 = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3217,7 +3212,7 @@ static PyObject *__pyx_pf_9adios_mpi_12write_float(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write_float", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3234,7 +3229,7 @@ static PyObject *__pyx_pf_9adios_mpi_12write_float(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":290
+/* "adios_mpi.pyx":294
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -3256,7 +3251,7 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyA
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read", 0);
 
-  /* "adios_mpi.pyx":291
+  /* "adios_mpi.pyx":295
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -3265,36 +3260,36 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyA
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __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 = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 295; __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 = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 295; __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 = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __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, __pyx_kp_s_Only_contiguous_arrays_are_suppo);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":292
+  /* "adios_mpi.pyx":296
  * 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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 296; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 296; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_Reading);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_Reading);
@@ -3305,30 +3300,30 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyA
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_s_bytes);
   __Pyx_GIVEREF(__pyx_kp_s_bytes);
   __pyx_t_4 = 0;
-  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":293
+  /* "adios_mpi.pyx":297
  *     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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 297; __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 297; __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 = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __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_As_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_As_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __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;
 
-  /* "adios_mpi.pyx":290
+  /* "adios_mpi.pyx":294
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -3381,16 +3376,16 @@ static PyObject *__pyx_pw_9adios_mpi_15read(PyObject *__pyx_self, PyObject *__py
         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 = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __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 = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __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 = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3399,19 +3394,19 @@ static PyObject *__pyx_pw_9adios_mpi_15read(PyObject *__pyx_self, PyObject *__py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __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 = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __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_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 = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.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 = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_14read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -3432,7 +3427,7 @@ static PyObject *__pyx_pf_9adios_mpi_14read(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3449,7 +3444,7 @@ static PyObject *__pyx_pf_9adios_mpi_14read(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":295
+/* "adios_mpi.pyx":299
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3463,17 +3458,17 @@ static int __pyx_f_9adios_mpi_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios_mpi.pyx":296
+  /* "adios_mpi.pyx":300
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
  * 
- * cpdef finalize(int mype = 0):
+ * cpdef int finalize(int mype = 0):
  */
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":295
+  /* "adios_mpi.pyx":299
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3498,7 +3493,7 @@ static PyObject *__pyx_pw_9adios_mpi_17close(PyObject *__pyx_self, PyObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
   assert(__pyx_arg_fd_p); {
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -3522,7 +3517,7 @@ static PyObject *__pyx_pf_9adios_mpi_16close(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3539,23 +3534,19 @@ static PyObject *__pyx_pf_9adios_mpi_16close(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":298
+/* "adios_mpi.pyx":302
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
 
 static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_finalize *__pyx_optional_args) {
+static int __pyx_f_9adios_mpi_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_finalize *__pyx_optional_args) {
   int __pyx_v_mype = ((int)0);
-  PyObject *__pyx_r = NULL;
+  int __pyx_r;
   __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) {
@@ -3563,35 +3554,26 @@ static PyObject *__pyx_f_9adios_mpi_finalize(CYTHON_UNUSED int __pyx_skip_dispat
     }
   }
 
-  /* "adios_mpi.pyx":299
+  /* "adios_mpi.pyx":303
  * 
- * cpdef finalize(int mype = 0):
+ * cpdef int finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_finalize(__pyx_v_mype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = adios_finalize(__pyx_v_mype);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":298
+  /* "adios_mpi.pyx":302
  *     return adios_close(fd_p)
  * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
@@ -3626,7 +3608,7 @@ static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *
         }
       }
       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 = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3636,14 +3618,14 @@ static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __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 = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3659,8 +3641,9 @@ static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *
 static PyObject *__pyx_pf_9adios_mpi_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   struct __pyx_opt_args_9adios_mpi_finalize __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -3668,15 +3651,16 @@ static PyObject *__pyx_pf_9adios_mpi_18finalize(CYTHON_UNUSED PyObject *__pyx_se
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.mype = __pyx_v_mype;
-  __pyx_t_1 = __pyx_f_9adios_mpi_finalize(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_9adios_mpi_finalize(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3685,7 +3669,7 @@ static PyObject *__pyx_pf_9adios_mpi_18finalize(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":304
+/* "adios_mpi.pyx":308
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -3705,7 +3689,7 @@ static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
 
-  /* "adios_mpi.pyx":305
+  /* "adios_mpi.pyx":309
  * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
  *     return adios_init_noxml(comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -3715,7 +3699,7 @@ static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch,
   __pyx_r = adios_init_noxml(__pyx_v_comm->ob_mpi);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":304
+  /* "adios_mpi.pyx":308
  * ## ADIOS No-XML API
  * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -3760,7 +3744,7 @@ static PyObject *__pyx_pw_9adios_mpi_21init_noxml(PyObject *__pyx_self, PyObject
         }
       }
       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 = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3773,13 +3757,13 @@ static PyObject *__pyx_pw_9adios_mpi_21init_noxml(PyObject *__pyx_self, PyObject
   }
   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 = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.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 = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_20init_noxml(__pyx_self, __pyx_v_comm);
 
   /* function exit code */
@@ -3805,7 +3789,7 @@ static PyObject *__pyx_pf_9adios_mpi_20init_noxml(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_9adios_mpi_init_noxml(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -3822,7 +3806,7 @@ static PyObject *__pyx_pf_9adios_mpi_20init_noxml(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":307
+/* "adios_mpi.pyx":311
  *     return adios_init_noxml(comm.ob_mpi)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -3836,7 +3820,7 @@ static int __pyx_f_9adios_mpi_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
 
-  /* "adios_mpi.pyx":309
+  /* "adios_mpi.pyx":313
  * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
  *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
@@ -3846,7 +3830,7 @@ static int __pyx_f_9adios_mpi_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":307
+  /* "adios_mpi.pyx":311
  *     return adios_init_noxml(comm.ob_mpi)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -3891,11 +3875,11 @@ static PyObject *__pyx_pw_9adios_mpi_23allocate_buffer(PyObject *__pyx_self, PyO
         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 = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __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 = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3903,12 +3887,12 @@ static PyObject *__pyx_pw_9adios_mpi_23allocate_buffer(PyObject *__pyx_self, PyO
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __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 = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3930,7 +3914,7 @@ static PyObject *__pyx_pf_9adios_mpi_22allocate_buffer(CYTHON_UNUSED PyObject *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3947,32 +3931,42 @@ static PyObject *__pyx_pf_9adios_mpi_22allocate_buffer(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":312
+/* "adios_mpi.pyx":316
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
+ *                             char * time_index = "",
+ *                             int stats = 1):
  */
 
 static PyObject *__pyx_pw_9adios_mpi_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int64_t __pyx_f_9adios_mpi_declare_group(char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static int64_t __pyx_f_9adios_mpi_declare_group(char *__pyx_v_name, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_declare_group *__pyx_optional_args) {
+  char *__pyx_v_time_index = ((char *)__pyx_k__4);
+  int __pyx_v_stats = ((int)1);
   int64_t __pyx_v_id;
   int64_t __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_time_index = __pyx_optional_args->time_index;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_stats = __pyx_optional_args->stats;
+      }
+    }
+  }
 
-  /* "adios_mpi.pyx":315
- *                             char * time_index,
- *                             int stats):
+  /* "adios_mpi.pyx":319
+ *                             char * time_index = "",
+ *                             int stats = 1):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
  *     adios_declare_group (&id,
  *                          name,
  */
   __pyx_v_id = 0;
 
-  /* "adios_mpi.pyx":316
- *                             int stats):
+  /* "adios_mpi.pyx":320
+ *                             int stats = 1):
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
  *                          name,
@@ -3980,7 +3974,7 @@ static int64_t __pyx_f_9adios_mpi_declare_group(char *__pyx_v_name, char *__pyx_
  */
   adios_declare_group((&__pyx_v_id), __pyx_v_name, __pyx_v_time_index, ((ADIOS_FLAG)__pyx_v_stats));
 
-  /* "adios_mpi.pyx":320
+  /* "adios_mpi.pyx":324
  *                          time_index,
  *                          <ADIOS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -3990,12 +3984,12 @@ static int64_t __pyx_f_9adios_mpi_declare_group(char *__pyx_v_name, char *__pyx_
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":312
+  /* "adios_mpi.pyx":316
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
+ *                             char * time_index = "",
+ *                             int stats = 1):
  */
 
   /* function exit code */
@@ -4035,33 +4029,43 @@ static PyObject *__pyx_pw_9adios_mpi_25declare_group(PyObject *__pyx_self, PyObj
         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 = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index);
+          if (value) { values[1] = value; kw_args--; }
         }
         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 = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       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 = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __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);
+      switch (PyTuple_GET_SIZE(__pyx_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);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[1]) {
+      __pyx_v_time_index = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_time_index) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_time_index = ((char *)__pyx_k__4);
+    }
+    if (values[2]) {
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_stats = ((int)1);
     }
-    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __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 = 313; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __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 = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4077,21 +4081,27 @@ static PyObject *__pyx_pw_9adios_mpi_25declare_group(PyObject *__pyx_self, PyObj
 static PyObject *__pyx_pf_9adios_mpi_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;
+  int64_t __pyx_t_1;
+  struct __pyx_opt_args_9adios_mpi_declare_group __pyx_t_2;
+  PyObject *__pyx_t_3 = 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_From_int64_t(__pyx_f_9adios_mpi_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 = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.time_index = __pyx_v_time_index;
+  __pyx_t_2.stats = __pyx_v_stats;
+  __pyx_t_1 = __pyx_f_9adios_mpi_declare_group(__pyx_v_name, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -4100,7 +4110,7 @@ static PyObject *__pyx_pf_9adios_mpi_24declare_group(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":322
+/* "adios_mpi.pyx":326
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -4109,14 +4119,28 @@ static PyObject *__pyx_pf_9adios_mpi_24declare_group(CYTHON_UNUSED PyObject *__p
  */
 
 static PyObject *__pyx_pw_9adios_mpi_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_9adios_mpi_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) {
+static int __pyx_f_9adios_mpi_define_var(int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_define_var *__pyx_optional_args) {
+  char *__pyx_v_dimensions = ((char *)__pyx_k__4);
+  char *__pyx_v_global_dimensions = ((char *)__pyx_k__4);
+  char *__pyx_v_local_offsets = ((char *)__pyx_k__4);
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_dimensions = __pyx_optional_args->dimensions;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_global_dimensions = __pyx_optional_args->global_dimensions;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_local_offsets = __pyx_optional_args->local_offsets;
+        }
+      }
+    }
+  }
 
-  /* "adios_mpi.pyx":329
- *                      char * global_dimensions,
- *                      char * local_offsets):
+  /* "adios_mpi.pyx":333
+ *                      char * global_dimensions = "",
+ *                      char * local_offsets = ""):
  *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
  *                             name, path,
  *                             <ADIOS_DATATYPES> type,
@@ -4124,7 +4148,7 @@ static int __pyx_f_9adios_mpi_define_var(int64_t __pyx_v_group_id, char *__pyx_v
   __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;
 
-  /* "adios_mpi.pyx":322
+  /* "adios_mpi.pyx":326
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -4179,59 +4203,73 @@ static PyObject *__pyx_pw_9adios_mpi_27define_var(PyObject *__pyx_self, PyObject
         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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dimensions);
+          if (value) { values[4] = value; kw_args--; }
         }
         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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_global_dimensions);
+          if (value) { values[5] = value; kw_args--; }
         }
         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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_local_offsets);
+          if (value) { values[6] = value; kw_args--; }
         }
       }
       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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __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);
+      switch (PyTuple_GET_SIZE(__pyx_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);
+        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_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __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 = 327; __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 = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[4]) {
+      __pyx_v_dimensions = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_dimensions = ((char *)__pyx_k__4);
+    }
+    if (values[5]) {
+      __pyx_v_global_dimensions = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_global_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_global_dimensions = ((char *)__pyx_k__4);
+    }
+    if (values[6]) {
+      __pyx_v_local_offsets = __Pyx_PyObject_AsString(values[6]); if (unlikely((!__pyx_v_local_offsets) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_local_offsets = ((char *)__pyx_k__4);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __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 = 323; __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 = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __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 = 326; __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 = 327; __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 = 328; __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 = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4247,21 +4285,28 @@ static PyObject *__pyx_pw_9adios_mpi_27define_var(PyObject *__pyx_self, PyObject
 static PyObject *__pyx_pf_9adios_mpi_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_t_1;
+  struct __pyx_opt_args_9adios_mpi_define_var __pyx_t_2;
+  PyObject *__pyx_t_3 = 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 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 322; __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_t_2.__pyx_n = 3;
+  __pyx_t_2.dimensions = __pyx_v_dimensions;
+  __pyx_t_2.global_dimensions = __pyx_v_global_dimensions;
+  __pyx_t_2.local_offsets = __pyx_v_local_offsets;
+  __pyx_t_1 = __pyx_f_9adios_mpi_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -4270,7 +4315,7 @@ static PyObject *__pyx_pf_9adios_mpi_26define_var(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":336
+/* "adios_mpi.pyx":340
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -4284,7 +4329,7 @@ static int __pyx_f_9adios_mpi_define_attribute(int64_t __pyx_v_group, char *__py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios_mpi.pyx":342
+  /* "adios_mpi.pyx":346
  *                             char * value,
  *                             char * var):
  *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
@@ -4294,7 +4339,7 @@ static int __pyx_f_9adios_mpi_define_attribute(int64_t __pyx_v_group, char *__py
   __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;
 
-  /* "adios_mpi.pyx":336
+  /* "adios_mpi.pyx":340
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -4347,31 +4392,31 @@ static PyObject *__pyx_pw_9adios_mpi_29define_attribute(PyObject *__pyx_self, Py
         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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4383,16 +4428,16 @@ static PyObject *__pyx_pw_9adios_mpi_29define_attribute(PyObject *__pyx_self, Py
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __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 = 337; __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 = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __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 = 340; __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 = 341; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __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 = 341; __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 = 342; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __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 = 344; __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 = 345; __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 = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4414,7 +4459,7 @@ static PyObject *__pyx_pf_9adios_mpi_28define_attribute(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("define_attribute", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4431,23 +4476,33 @@ static PyObject *__pyx_pf_9adios_mpi_28define_attribute(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":349
+/* "adios_mpi.pyx":353
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
  *                          char * method,
- *                          char * parameters,
+ *                          char * parameters = "",
  */
 
 static PyObject *__pyx_pw_9adios_mpi_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_9adios_mpi_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) {
+static int __pyx_f_9adios_mpi_select_method(int64_t __pyx_v_group, char *__pyx_v_method, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_select_method *__pyx_optional_args) {
+  char *__pyx_v_parameters = ((char *)__pyx_k__4);
+  char *__pyx_v_base_path = ((char *)__pyx_k__4);
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_parameters = __pyx_optional_args->parameters;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_base_path = __pyx_optional_args->base_path;
+      }
+    }
+  }
 
-  /* "adios_mpi.pyx":353
- *                          char * parameters,
- *                          char * base_path):
+  /* "adios_mpi.pyx":357
+ *                          char * parameters = "",
+ *                          char * base_path = ""):
  *     return adios_select_method (group,             # <<<<<<<<<<<<<<
  *                                 method,
  *                                 parameters,
@@ -4455,12 +4510,12 @@ static int __pyx_f_9adios_mpi_select_method(int64_t __pyx_v_group, char *__pyx_v
   __pyx_r = adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":349
+  /* "adios_mpi.pyx":353
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
  *                          char * method,
- *                          char * parameters,
+ *                          char * parameters = "",
  */
 
   /* function exit code */
@@ -4504,38 +4559,48 @@ static PyObject *__pyx_pw_9adios_mpi_31select_method(PyObject *__pyx_self, PyObj
         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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters);
+          if (value) { values[2] = value; kw_args--; }
         }
         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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_base_path);
+          if (value) { values[3] = value; kw_args--; }
         }
       }
       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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __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);
+      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);
+        case  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 = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __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 = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    if (values[2]) {
+      __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_parameters = ((char *)__pyx_k__4);
+    }
+    if (values[3]) {
+      __pyx_v_base_path = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_base_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_base_path = ((char *)__pyx_k__4);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __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 = 350; __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 = 351; __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 = 352; __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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4551,21 +4616,27 @@ static PyObject *__pyx_pw_9adios_mpi_31select_method(PyObject *__pyx_self, PyObj
 static PyObject *__pyx_pf_9adios_mpi_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_t_1;
+  struct __pyx_opt_args_9adios_mpi_select_method __pyx_t_2;
+  PyObject *__pyx_t_3 = 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 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_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 = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.parameters = __pyx_v_parameters;
+  __pyx_t_2.base_path = __pyx_v_base_path;
+  __pyx_t_1 = __pyx_f_9adios_mpi_select_method(__pyx_v_group, __pyx_v_method, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -4574,7 +4645,7 @@ static PyObject *__pyx_pf_9adios_mpi_30select_method(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":363
+/* "adios_mpi.pyx":367
  * ## ====================
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
@@ -4593,7 +4664,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adios2nptype", 0);
 
-  /* "adios_mpi.pyx":364
+  /* "adios_mpi.pyx":368
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None             # <<<<<<<<<<<<<<
@@ -4603,7 +4674,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyObject*)Py_None);
 
-  /* "adios_mpi.pyx":389
+  /* "adios_mpi.pyx":393
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4612,7 +4683,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
   switch (__pyx_v_t) {
 
-    /* "adios_mpi.pyx":365
+    /* "adios_mpi.pyx":369
  * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -4621,24 +4692,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_byte:
 
-    /* "adios_mpi.pyx":366
+    /* "adios_mpi.pyx":370
  *     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 = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 370; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":367
+    /* "adios_mpi.pyx":371
  *     if t == adios_byte:
  *         ntype = np.int8
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -4647,24 +4718,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_short:
 
-    /* "adios_mpi.pyx":368
+    /* "adios_mpi.pyx":372
  *         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 = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 372; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":369
+    /* "adios_mpi.pyx":373
  *     elif t == adios_short:
  *         ntype = np.int16
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -4673,24 +4744,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_integer:
 
-    /* "adios_mpi.pyx":370
+    /* "adios_mpi.pyx":374
  *         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 = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 374; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":371
+    /* "adios_mpi.pyx":375
  *     elif t == adios_integer:
  *         ntype = np.int32
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -4699,24 +4770,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_long:
 
-    /* "adios_mpi.pyx":372
+    /* "adios_mpi.pyx":376
  *         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 = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __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 = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 376; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":373
+    /* "adios_mpi.pyx":377
  *     elif t == adios_long:
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -4725,24 +4796,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_byte:
 
-    /* "adios_mpi.pyx":374
+    /* "adios_mpi.pyx":378
  *         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 = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 378; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":375
+    /* "adios_mpi.pyx":379
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -4751,24 +4822,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_short:
 
-    /* "adios_mpi.pyx":376
+    /* "adios_mpi.pyx":380
  *         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 = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 380; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":377
+    /* "adios_mpi.pyx":381
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -4777,24 +4848,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_integer:
 
-    /* "adios_mpi.pyx":378
+    /* "adios_mpi.pyx":382
  *         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 = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 382; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":379
+    /* "adios_mpi.pyx":383
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -4803,24 +4874,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_unsigned_long:
 
-    /* "adios_mpi.pyx":380
+    /* "adios_mpi.pyx":384
  *         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 = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __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 = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 384; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":381
+    /* "adios_mpi.pyx":385
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -4829,24 +4900,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_real:
 
-    /* "adios_mpi.pyx":382
+    /* "adios_mpi.pyx":386
  *         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 = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 386; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":383
+    /* "adios_mpi.pyx":387
  *     elif t == adios_real:
  *         ntype = np.float32
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -4855,24 +4926,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_double:
 
-    /* "adios_mpi.pyx":384
+    /* "adios_mpi.pyx":388
  *         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 = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 388; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":385
+    /* "adios_mpi.pyx":389
  *     elif t == adios_double:
  *         ntype = np.float64
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -4881,24 +4952,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_long_double:
 
-    /* "adios_mpi.pyx":386
+    /* "adios_mpi.pyx":390
  *         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 = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 390; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios_mpi.pyx":387
+    /* "adios_mpi.pyx":391
  *     elif t == adios_long_double:
  *         ntype = np.float128
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -4907,24 +4978,24 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_complex:
 
-    /* "adios_mpi.pyx":388
+    /* "adios_mpi.pyx":392
  *         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 = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __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 = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 392; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios_mpi.pyx":389
+    /* "adios_mpi.pyx":393
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4933,25 +5004,25 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
  */
     case adios_double_complex:
 
-    /* "adios_mpi.pyx":390
+    /* "adios_mpi.pyx":394
  *         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 = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __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 = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 394; __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 %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
     default:
 
-    /* "adios_mpi.pyx":392
+    /* "adios_mpi.pyx":396
  *         ntype = np.complex128
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -4963,7 +5034,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
     break;
   }
 
-  /* "adios_mpi.pyx":394
+  /* "adios_mpi.pyx":398
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
@@ -4975,7 +5046,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":363
+  /* "adios_mpi.pyx":367
  * ## ====================
  * 
  * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
@@ -4996,7 +5067,7 @@ static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":396
+/* "adios_mpi.pyx":400
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -5017,16 +5088,16 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios_mpi.pyx":397
+  /* "adios_mpi.pyx":401
  * 
  * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fh);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fh);
@@ -5034,22 +5105,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":398
+  /* "adios_mpi.pyx":402
  * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)
  *     print '%15s : %d' % ('nvars', f.nvars)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __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 = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nvars);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nvars);
@@ -5057,30 +5128,30 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":399
+  /* "adios_mpi.pyx":403
  *     print '%15s : %lu' % ('fh', f.fh)
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(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_t_3 = __pyx_v_f->nvars;
   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->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __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 = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __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 = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_var_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_var_namelist);
@@ -5088,22 +5159,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":400
+  /* "adios_mpi.pyx":404
  *     print '%15s : %d' % ('nvars', f.nvars)
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __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 = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nattrs);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nattrs);
@@ -5111,30 +5182,30 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":401
+  /* "adios_mpi.pyx":405
  *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(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_t_3 = __pyx_v_f->nattrs;
   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->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __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 = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __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 = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_attr_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_attr_namelist);
@@ -5142,22 +5213,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":402
+  /* "adios_mpi.pyx":406
  *     print '%15s : %d' % ('nattrs', f.nattrs)
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __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 = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_current_step);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_current_step);
@@ -5165,22 +5236,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":403
+  /* "adios_mpi.pyx":407
  *     print '%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)])
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_last_step);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_last_step);
@@ -5188,22 +5259,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":404
+  /* "adios_mpi.pyx":408
  *     print '%15s : %d' % ('current_step', f.current_step)
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __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 = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_path);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_path);
@@ -5211,22 +5282,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":405
+  /* "adios_mpi.pyx":409
  *     print '%15s : %d' % ('last_step', f.last_step)
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('version', f.version)
  *     print '%15s : %lu' % ('file_size', f.file_size)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_endianness);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_endianness);
@@ -5234,22 +5305,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":406
+  /* "adios_mpi.pyx":410
  *     print '%15s : %s' % ('path', f.path)
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)             # <<<<<<<<<<<<<<
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __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 = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_version);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_version);
@@ -5257,22 +5328,22 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":407
+  /* "adios_mpi.pyx":411
  *     print '%15s : %d' % ('endianness', f.endianness)
  *     print '%15s : %d' % ('version', f.version)
  *     print '%15s : %lu' % ('file_size', f.file_size)             # <<<<<<<<<<<<<<
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_file_size);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_file_size);
@@ -5280,13 +5351,13 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":396
+  /* "adios_mpi.pyx":400
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -5308,7 +5379,7 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":409
+/* "adios_mpi.pyx":413
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -5329,16 +5400,16 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios_mpi.pyx":410
+  /* "adios_mpi.pyx":414
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  *     print '%15s : %d' % ('varid', v.varid)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __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 = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_varid);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_varid);
@@ -5346,22 +5417,22 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":411
+  /* "adios_mpi.pyx":415
  * cdef printvar(ADIOS_VARINFO * v):
  *     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_9adios_mpi_adios2nptype(__pyx_v_v->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2nptype(__pyx_v_v->type)); 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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_type);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_type);
@@ -5369,22 +5440,22 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":412
+  /* "adios_mpi.pyx":416
  *     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' % ('nsteps', v.nsteps)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __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 = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_ndim);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ndim);
@@ -5392,30 +5463,30 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":413
+  /* "adios_mpi.pyx":417
  *     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' % ('nsteps', v.nsteps)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __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_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __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 = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __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 = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_dims);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_dims);
@@ -5423,22 +5494,22 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":414
+  /* "adios_mpi.pyx":418
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
  *     print '%15s : %d' % ('nsteps', v.nsteps)             # <<<<<<<<<<<<<<
  * 
- * ## ====================
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nsteps);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nsteps);
@@ -5446,13 +5517,13 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":409
+  /* "adios_mpi.pyx":413
  *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -5475,74 +5546,1015 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
 }
 
 /* "adios_mpi.pyx":420
- * ## ====================
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI.Comm comm = MPI.COMM_WORLD,
- *                 char * parameters = ""):
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):             # <<<<<<<<<<<<<<
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
  */
 
-static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_init *__pyx_optional_args) {
-  ADIOS_READ_METHOD __pyx_v_method = __pyx_k__4;
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k__5;
-  char *__pyx_v_parameters = ((char *)__pyx_k__6);
-  PyObject *__pyx_r = NULL;
+static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_v_name) {
+  ADIOS_READ_METHOD __pyx_v_method;
+  ADIOS_READ_METHOD __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read_init", 0);
-  if (__pyx_optional_args) {
-    if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_method = __pyx_optional_args->method;
-      if (__pyx_optional_args->__pyx_n > 1) {
-        __pyx_v_comm = __pyx_optional_args->comm;
-        if (__pyx_optional_args->__pyx_n > 2) {
-          __pyx_v_parameters = __pyx_optional_args->parameters;
-        }
-      }
-    }
-  }
+  __Pyx_RefNannySetupContext("str2adiosreadmethod", 0);
 
-  /* "adios_mpi.pyx":423
- *                 MPI.Comm comm = MPI.COMM_WORLD,
- *                 char * parameters = ""):
- *     return adios_read_init_method (method, comm.ob_mpi, parameters)             # <<<<<<<<<<<<<<
- * 
+  /* "adios_mpi.pyx":421
  * 
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+ *     if (name == "BP"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_read_init_method(__pyx_v_method, __pyx_v_comm->ob_mpi, __pyx_v_parameters)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __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_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
 
-  /* "adios_mpi.pyx":420
- * ## ====================
- * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI.Comm comm = MPI.COMM_WORLD,
- *                 char * parameters = ""):
+    /* "adios_mpi.pyx":422
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP             # <<<<<<<<<<<<<<
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
  */
+    __pyx_v_method = ADIOS_READ_METHOD_BP;
+    goto __pyx_L3;
+  }
 
-  /* function exit code */
+  /* "adios_mpi.pyx":423
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios_mpi.pyx":424
+ *         method = ADIOS_READ_METHOD_BP
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE             # <<<<<<<<<<<<<<
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_BP_AGGREGATE;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":425
+ *     elif (name == "BP_AGGREGATE"):
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):
+ */
+  __pyx_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "adios_mpi.pyx":426
+ *         method = ADIOS_READ_METHOD_BP_AGGREGATE
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES             # <<<<<<<<<<<<<<
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_DATASPACES;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":427
+ *     elif (name == "DATASPACES"):
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios_mpi.pyx":428
+ *         method = ADIOS_READ_METHOD_DATASPACES
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES             # <<<<<<<<<<<<<<
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_DIMES;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":429
+ *     elif (name == "DIMES"):
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):
+ */
+  __pyx_t_1 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "adios_mpi.pyx":430
+ *         method = ADIOS_READ_METHOD_DIMES
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH             # <<<<<<<<<<<<<<
+ *     elif (name == "ICEE"):
+ *         method = ADIOS_READ_METHOD_ICEE
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_FLEXPATH;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":431
+ *     elif (name == "FLEXPATH"):
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_ICEE
+ *     else:
+ */
+  __pyx_t_2 = (__Pyx_PyBytes_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "adios_mpi.pyx":432
+ *         method = ADIOS_READ_METHOD_FLEXPATH
+ *     elif (name == "ICEE"):
+ *         method = ADIOS_READ_METHOD_ICEE             # <<<<<<<<<<<<<<
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_ICEE;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "adios_mpi.pyx":434
+ *         method = ADIOS_READ_METHOD_ICEE
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'             # <<<<<<<<<<<<<<
+ *         method = ADIOS_READ_METHOD_BP
+ * 
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_kp_s_WARN_Invalid_read_method_name);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_WARN_Invalid_read_method_name);
+    __Pyx_GIVEREF(__pyx_kp_s_WARN_Invalid_read_method_name);
+    __Pyx_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_name);
+    __Pyx_GIVEREF(__pyx_v_name);
+    __Pyx_INCREF(__pyx_kp_s_Use_default_BP_method);
+    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_s_Use_default_BP_method);
+    __Pyx_GIVEREF(__pyx_kp_s_Use_default_BP_method);
+    if (__Pyx_Print(0, __pyx_t_3, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "adios_mpi.pyx":435
+ *     else:
+ *         print '[WARN] Invalid read method name:', name, '. Use default BP method'
+ *         method = ADIOS_READ_METHOD_BP             # <<<<<<<<<<<<<<
+ * 
+ *     return method
+ */
+    __pyx_v_method = ADIOS_READ_METHOD_BP;
+  }
+  __pyx_L3:;
+
+  /* "adios_mpi.pyx":437
+ *         method = ADIOS_READ_METHOD_BP
+ * 
+ *     return method             # <<<<<<<<<<<<<<
+ * 
+ * cpdef np2adiostype(type nptype):
+ */
+  __pyx_r = __pyx_v_method;
+  goto __pyx_L0;
+
+  /* "adios_mpi.pyx":420
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
+ * 
+ * cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):             # <<<<<<<<<<<<<<
+ *     if (name == "BP"):
+ *         method = ADIOS_READ_METHOD_BP
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_WriteUnraisable("adios_mpi.str2adiosreadmethod", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":439
+ *     return method
+ * 
+ * cpdef np2adiostype(type nptype):             # <<<<<<<<<<<<<<
+ *     """ Ignored: int_, intc, intp """
+ * 
+ */
+
+static PyObject *__pyx_pw_9adios_mpi_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyObject *__pyx_v_nptype, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_atype = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("np2adiostype", 0);
+
+  /* "adios_mpi.pyx":442
+ *     """ Ignored: int_, intc, intp """
+ * 
+ *     cdef atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
+ * 
+ *     if (nptype == np.bool_):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_atype = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":444
+ *     cdef atype = DATATYPE.unknown
+ * 
+ *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":445
+ * 
+ *     if (nptype == np.bool_):
+ *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_integer); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":446
+ *     if (nptype == np.bool_):
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __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 = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":447
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); 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(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":448
+ *     elif (nptype == np.int8):
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __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 = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":449
+ *         atype = DATATYPE.byte
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":450
+ *     elif (nptype == np.int16):
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __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 = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":451
+ *         atype = DATATYPE.short
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":452
+ *     elif (nptype == np.int32):
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __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 = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":453
+ *         atype = DATATYPE.integer
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":454
+ *     elif (nptype == np.int64):
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __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 = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":455
+ *         atype = DATATYPE.long
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":456
+ *     elif (nptype == np.uint8):
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __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 = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":457
+ *         atype = DATATYPE.unsigned_byte
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":458
+ *     elif (nptype == np.uint16):
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __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 = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":459
+ *         atype = DATATYPE.unsigned_short
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":460
+ *     elif (nptype == np.uint32):
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __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 = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__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_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":461
+ *         atype = DATATYPE.unsigned_integer
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":462
+ *     elif (nptype == np.uint64):
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":463
+ *         atype = DATATYPE.unsigned_long
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":464
+ *     elif (nptype == np.float_):
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":465
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":466
+ *     elif (nptype == np.float16):
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __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 = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":467
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":468
+ *     elif (nptype == np.float32):
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __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 = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":469
+ *         atype = DATATYPE.real
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":470
+ *     elif (nptype == np.float64):
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":471
+ *         atype = DATATYPE.double
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":472
+ *     elif (nptype == np.complex_):
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":473
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":474
+ *     elif (nptype == np.complex64):
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __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 = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":475
+ *         atype = DATATYPE.complex
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
+ *     elif (nptype == np.str_):
+ *         atype = DATATYPE.byte
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); 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 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
+    __pyx_t_2 = 0;
+    goto __pyx_L3;
+  }
+
+  /* "adios_mpi.pyx":476
+ *     elif (nptype == np.complex128):
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):             # <<<<<<<<<<<<<<
+ *         atype = DATATYPE.byte
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_str); 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_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":477
+ *         atype = DATATYPE.double_complex
+ *     elif (nptype == np.str_):
+ *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
+ * 
+ *     return atype
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "adios_mpi.pyx":479
+ *         atype = DATATYPE.byte
+ * 
+ *     return atype             # <<<<<<<<<<<<<<
+ * 
+ * ## ====================
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_atype);
+  __pyx_r = __pyx_v_atype;
+  goto __pyx_L0;
+
+  /* "adios_mpi.pyx":439
+ *     return method
+ * 
+ * cpdef np2adiostype(type nptype):             # <<<<<<<<<<<<<<
+ *     """ Ignored: int_, intc, intp """
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios_mpi.np2adiostype", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_atype);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  ADIOS_READ_METHOD __pyx_v_method;
+static PyObject *__pyx_pw_9adios_mpi_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype); /*proto*/
+static char __pyx_doc_9adios_mpi_32np2adiostype[] = " Ignored: int_, intc, intp ";
+static PyObject *__pyx_pw_9adios_mpi_33np2adiostype(PyObject *__pyx_self, PyObject *__pyx_v_nptype) {
+  CYTHON_UNUSED int __pyx_lineno = 0;
+  CYTHON_UNUSED const char *__pyx_filename = NULL;
+  CYTHON_UNUSED int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("np2adiostype (wrapper)", 0);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), (&PyType_Type), 1, "nptype", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_9adios_mpi_32np2adiostype(__pyx_self, ((PyObject*)__pyx_v_nptype));
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_32np2adiostype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nptype) {
+  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("np2adiostype", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_9adios_mpi_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.np2adiostype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":486
+ * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI.Comm comm = MPI.COMM_WORLD,
+ *                     char * parameters = ""):
+ */
+
+static PyObject *__pyx_pw_9adios_mpi_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_init *__pyx_optional_args) {
+  char *__pyx_v_method_name = ((char *)__pyx_k_BP);
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k__5;
+  char *__pyx_v_parameters = ((char *)__pyx_k__4);
+  PyObject *__pyx_v_method = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  ADIOS_READ_METHOD __pyx_t_3;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read_init", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_method_name = __pyx_optional_args->method_name;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_comm = __pyx_optional_args->comm;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_parameters = __pyx_optional_args->parameters;
+        }
+      }
+    }
+  }
+
+  /* "adios_mpi.pyx":489
+ *                     MPI.Comm comm = MPI.COMM_WORLD,
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ *     return adios_read_init_method (method, comm.ob_mpi, parameters)
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); 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_t_2 = PyInt_FromLong(__pyx_f_9adios_mpi_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":490
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)
+ *     return adios_read_init_method (method, comm.ob_mpi, parameters)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_3 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = adios_read_init_method(__pyx_t_3, __pyx_v_comm->ob_mpi, __pyx_v_parameters);
+  goto __pyx_L0;
+
+  /* "adios_mpi.pyx":486
+ * 
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI.Comm comm = MPI.COMM_WORLD,
+ *                     char * parameters = ""):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_WriteUnraisable("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_method);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_35read_init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_method_name;
   struct PyMPICommObject *__pyx_v_comm = 0;
   char *__pyx_v_parameters;
   int __pyx_lineno = 0;
@@ -5552,7 +6564,7 @@ static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read_init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_comm,&__pyx_n_s_parameters,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_name,&__pyx_n_s_comm,&__pyx_n_s_parameters,0};
     PyObject* values[3] = {0,0,0};
     values[1] = (PyObject *)__pyx_k__5;
     if (unlikely(__pyx_kwds)) {
@@ -5569,7 +6581,7 @@ static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[0] = value; kw_args--; }
         }
         case  1:
@@ -5584,7 +6596,7 @@ static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5596,27 +6608,27 @@ static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject
       }
     }
     if (values[0]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[0])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__4;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
     __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
     if (values[2]) {
-      __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __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 = 488; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_parameters = ((char *)__pyx_k__6);
+      __pyx_v_parameters = ((char *)__pyx_k__4);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.read_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 = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_9adios_mpi_32read_init(__pyx_self, __pyx_v_method, __pyx_v_comm, __pyx_v_parameters);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_9adios_mpi_34read_init(__pyx_self, __pyx_v_method_name, __pyx_v_comm, __pyx_v_parameters);
 
   /* function exit code */
   goto __pyx_L0;
@@ -5627,29 +6639,31 @@ static PyObject *__pyx_pw_9adios_mpi_33read_init(PyObject *__pyx_self, PyObject
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_32read_init(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method, struct PyMPICommObject *__pyx_v_comm, char *__pyx_v_parameters) {
+static PyObject *__pyx_pf_9adios_mpi_34read_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name, struct PyMPICommObject *__pyx_v_comm, char *__pyx_v_parameters) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   struct __pyx_opt_args_9adios_mpi_read_init __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_init", 0);
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 3;
-  __pyx_t_2.method = __pyx_v_method;
+  __pyx_t_2.method_name = __pyx_v_method_name;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_2.parameters = __pyx_v_parameters;
-  __pyx_t_1 = __pyx_f_9adios_mpi_read_init(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_9adios_mpi_read_init(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5658,67 +6672,83 @@ static PyObject *__pyx_pf_9adios_mpi_32read_init(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":426
+/* "adios_mpi.pyx":494
  * 
- * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 
-static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_9adios_mpi_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_finalize *__pyx_optional_args) {
-  ADIOS_READ_METHOD __pyx_v_method = __pyx_k__7;
-  PyObject *__pyx_r = NULL;
+static PyObject *__pyx_pw_9adios_mpi_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_read_finalize *__pyx_optional_args) {
+  char *__pyx_v_method_name = ((char *)__pyx_k_BP);
+  PyObject *__pyx_v_method = 0;
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  ADIOS_READ_METHOD __pyx_t_3;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_finalize", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_method = __pyx_optional_args->method;
+      __pyx_v_method_name = __pyx_optional_args->method_name;
     }
   }
 
-  /* "adios_mpi.pyx":427
+  /* "adios_mpi.pyx":495
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):
+ *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyInt_FromLong(__pyx_f_9adios_mpi_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":496
+ * cpdef int read_finalize(char * method_name = "BP"):
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)             # <<<<<<<<<<<<<<
  * 
- * cdef class file:
+ * """ Python class for ADIOS_FILE structure """
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(adios_read_finalize_method(__pyx_v_method)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_3 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = adios_read_finalize_method(__pyx_t_3);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":426
- * 
+  /* "adios_mpi.pyx":494
  * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ * """ Call adios_read_finalize_method """
+ * cpdef int read_finalize(char * method_name = "BP"):             # <<<<<<<<<<<<<<
+ *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (method)
- * 
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_WriteUnraisable("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_XDECREF(__pyx_v_method);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  ADIOS_READ_METHOD __pyx_v_method;
+static PyObject *__pyx_pw_9adios_mpi_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_37read_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_method_name;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -5726,7 +6756,7 @@ static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObj
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read_finalize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_name,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -5740,12 +6770,12 @@ static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObj
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5755,47 +6785,49 @@ static PyObject *__pyx_pw_9adios_mpi_35read_finalize(PyObject *__pyx_self, PyObj
       }
     }
     if (values[0]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[0])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__7;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, 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_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_9adios_mpi_34read_finalize(__pyx_self, __pyx_v_method);
+  __pyx_r = __pyx_pf_9adios_mpi_36read_finalize(__pyx_self, __pyx_v_method_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_34read_finalize(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_READ_METHOD __pyx_v_method) {
+static PyObject *__pyx_pf_9adios_mpi_36read_finalize(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_method_name) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   struct __pyx_opt_args_9adios_mpi_read_finalize __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_finalize", 0);
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
-  __pyx_t_2.method = __pyx_v_method;
-  __pyx_t_1 = __pyx_f_9adios_mpi_read_finalize(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2.method_name = __pyx_v_method_name;
+  __pyx_t_1 = __pyx_f_9adios_mpi_read_finalize(0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5804,20 +6836,23 @@ static PyObject *__pyx_pf_9adios_mpi_34read_finalize(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":446
- *     cpdef public dict attr
+/* "adios_mpi.pyx":519
  * 
+ *     """ Initialization. Call adios_read_open and populate public members """
  *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+ *                  char * method_name = "BP",
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
  */
 
 /* Python wrapper */
 static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_fname;
-  ADIOS_READ_METHOD __pyx_v_method;
+  char *__pyx_v_method_name;
   struct PyMPICommObject *__pyx_v_comm = 0;
+  PyObject *__pyx_v_is_stream = 0;
+  ADIOS_LOCKMODE __pyx_v_lock_mode;
+  float __pyx_v_timeout_sec;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -5825,13 +6860,25 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method,&__pyx_n_s_comm,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = (PyObject *)__pyx_k__8;
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method_name,&__pyx_n_s_comm,&__pyx_n_s_is_stream,&__pyx_n_s_lock_mode,&__pyx_n_s_timeout_sec,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    values[2] = (PyObject *)__pyx_k__6;
+
+    /* "adios_mpi.pyx":522
+ *                  char * method_name = "BP",
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
+ *                  is_stream = False,             # <<<<<<<<<<<<<<
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+ *                  float timeout_sec = 0.0):
+ */
+    values[3] = ((PyObject *)Py_False);
     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);
@@ -5845,7 +6892,7 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_name);
           if (value) { values[1] = value; kw_args--; }
         }
         case  2:
@@ -5853,12 +6900,30 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[2] = value; kw_args--; }
         }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_is_stream);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lock_mode);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_timeout_sec);
+          if (value) { values[5] = 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 = 446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_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);
@@ -5866,24 +6931,43 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
         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 = 446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fname = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_fname) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     if (values[1]) {
-      __pyx_v_method = ((ADIOS_READ_METHOD)PyInt_AsLong(values[1])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_method_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_method_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
-      __pyx_v_method = __pyx_k__9;
+      __pyx_v_method_name = ((char *)__pyx_k_BP);
     }
     __pyx_v_comm = ((struct PyMPICommObject *)values[2]);
+    __pyx_v_is_stream = values[3];
+    if (values[4]) {
+      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)PyInt_AsLong(values[4])); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_lock_mode = __pyx_k__7;
+    }
+    if (values[5]) {
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_timeout_sec = ((float)0.0);
+    }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.file.__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 = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_9adios_mpi_4file___init__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method, __pyx_v_comm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_9adios_mpi_4file___init__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method_name, __pyx_v_comm, __pyx_v_is_stream, __pyx_v_lock_mode, __pyx_v_timeout_sec);
+
+  /* "adios_mpi.pyx":519
+ * 
+ *     """ Initialization. Call adios_read_open and populate public members """
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  char * method_name = "BP",
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
+ */
 
   /* function exit code */
   goto __pyx_L0;
@@ -5894,40 +6978,43 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
   return __pyx_r;
 }
 
-static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, char *__pyx_v_fname, ADIOS_READ_METHOD __pyx_v_method, struct PyMPICommObject *__pyx_v_comm) {
+static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, char *__pyx_v_fname, char *__pyx_v_method_name, struct PyMPICommObject *__pyx_v_comm, PyObject *__pyx_v_is_stream, ADIOS_LOCKMODE __pyx_v_lock_mode, float __pyx_v_timeout_sec) {
+  PyObject *__pyx_v_method = 0;
   PyObject *__pyx_v_varname = 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_2;
+  PyObject *__pyx_t_3 = NULL;
+  ADIOS_READ_METHOD __pyx_t_4;
   int __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
+  uint64_t __pyx_t_6;
+  int __pyx_t_7;
+  Py_ssize_t __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":449
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+  /* "adios_mpi.pyx":525
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+ *                  float timeout_sec = 0.0):
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  *         self.var = {}
  *         self.attr = {}
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios_mpi.pyx":450
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+  /* "adios_mpi.pyx":526
+ *                  float timeout_sec = 0.0):
  *         self.fp = NULL
  *         self.var = {}             # <<<<<<<<<<<<<<
  *         self.attr = {}
- * 
+ *         self.is_stream = is_stream
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); 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_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->var);
@@ -5935,14 +7022,14 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->var = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":451
+  /* "adios_mpi.pyx":527
  *         self.fp = NULL
  *         self.var = {}
  *         self.attr = {}             # <<<<<<<<<<<<<<
- * 
- *         self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
+ *         self.is_stream = is_stream
+ *         cdef method = str2adiosreadmethod(method_name)
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); 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_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attr);
@@ -5950,18 +7037,77 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":453
- *         self.attr = {}
+  /* "adios_mpi.pyx":528
+ *         self.var = {}
+ *         self.attr = {}
+ *         self.is_stream = is_stream             # <<<<<<<<<<<<<<
+ *         cdef method = str2adiosreadmethod(method_name)
+ * 
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->is_stream = __pyx_t_2;
+
+  /* "adios_mpi.pyx":529
+ *         self.attr = {}
+ *         self.is_stream = is_stream
+ *         cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
+ * 
+ *         if (is_stream):
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_method_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = PyInt_FromLong(__pyx_f_9adios_mpi_str2adiosreadmethod(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_method = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "adios_mpi.pyx":531
+ *         cdef method = str2adiosreadmethod(method_name)
+ * 
+ *         if (is_stream):             # <<<<<<<<<<<<<<
+ *             self.fp = adios_read_open(fname, method, comm.ob_mpi,
+ *                                       lock_mode, timeout_sec)
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_2) {
+
+    /* "adios_mpi.pyx":532
+ * 
+ *         if (is_stream):
+ *             self.fp = adios_read_open(fname, method, comm.ob_mpi,             # <<<<<<<<<<<<<<
+ *                                       lock_mode, timeout_sec)
+ *         else:
+ */
+    __pyx_t_4 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "adios_mpi.pyx":533
+ *         if (is_stream):
+ *             self.fp = adios_read_open(fname, method, comm.ob_mpi,
+ *                                       lock_mode, timeout_sec)             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
+ */
+    __pyx_v_self->fp = adios_read_open(__pyx_v_fname, __pyx_t_4, __pyx_v_comm->ob_mpi, __pyx_v_lock_mode, __pyx_v_timeout_sec);
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "adios_mpi.pyx":535
+ *                                       lock_mode, timeout_sec)
+ *         else:
+ *             self.fp = adios_read_open_file(fname, method, comm.ob_mpi)             # <<<<<<<<<<<<<<
  * 
- *         self.fp = adios_read_open_file(fname, method, comm.ob_mpi)             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
- * 
  */
-  __pyx_v_self->fp = adios_read_open_file(__pyx_v_fname, __pyx_v_method, __pyx_v_comm->ob_mpi);
+    __pyx_t_4 = ((ADIOS_READ_METHOD)PyInt_AsLong(__pyx_v_method)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_self->fp = adios_read_open_file(__pyx_v_fname, __pyx_t_4, __pyx_v_comm->ob_mpi);
+  }
+  __pyx_L3:;
 
-  /* "adios_mpi.pyx":454
+  /* "adios_mpi.pyx":537
+ *             self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
  * 
- *         self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  * 
  *         self.name = fname.split('/')[-1]  ## basename
@@ -5970,168 +7116,176 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":456
+  /* "adios_mpi.pyx":539
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __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, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GIVEREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
-  __pyx_v_self->name = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":457
+  /* "adios_mpi.pyx":540
  * 
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars             # <<<<<<<<<<<<<<
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  */
-  __pyx_t_3 = __pyx_v_self->fp->nvars;
-  __pyx_v_self->nvars = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->nvars;
+  __pyx_v_self->nvars = __pyx_t_5;
 
-  /* "adios_mpi.pyx":458
+  /* "adios_mpi.pyx":541
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs             # <<<<<<<<<<<<<<
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  */
-  __pyx_t_3 = __pyx_v_self->fp->nattrs;
-  __pyx_v_self->nattrs = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->nattrs;
+  __pyx_v_self->nattrs = __pyx_t_5;
 
-  /* "adios_mpi.pyx":459
+  /* "adios_mpi.pyx":542
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  */
-  __pyx_t_3 = __pyx_v_self->fp->current_step;
-  __pyx_v_self->current_step = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->current_step;
+  __pyx_v_self->current_step = __pyx_t_5;
 
-  /* "adios_mpi.pyx":460
+  /* "adios_mpi.pyx":543
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  */
-  __pyx_t_3 = __pyx_v_self->fp->last_step;
-  __pyx_v_self->last_step = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->last_step;
+  __pyx_v_self->last_step = __pyx_t_5;
 
-  /* "adios_mpi.pyx":461
+  /* "adios_mpi.pyx":544
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness             # <<<<<<<<<<<<<<
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size
  */
-  __pyx_t_3 = __pyx_v_self->fp->endianness;
-  __pyx_v_self->endianness = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->endianness;
+  __pyx_v_self->endianness = __pyx_t_5;
 
-  /* "adios_mpi.pyx":462
+  /* "adios_mpi.pyx":545
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version             # <<<<<<<<<<<<<<
  *         self.file_size = self.fp.file_size
  * 
  */
-  __pyx_t_3 = __pyx_v_self->fp->version;
-  __pyx_v_self->version = __pyx_t_3;
+  __pyx_t_5 = __pyx_v_self->fp->version;
+  __pyx_v_self->version = __pyx_t_5;
 
-  /* "adios_mpi.pyx":463
+  /* "adios_mpi.pyx":546
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size             # <<<<<<<<<<<<<<
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  */
-  __pyx_t_4 = __pyx_v_self->fp->file_size;
-  __pyx_v_self->file_size = __pyx_t_4;
+  __pyx_t_6 = __pyx_v_self->fp->file_size;
+  __pyx_v_self->file_size = __pyx_t_6;
 
-  /* "adios_mpi.pyx":465
+  /* "adios_mpi.pyx":548
  *         self.file_size = self.fp.file_size
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
  *             self.var[varname] = var(self, varname)
  * 
  */
-  __pyx_t_2 = PyList_New(0); 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_t_3 = __pyx_v_self->nvars;
-  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->var_namelist[__pyx_v_i])); 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 (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = __pyx_v_self->nvars;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_5; __pyx_t_7+=1) {
+    __pyx_v_i = __pyx_t_7;
+    __pyx_t_3 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __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 = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
-  __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
-    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
+    if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) 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 = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __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 = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
-    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_1);
+    __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":466
+    /* "adios_mpi.pyx":549
  * 
  *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  *             self.var[varname] = var(self, varname)             # <<<<<<<<<<<<<<
  * 
  *     def __del__(self):
  */
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_2, 0, ((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_2, 1, __pyx_v_varname);
+    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
-    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_var)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_var)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_9);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(__pyx_v_self->var == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->var, __pyx_v_varname, __pyx_t_7) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    if (unlikely(PyDict_SetItem(__pyx_v_self->var, __pyx_v_varname, __pyx_t_9) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+    /* "adios_mpi.pyx":548
+ *         self.file_size = self.fp.file_size
+ * 
+ *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
+ *             self.var[varname] = var(self, varname)
+ * 
+ */
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":446
- *     cpdef public dict attr
+  /* "adios_mpi.pyx":519
  * 
+ *     """ Initialization. Call adios_read_open and populate public members """
  *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+ *                  char * method_name = "BP",
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
  */
 
   /* function exit code */
@@ -6139,17 +7293,18 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("adios_mpi.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_method);
   __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":468
+/* "adios_mpi.pyx":551
  *             self.var[varname] = var(self, varname)
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -6179,18 +7334,18 @@ static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios_mpi.pyx":469
+  /* "adios_mpi.pyx":552
  * 
  *     def __del__(self):
  *             self.close()             # <<<<<<<<<<<<<<
  * 
- *     cpdef close(self):
+ *     """ Call adios_read_close """
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":468
+  /* "adios_mpi.pyx":551
  *             self.var[varname] = var(self, varname)
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -6211,9 +7366,9 @@ static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":471
- *             self.close()
+/* "adios_mpi.pyx":555
  * 
+ *     """ Call adios_read_close """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
@@ -6225,6 +7380,8 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -6233,12 +7390,29 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   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 = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 555; __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_9adios_mpi_4file_5close)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6247,8 +7421,8 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":472
- * 
+  /* "adios_mpi.pyx":556
+ *     """ Call adios_read_close """
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  *         adios_read_close(self.fp)
@@ -6258,12 +7432,12 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":473
+  /* "adios_mpi.pyx":557
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
@@ -6272,18 +7446,18 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
  */
   adios_read_close(__pyx_v_self->fp);
 
-  /* "adios_mpi.pyx":474
+  /* "adios_mpi.pyx":558
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  * 
- *     cpdef printself(self):
+ *     """ Print self """
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios_mpi.pyx":471
- *             self.close()
+  /* "adios_mpi.pyx":555
  * 
+ *     """ Call adios_read_close """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
@@ -6295,6 +7469,8 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios_mpi.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -6325,7 +7501,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4close(struct __pyx_obj_9adios_mpi_fi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6342,9 +7518,9 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4close(struct __pyx_obj_9adios_mpi_fi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":476
- *         self.fp = NULL
+/* "adios_mpi.pyx":561
  * 
+ *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
@@ -6356,6 +7532,8 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -6364,12 +7542,29 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   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 = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 561; __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_9adios_mpi_4file_7printself)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6378,8 +7573,8 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":477
- * 
+  /* "adios_mpi.pyx":562
+ *     """ Print self """
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  *         print '=== AdiosFile ==='
@@ -6389,30 +7584,30 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":478
+  /* "adios_mpi.pyx":563
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  *         printfile(self.fp)
  */
-  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":479
+  /* "adios_mpi.pyx":564
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)             # <<<<<<<<<<<<<<
  *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __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 = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
@@ -6420,26 +7615,26 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":480
+  /* "adios_mpi.pyx":565
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
- * cdef class var:
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":476
- *         self.fp = NULL
+  /* "adios_mpi.pyx":561
  * 
+ *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
@@ -6451,37 +7646,263 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("adios_mpi.file.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_9adios_mpi_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_4file_6printself(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_4file_6printself(struct __pyx_obj_9adios_mpi_file *__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 = __pyx_f_9adios_mpi_4file_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios_mpi.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":567
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+
+static PyObject *__pyx_pw_9adios_mpi_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_4file_advance *__pyx_optional_args) {
+  int __pyx_v_last = ((int)0);
+  float __pyx_v_timeout_sec = ((float)0.0);
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  Py_ssize_t __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("advance", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_last = __pyx_optional_args->last;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_timeout_sec = __pyx_optional_args->timeout_sec;
+      }
+    }
+  }
+  /* 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_advance); 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_9adios_mpi_4file_9advance)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); 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_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
+      __pyx_t_7 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+        if (likely(__pyx_t_6)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+          __Pyx_INCREF(__pyx_t_6);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
+          __pyx_t_7 = 1;
+        }
+      }
+      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      if (__pyx_t_6) {
+        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = NULL;
+      }
+      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_4);
+      __pyx_t_3 = 0;
+      __pyx_t_4 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); 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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __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_mpi.pyx":568
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):
+ *         return adios_advance_step(self.fp, last, timeout_sec)             # <<<<<<<<<<<<<<
+ * 
+ * """ Python class for ADIOS_VARINFO structure """
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_int(adios_advance_step(__pyx_v_self->fp, __pyx_v_last, __pyx_v_timeout_sec)); 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_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "adios_mpi.pyx":567
+ *         printfile(self.fp)
+ * 
+ *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
+ *         return adios_advance_step(self.fp, last, timeout_sec)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("adios_mpi.file.advance", __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_9adios_mpi_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_9adios_mpi_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
-  __pyx_r = __pyx_pf_9adios_mpi_4file_6printself(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_9advance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_last;
+  float __pyx_v_timeout_sec;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("advance (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_last,&__pyx_n_s_timeout_sec,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 (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_last);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_timeout_sec);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 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;
+      }
+    }
+    if (values[0]) {
+      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_last = ((int)0);
+    }
+    if (values[1]) {
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_timeout_sec = ((float)0.0);
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("advance", 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_mpi.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_9adios_mpi_4file_8advance(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self), __pyx_v_last, __pyx_v_timeout_sec);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_4file_6printself(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_8advance(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_v_last, float __pyx_v_timeout_sec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_9adios_mpi_4file_advance __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_RefNannySetupContext("advance", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.last = __pyx_v_last;
+  __pyx_t_2.timeout_sec = __pyx_v_timeout_sec;
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_file->advance(__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;
@@ -6490,7 +7911,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6printself(struct __pyx_obj_9adios_mp
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios_mpi.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6498,7 +7919,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6printself(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":434
+/* "adios_mpi.pyx":504
  * 
  *     """ Public Memeber """
  *     cpdef public bytes name             # <<<<<<<<<<<<<<
@@ -6556,7 +7977,7 @@ static int __pyx_pf_9adios_mpi_4file_4name_2__set__(struct __pyx_obj_9adios_mpi_
   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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -6606,7 +8027,7 @@ static int __pyx_pf_9adios_mpi_4file_4name_4__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":435
+/* "adios_mpi.pyx":505
  *     """ Public Memeber """
  *     cpdef public bytes name
  *     cpdef public int nvars             # <<<<<<<<<<<<<<
@@ -6636,7 +8057,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adio
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6674,7 +8095,7 @@ static int __pyx_pf_9adios_mpi_4file_5nvars_2__set__(struct __pyx_obj_9adios_mpi
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__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_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nvars = __pyx_t_1;
 
   /* function exit code */
@@ -6688,7 +8109,7 @@ static int __pyx_pf_9adios_mpi_4file_5nvars_2__set__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":436
+/* "adios_mpi.pyx":506
  *     cpdef public bytes name
  *     cpdef public int nvars
  *     cpdef public int nattrs             # <<<<<<<<<<<<<<
@@ -6718,7 +8139,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6756,7 +8177,7 @@ static int __pyx_pf_9adios_mpi_4file_6nattrs_2__set__(struct __pyx_obj_9adios_mp
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__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_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nattrs = __pyx_t_1;
 
   /* function exit code */
@@ -6770,7 +8191,7 @@ static int __pyx_pf_9adios_mpi_4file_6nattrs_2__set__(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":437
+/* "adios_mpi.pyx":507
  *     cpdef public int nvars
  *     cpdef public int nattrs
  *     cpdef public int current_step             # <<<<<<<<<<<<<<
@@ -6800,7 +8221,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6838,7 +8259,7 @@ static int __pyx_pf_9adios_mpi_4file_12current_step_2__set__(struct __pyx_obj_9a
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->current_step = __pyx_t_1;
 
   /* function exit code */
@@ -6852,7 +8273,7 @@ static int __pyx_pf_9adios_mpi_4file_12current_step_2__set__(struct __pyx_obj_9a
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":438
+/* "adios_mpi.pyx":508
  *     cpdef public int nattrs
  *     cpdef public int current_step
  *     cpdef public int last_step             # <<<<<<<<<<<<<<
@@ -6882,7 +8303,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6920,7 +8341,7 @@ static int __pyx_pf_9adios_mpi_4file_9last_step_2__set__(struct __pyx_obj_9adios
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->last_step = __pyx_t_1;
 
   /* function exit code */
@@ -6934,7 +8355,7 @@ static int __pyx_pf_9adios_mpi_4file_9last_step_2__set__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":439
+/* "adios_mpi.pyx":509
  *     cpdef public int current_step
  *     cpdef public int last_step
  *     cpdef public int endianness             # <<<<<<<<<<<<<<
@@ -6964,7 +8385,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7002,7 +8423,7 @@ static int __pyx_pf_9adios_mpi_4file_10endianness_2__set__(struct __pyx_obj_9adi
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->endianness = __pyx_t_1;
 
   /* function exit code */
@@ -7016,7 +8437,7 @@ static int __pyx_pf_9adios_mpi_4file_10endianness_2__set__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":440
+/* "adios_mpi.pyx":510
  *     cpdef public int last_step
  *     cpdef public int endianness
  *     cpdef public int version             # <<<<<<<<<<<<<<
@@ -7046,7 +8467,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9ad
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7084,7 +8505,7 @@ static int __pyx_pf_9adios_mpi_4file_7version_2__set__(struct __pyx_obj_9adios_m
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->version = __pyx_t_1;
 
   /* function exit code */
@@ -7098,7 +8519,7 @@ static int __pyx_pf_9adios_mpi_4file_7version_2__set__(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":441
+/* "adios_mpi.pyx":511
  *     cpdef public int endianness
  *     cpdef public int version
  *     cpdef public int file_size             # <<<<<<<<<<<<<<
@@ -7128,7 +8549,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7166,7 +8587,7 @@ static int __pyx_pf_9adios_mpi_4file_9file_size_2__set__(struct __pyx_obj_9adios
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->file_size = __pyx_t_1;
 
   /* function exit code */
@@ -7180,7 +8601,7 @@ static int __pyx_pf_9adios_mpi_4file_9file_size_2__set__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":443
+/* "adios_mpi.pyx":513
  *     cpdef public int file_size
  * 
  *     cpdef public dict var             # <<<<<<<<<<<<<<
@@ -7238,7 +8659,7 @@ static int __pyx_pf_9adios_mpi_4file_3var_2__set__(struct __pyx_obj_9adios_mpi_f
   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 %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -7288,12 +8709,12 @@ static int __pyx_pf_9adios_mpi_4file_3var_4__del__(struct __pyx_obj_9adios_mpi_f
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":444
+/* "adios_mpi.pyx":514
  * 
  *     cpdef public dict var
  *     cpdef public dict attr             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, char * fname,
+ *     cpdef public bint is_stream
  */
 
 /* Python wrapper */
@@ -7346,7 +8767,7 @@ static int __pyx_pf_9adios_mpi_4file_4attr_2__set__(struct __pyx_obj_9adios_mpi_
   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 %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -7396,9 +8817,91 @@ static int __pyx_pf_9adios_mpi_4file_4attr_4__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":495
- *     cpdef public int nsteps
+/* "adios_mpi.pyx":516
+ *     cpdef public dict attr
+ * 
+ *     cpdef public bint is_stream             # <<<<<<<<<<<<<<
+ * 
+ *     """ Initialization. Call adios_read_open and populate public members """
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_4file_9is_stream_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_9is_stream_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9is_stream___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_4file_9is_stream___get__(struct __pyx_obj_9adios_mpi_file *__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 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); 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;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.file.is_stream.__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_9adios_mpi_4file_9is_stream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_9is_stream_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9is_stream_2__set__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_9adios_mpi_4file_9is_stream_2__set__(struct __pyx_obj_9adios_mpi_file *__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_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->is_stream = __pyx_t_1;
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios_mpi.file.is_stream.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":585
  * 
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
  *         self.file = file
  *         self.vp = NULL
@@ -7435,11 +8938,11 @@ static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *
         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 = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __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 = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7448,17 +8951,17 @@ static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_file = ((struct __pyx_obj_9adios_mpi_file *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __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 = 585; __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 = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.__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_9adios_mpi_file, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_3var___init__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -7483,8 +8986,8 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":496
- * 
+  /* "adios_mpi.pyx":586
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):
  *         self.file = file             # <<<<<<<<<<<<<<
  *         self.vp = NULL
@@ -7496,7 +8999,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios_mpi.pyx":497
+  /* "adios_mpi.pyx":587
  *     def __init__(self, file file, char * name):
  *         self.file = file
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -7505,7 +9008,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios_mpi.pyx":499
+  /* "adios_mpi.pyx":589
  *         self.vp = NULL
  * 
  *         assert self.file.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -7516,12 +9019,12 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->file->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":500
+  /* "adios_mpi.pyx":590
  * 
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, name)             # <<<<<<<<<<<<<<
@@ -7530,7 +9033,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_v_name);
 
-  /* "adios_mpi.pyx":501
+  /* "adios_mpi.pyx":591
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, name)
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -7541,19 +9044,19 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":503
+  /* "adios_mpi.pyx":593
  *         assert self.vp != NULL, 'Not a valid var'
  * 
  *         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 = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
@@ -7561,7 +9064,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":504
+  /* "adios_mpi.pyx":594
  * 
  *         self.name = name
  *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
@@ -7571,14 +9074,14 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_2 = __pyx_v_self->vp->varid;
   __pyx_v_self->varid = __pyx_t_2;
 
-  /* "adios_mpi.pyx":505
+  /* "adios_mpi.pyx":595
  *         self.name = name
  *         self.varid = self.vp.varid
  *         self.type = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2nptype(__pyx_v_self->vp->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2nptype(__pyx_v_self->vp->type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->type);
@@ -7586,7 +9089,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_v_self->type = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":506
+  /* "adios_mpi.pyx":596
  *         self.varid = self.vp.varid
  *         self.type = adios2nptype(self.vp.type)
  *         self.ndim = self.vp.ndim             # <<<<<<<<<<<<<<
@@ -7596,24 +9099,24 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_2 = __pyx_v_self->vp->ndim;
   __pyx_v_self->ndim = __pyx_t_2;
 
-  /* "adios_mpi.pyx":507
+  /* "adios_mpi.pyx":597
  *         self.type = adios2nptype(self.vp.type)
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *         self.nsteps = self.vp.nsteps
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __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_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __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 = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_4);
@@ -7622,7 +9125,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":508
+  /* "adios_mpi.pyx":598
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -7632,9 +9135,9 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_2 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_2;
 
-  /* "adios_mpi.pyx":495
- *     cpdef public int nsteps
+  /* "adios_mpi.pyx":585
  * 
+ *     """ Initialization. Call adios_inq_var and populate public members """
  *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
  *         self.file = file
  *         self.vp = NULL
@@ -7653,7 +9156,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":510
+/* "adios_mpi.pyx":600
  *         self.nsteps = self.vp.nsteps
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -7683,18 +9186,18 @@ static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_v
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios_mpi.pyx":511
+  /* "adios_mpi.pyx":601
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
- *     cpdef close(self):
+ *     """ Call adios_free_varinfo """
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); 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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":510
+  /* "adios_mpi.pyx":600
  *         self.nsteps = self.vp.nsteps
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -7715,9 +9218,9 @@ static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":513
- *         self.close()
+/* "adios_mpi.pyx":604
  * 
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
@@ -7729,6 +9232,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -7737,12 +9242,29 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   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 = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 604; __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_9adios_mpi_3var_5close)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -7751,8 +9273,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":514
- * 
+  /* "adios_mpi.pyx":605
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):
  *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
  *         adios_free_varinfo(self.vp)
@@ -7762,12 +9284,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_var);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":515
+  /* "adios_mpi.pyx":606
  *     cpdef close(self):
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
@@ -7776,18 +9298,18 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
  */
   adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios_mpi.pyx":516
+  /* "adios_mpi.pyx":607
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
  *         self.vp = NULL             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
+ *     """ Call adios_schedule_read and adios_perform_reads """
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios_mpi.pyx":513
- *         self.close()
+  /* "adios_mpi.pyx":604
  * 
+ *     """ Call adios_free_varinfo """
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
@@ -7799,6 +9321,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios_mpi.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -7829,7 +9353,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7846,12 +9370,12 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":518
- *         self.vp = NULL
+/* "adios_mpi.pyx":610
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 
 static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
@@ -7873,12 +9397,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   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;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
   int __pyx_t_10;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -7902,133 +9426,163 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   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 = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 610; __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_9adios_mpi_3var_7read)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(4); 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_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      __pyx_t_5 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+          __pyx_t_5 = 1;
+        }
+      }
+      __pyx_t_6 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      if (__pyx_t_4) {
+        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = NULL;
+      }
       __Pyx_INCREF(__pyx_v_offset);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_offset);
+      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
       __Pyx_GIVEREF(__pyx_v_offset);
       __Pyx_INCREF(__pyx_v_count);
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_count);
+      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
       __Pyx_GIVEREF(__pyx_v_count);
       __Pyx_INCREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_from_steps);
+      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_from_steps);
       __Pyx_GIVEREF(__pyx_v_from_steps);
       __Pyx_INCREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_nsteps);
+      PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_nsteps);
       __Pyx_GIVEREF(__pyx_v_nsteps);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __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_mpi.pyx":519
- * 
+  /* "adios_mpi.pyx":611
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
  *         assert self.type is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
- * 
+ *         if (self.nsteps > 0):
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = (__pyx_v_self->type != ((PyObject*)Py_None));
-    if (unlikely(!(__pyx_t_4 != 0))) {
+    __pyx_t_7 = (__pyx_v_self->type != ((PyObject*)Py_None));
+    if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":520
+  /* "adios_mpi.pyx":612
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'             # <<<<<<<<<<<<<<
+ *         if (self.nsteps > 0):             # <<<<<<<<<<<<<<
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ * 
+ */
+  __pyx_t_7 = ((__pyx_v_self->nsteps > 0) != 0);
+  if (__pyx_t_7) {
+
+    /* "adios_mpi.pyx":613
+ *         assert self.type is not None, 'Data type is not supported yet'
+ *         if (self.nsteps > 0):
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'             # <<<<<<<<<<<<<<
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_4)) {
-      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Step_index_is_out_of_range);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (unlikely(!__pyx_t_7)) {
+        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Step_index_is_out_of_range);
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
     }
+    #endif
+    goto __pyx_L3;
   }
-  #endif
+  __pyx_L3:;
 
-  /* "adios_mpi.pyx":522
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+  /* "adios_mpi.pyx":615
+ *             assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
  * 
  *         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_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __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_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
+    __pyx_v_i = __pyx_t_9;
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_v_lshape = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_v_lshape = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":523
+  /* "adios_mpi.pyx":616
  * 
  *         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_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); 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_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __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 = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_lshape);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lshape);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lshape);
   __Pyx_GIVEREF(__pyx_v_lshape);
-  __pyx_t_1 = PyDict_New(); 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_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __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 = 523; __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_1, __pyx_n_s_dtype, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __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_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_8);
-  __pyx_t_8 = 0;
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":526
+  /* "adios_mpi.pyx":619
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -8037,83 +9591,98 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   if (unlikely(__pyx_v_offset == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":527
+    /* "adios_mpi.pyx":620
  *         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 = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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 = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_1);
-    __pyx_t_1 = 0;
+    __pyx_t_3 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_3)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_3);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
+      }
+    }
+    if (__pyx_t_3) {
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else {
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":528
+    /* "adios_mpi.pyx":621
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    goto __pyx_L5;
+    goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "adios_mpi.pyx":530
+    /* "adios_mpi.pyx":623
  *             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 = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __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 = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __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 = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(__pyx_v_offset);
-    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_offset);
+    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_offset);
     __Pyx_GIVEREF(__pyx_v_offset);
-    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __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 = 530; __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_2, __pyx_n_s_dtype, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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 = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_6);
+    __pyx_t_6 = 0;
   }
-  __pyx_L5:;
+  __pyx_L6:;
 
-  /* "adios_mpi.pyx":533
+  /* "adios_mpi.pyx":626
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -8122,66 +9691,66 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   if (unlikely(__pyx_v_count == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":534
+    /* "adios_mpi.pyx":627
  *         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 = 534; __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 = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
-    goto __pyx_L6;
+    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_6);
+    __pyx_t_6 = 0;
+    goto __pyx_L7;
   }
   /*else*/ {
 
-    /* "adios_mpi.pyx":536
+    /* "adios_mpi.pyx":629
  *             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 = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __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 = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_count);
-    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_count);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_count);
     __Pyx_GIVEREF(__pyx_v_count);
-    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_DECREF(__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 = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
-    __pyx_t_3 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_2);
+    __pyx_t_2 = 0;
   }
-  __pyx_L6:;
+  __pyx_L7:;
 
-  /* "adios_mpi.pyx":538
+  /* "adios_mpi.pyx":631
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'             # <<<<<<<<<<<<<<
@@ -8192,12 +9761,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npoffset->nd) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Offset_dimension_mismatch);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":539
+  /* "adios_mpi.pyx":632
  * 
  *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
  *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
@@ -8208,12 +9777,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npcount->nd) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Count_dimension_mismatch);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":540
+  /* "adios_mpi.pyx":633
  *         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.'             # <<<<<<<<<<<<<<
@@ -8222,97 +9791,112 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __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 = 540; __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_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __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 = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __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 = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (unlikely(!__pyx_t_4)) {
+    __pyx_t_1 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_v_npcount), Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_all); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
+      }
+    }
+    if (__pyx_t_6) {
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else {
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (unlikely(!__pyx_t_7)) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Count_is_larger_than_shape);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":542
+  /* "adios_mpi.pyx":635
  *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
  * 
  *         shape = list(npcount)             # <<<<<<<<<<<<<<
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
-  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_npcount));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_npcount));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_v_shape = ((PyObject*)__pyx_t_3);
-  __pyx_t_3 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_shape = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":543
+  /* "adios_mpi.pyx":636
  * 
  *         shape = list(npcount)
  *         if (nsteps > 1):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)
  */
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (__pyx_t_4) {
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":544
+    /* "adios_mpi.pyx":637
  *         shape = list(npcount)
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)
  * 
  */
-    __pyx_t_10 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
+    __pyx_t_10 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L8;
   }
-  __pyx_L7:;
+  __pyx_L8:;
 
-  /* "adios_mpi.pyx":545
+  /* "adios_mpi.pyx":638
  *         if (nsteps > 1):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.type)             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __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 = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_shape);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->type)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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 = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_var = ((PyArrayObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->type)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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 = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_var = ((PyArrayObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":548
+  /* "adios_mpi.pyx":641
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)             # <<<<<<<<<<<<<<
@@ -8321,18 +9905,18 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   __pyx_v_sel = adios_selection_boundingbox(__pyx_v_self->vp->ndim, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data));
 
-  /* "adios_mpi.pyx":550
+  /* "adios_mpi.pyx":643
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_6, ((void *)__pyx_v_var->data));
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_8, __pyx_t_9, ((void *)__pyx_v_var->data));
 
-  /* "adios_mpi.pyx":551
+  /* "adios_mpi.pyx":644
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -8341,7 +9925,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios_mpi.pyx":553
+  /* "adios_mpi.pyx":646
  *         adios_perform_reads(self.file.fp, 1)
  * 
  *         return var             # <<<<<<<<<<<<<<
@@ -8353,12 +9937,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":518
- *         self.vp = NULL
+  /* "adios_mpi.pyx":610
  * 
+ *     """ Call adios_schedule_read and adios_perform_reads """
  *     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):             # <<<<<<<<<<<<<<
  *         assert self.type is not None, 'Data type is not supported yet'
- *         assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+ *         if (self.nsteps > 0):
  */
 
   /* function exit code */
@@ -8366,8 +9950,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __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_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("adios_mpi.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -8437,7 +10021,7 @@ static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject
         }
       }
       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 = 518; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -8456,14 +10040,14 @@ static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.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 = 518; __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 = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __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 = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_9adios_mpi_3var_6read(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), __pyx_v_offset, __pyx_v_count, __pyx_v_from_steps, __pyx_v_nsteps);
 
   /* function exit code */
@@ -8490,7 +10074,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6read(struct __pyx_obj_9adios_mpi_var
   __pyx_t_2.count = __pyx_v_count;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__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 = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read(__pyx_v_self, 1, &__pyx_t_2); 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_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8507,7 +10091,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6read(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":556
+/* "adios_mpi.pyx":649
  * 
  *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -8521,6 +10105,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -8529,12 +10115,29 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   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 = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 649; __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_9adios_mpi_3var_9printself)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -8543,7 +10146,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":557
+  /* "adios_mpi.pyx":650
  *     """ Print self """
  *     cpdef printself(self):
  *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
@@ -8554,30 +10157,30 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_variable);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":558
+  /* "adios_mpi.pyx":651
  *     cpdef printself(self):
  *         assert self.vp != NULL, 'Not an open variable'
  *         print '=== AdiosVariable ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  */
-  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":559
+  /* "adios_mpi.pyx":652
  *         assert self.vp != NULL, 'Not an open variable'
  *         print '=== AdiosVariable ==='
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  *         printvar(self.vp)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __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 = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_vp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_vp);
@@ -8585,22 +10188,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":560
+  /* "adios_mpi.pyx":653
  *         print '=== AdiosVariable ==='
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)             # <<<<<<<<<<<<<<
  *         printvar(self.vp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __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 = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
@@ -8608,24 +10211,24 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":561
+  /* "adios_mpi.pyx":654
  *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
  *         print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
  *         printvar(self.vp)             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":556
+  /* "adios_mpi.pyx":649
  * 
  *     """ Print self """
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -8639,6 +10242,8 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("adios_mpi.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -8669,7 +10274,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_8printself(struct __pyx_obj_9adios_mpi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_9adios_mpi_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8686,7 +10291,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_8printself(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":488
+/* "adios_mpi.pyx":577
  * 
  *     """ Public Memeber """
  *     cpdef public bytes name             # <<<<<<<<<<<<<<
@@ -8744,7 +10349,7 @@ static int __pyx_pf_9adios_mpi_3var_4name_2__set__(struct __pyx_obj_9adios_mpi_v
   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 %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -8794,7 +10399,7 @@ static int __pyx_pf_9adios_mpi_3var_4name_4__del__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":489
+/* "adios_mpi.pyx":578
  *     """ Public Memeber """
  *     cpdef public bytes name
  *     cpdef public int varid             # <<<<<<<<<<<<<<
@@ -8824,7 +10429,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8862,7 +10467,7 @@ static int __pyx_pf_9adios_mpi_3var_5varid_2__set__(struct __pyx_obj_9adios_mpi_
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__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_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->varid = __pyx_t_1;
 
   /* function exit code */
@@ -8876,7 +10481,7 @@ static int __pyx_pf_9adios_mpi_3var_5varid_2__set__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":490
+/* "adios_mpi.pyx":579
  *     cpdef public bytes name
  *     cpdef public int varid
  *     cpdef public type type             # <<<<<<<<<<<<<<
@@ -8934,7 +10539,7 @@ static int __pyx_pf_9adios_mpi_3var_4type_2__set__(struct __pyx_obj_9adios_mpi_v
   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 %.16s, got %.200s", "type", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyType_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -8984,7 +10589,7 @@ static int __pyx_pf_9adios_mpi_3var_4type_4__del__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":491
+/* "adios_mpi.pyx":580
  *     cpdef public int varid
  *     cpdef public type type
  *     cpdef public int ndim             # <<<<<<<<<<<<<<
@@ -9014,7 +10619,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9052,7 +10657,7 @@ static int __pyx_pf_9adios_mpi_3var_4ndim_2__set__(struct __pyx_obj_9adios_mpi_v
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->ndim = __pyx_t_1;
 
   /* function exit code */
@@ -9066,7 +10671,7 @@ static int __pyx_pf_9adios_mpi_3var_4ndim_2__set__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":492
+/* "adios_mpi.pyx":581
  *     cpdef public type type
  *     cpdef public int ndim
  *     cpdef public tuple dims             # <<<<<<<<<<<<<<
@@ -9124,7 +10729,7 @@ static int __pyx_pf_9adios_mpi_3var_4dims_2__set__(struct __pyx_obj_9adios_mpi_v
   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 %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -9174,12 +10779,12 @@ static int __pyx_pf_9adios_mpi_3var_4dims_4__del__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":493
+/* "adios_mpi.pyx":582
  *     cpdef public int ndim
  *     cpdef public tuple dims
  *     cpdef public int nsteps             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, file file, char * name):
+ *     """ Initialization. Call adios_inq_var and populate public members """
  */
 
 /* Python wrapper */
@@ -9204,7 +10809,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adio
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9242,7 +10847,7 @@ static int __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(struct __pyx_obj_9adios_mpi
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->nsteps = __pyx_t_1;
 
   /* function exit code */
@@ -9256,7 +10861,7 @@ static int __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":567
+/* "adios_mpi.pyx":660
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -9265,9 +10870,9 @@ static int __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(struct __pyx_obj_9adios_mpi
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9adios_mpi_37readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_9adios_mpi_37readvar = {__Pyx_NAMESTR("readvar"), (PyCFunction)__pyx_pw_9adios_mpi_37readvar, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_9adios_mpi_37readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_39readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_9adios_mpi_39readvar = {"readvar", (PyCFunction)__pyx_pw_9adios_mpi_39readvar, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_9adios_mpi_39readvar(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_fname = 0;
   PyObject *__pyx_v_varname = 0;
   int __pyx_lineno = 0;
@@ -9296,11 +10901,11 @@ static PyObject *__pyx_pw_9adios_mpi_37readvar(PyObject *__pyx_self, PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -9313,20 +10918,20 @@ static PyObject *__pyx_pw_9adios_mpi_37readvar(PyObject *__pyx_self, PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_9adios_mpi_36readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
+  __pyx_r = __pyx_pf_9adios_mpi_38readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname) {
+static PyObject *__pyx_pf_9adios_mpi_38readvar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_varname) {
   struct __pyx_obj_9adios_mpi_file *__pyx_v_f = NULL;
   PyObject *__pyx_v_v = NULL;
   PyObject *__pyx_r = NULL;
@@ -9342,35 +10947,35 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios_mpi.pyx":568
+  /* "adios_mpi.pyx":661
  * 
  * def readvar(fname, varname):
  *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
  *     if not f.var.has_key(varname):
  *         print "No valid variable"
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_9adios_mpi_file *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":569
+  /* "adios_mpi.pyx":662
  * def readvar(fname, varname):
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     if not f.var.has_key(varname):             # <<<<<<<<<<<<<<
@@ -9379,22 +10984,22 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
  */
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_5 = PyDict_Contains(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_Contains(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
   if (__pyx_t_6) {
 
-    /* "adios_mpi.pyx":570
+    /* "adios_mpi.pyx":663
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     if not f.var.has_key(varname):
  *         print "No valid variable"             # <<<<<<<<<<<<<<
  *         return
  * 
  */
-    if (__Pyx_PrintOne(0, __pyx_kp_s_No_valid_variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PrintOne(0, __pyx_kp_s_No_valid_variable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "adios_mpi.pyx":571
+    /* "adios_mpi.pyx":664
  *     if not f.var.has_key(varname):
  *         print "No valid variable"
  *         return             # <<<<<<<<<<<<<<
@@ -9406,7 +11011,7 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":573
+  /* "adios_mpi.pyx":666
  *         return
  * 
  *     v = f.var[varname]             # <<<<<<<<<<<<<<
@@ -9415,14 +11020,14 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
  */
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_f->var, __pyx_v_varname); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_v = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":574
+  /* "adios_mpi.pyx":667
  * 
  *     v = f.var[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
@@ -9430,16 +11035,16 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
  * def bpls(fname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -9447,7 +11052,7 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":567
+  /* "adios_mpi.pyx":660
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -9471,7 +11076,7 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":576
+/* "adios_mpi.pyx":669
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -9480,20 +11085,20 @@ static PyObject *__pyx_pf_9adios_mpi_36readvar(CYTHON_UNUSED PyObject *__pyx_sel
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9adios_mpi_39bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/
-static PyMethodDef __pyx_mdef_9adios_mpi_39bpls = {__Pyx_NAMESTR("bpls"), (PyCFunction)__pyx_pw_9adios_mpi_39bpls, METH_O, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_9adios_mpi_39bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname) {
+static PyObject *__pyx_pw_9adios_mpi_41bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/
+static PyMethodDef __pyx_mdef_9adios_mpi_41bpls = {"bpls", (PyCFunction)__pyx_pw_9adios_mpi_41bpls, METH_O, 0};
+static PyObject *__pyx_pw_9adios_mpi_41bpls(PyObject *__pyx_self, PyObject *__pyx_v_fname) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("bpls (wrapper)", 0);
-  __pyx_r = __pyx_pf_9adios_mpi_38bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
+  __pyx_r = __pyx_pf_9adios_mpi_40bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
+static PyObject *__pyx_pf_9adios_mpi_40bpls(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
   struct __pyx_obj_9adios_mpi_file *__pyx_v_f = NULL;
   PyObject *__pyx_v_k = NULL;
   PyObject *__pyx_r = NULL;
@@ -9511,35 +11116,35 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios_mpi.pyx":577
+  /* "adios_mpi.pyx":670
  * 
  * def bpls(fname):
  *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_9adios_mpi_file)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_9adios_mpi_file *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":578
+  /* "adios_mpi.pyx":671
  * def bpls(fname):
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,             # <<<<<<<<<<<<<<
@@ -9547,40 +11152,40 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nvars, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nvars, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":579
+  /* "adios_mpi.pyx":672
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,             # <<<<<<<<<<<<<<
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nattrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nattrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":580
+  /* "adios_mpi.pyx":673
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_5 = 0;
   if (unlikely(__pyx_v_f->var == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_f->var, 1, __pyx_n_s_iterkeys, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_f->var, 1, __pyx_n_s_iterkeys, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_1);
   __pyx_t_1 = __pyx_t_3;
@@ -9588,34 +11193,34 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, NULL, NULL, __pyx_t_7);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
     __pyx_t_3 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_vars, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_vars, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":581
+  /* "adios_mpi.pyx":674
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_6 = 0;
   if (unlikely(__pyx_v_f->attr == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_f->attr, 1, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_f->attr, 1, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_2);
   __pyx_t_2 = __pyx_t_3;
@@ -9623,31 +11228,30 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_5, &__pyx_t_6, &__pyx_t_3, NULL, NULL, __pyx_t_7);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
     __pyx_t_3 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_attrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_attrs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":582
+  /* "adios_mpi.pyx":675
  *             'vars': tuple([ k for k in f.var.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),             # <<<<<<<<<<<<<<
  *             'file_size': f.file_size}
- * 
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
@@ -9655,24 +11259,23 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_2 = 0;
   __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_time_steps, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_time_steps, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":583
+  /* "adios_mpi.pyx":676
  *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
- * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_file_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_file_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":576
+  /* "adios_mpi.pyx":669
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -9696,7 +11299,7 @@ static PyObject *__pyx_pf_9adios_mpi_38bpls(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
  *         # experimental exception made for __getbuffer__ and __releasebuffer__
  *         # -- the details of this may change.
  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
@@ -9732,13 +11335,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
-  char *__pyx_t_9;
+  PyObject *__pyx_t_6 = NULL;
+  char *__pyx_t_7;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -9748,7 +11349,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_GIVEREF(__pyx_v_info->obj);
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":200
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":200
  *             # of flags
  * 
  *             if info == NULL: return             # <<<<<<<<<<<<<<
@@ -9761,7 +11362,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     goto __pyx_L0;
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
  * 
  *             cdef int copy_shape, i, ndim
  *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
@@ -9770,7 +11371,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_endian_detector = 1;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":204
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":204
  *             cdef int copy_shape, i, ndim
  *             cdef int endian_detector = 1
  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
@@ -9779,7 +11380,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":206
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":206
  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
  * 
  *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
@@ -9788,7 +11389,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
  *             ndim = PyArray_NDIM(self)
  * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
@@ -9798,7 +11399,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
  * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  *                 copy_shape = 1             # <<<<<<<<<<<<<<
@@ -9810,7 +11411,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":211
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":211
  *                 copy_shape = 1
  *             else:
  *                 copy_shape = 0             # <<<<<<<<<<<<<<
@@ -9821,83 +11422,87 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   __pyx_L4:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":213
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L6_bool_binop_done;
+  }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":214
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L6_bool_binop_done:;
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":215
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __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 = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":217
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L9_bool_binop_done;
+  }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":218
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L9_bool_binop_done:;
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":219
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __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 = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":221
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":221
  *                 raise ValueError(u"ndarray is not Fortran contiguous")
  * 
  *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
@@ -9906,7 +11511,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
  * 
  *             info.buf = PyArray_DATA(self)
  *             info.ndim = ndim             # <<<<<<<<<<<<<<
@@ -9915,17 +11520,17 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->ndim = __pyx_v_ndim;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":223
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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) {
+  __pyx_t_1 = (__pyx_v_copy_shape != 0);
+  if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":226
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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)             # <<<<<<<<<<<<<<
@@ -9934,7 +11539,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":227
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -9943,18 +11548,18 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":228
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_4 = __pyx_v_ndim;
+    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+      __pyx_v_i = __pyx_t_5;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":229
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":229
  *                 info.shape = info.strides + ndim
  *                 for i in range(ndim):
  *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
@@ -9963,7 +11568,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
       (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":230
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":230
  *                 for i in range(ndim):
  *                     info.strides[i] = PyArray_STRIDES(self)[i]
  *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
@@ -9972,11 +11577,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
       (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
     }
-    goto __pyx_L7;
+    goto __pyx_L11;
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":232
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":232
  *                     info.shape[i] = PyArray_DIMS(self)[i]
  *             else:
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
@@ -9985,7 +11590,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":233
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":233
  *             else:
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
@@ -9994,9 +11599,9 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
   }
-  __pyx_L7:;
+  __pyx_L11:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":234
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":234
  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
@@ -10005,7 +11610,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->suboffsets = NULL;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":235
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":235
  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
@@ -10014,7 +11619,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":236
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":236
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)
  *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
@@ -10023,7 +11628,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":239
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":239
  * 
  *             cdef int t
  *             cdef char* f = NULL             # <<<<<<<<<<<<<<
@@ -10032,19 +11637,19 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_f = NULL;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":240
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+  __pyx_t_3 = ((PyObject *)__pyx_v_self->descr);
+  __Pyx_INCREF(__pyx_t_3);
+  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
  *             cdef int offset
  * 
  *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
@@ -10053,7 +11658,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":246
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":246
  *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
  * 
  *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
@@ -10062,14 +11667,16 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
   __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;
+    goto __pyx_L15_bool_binop_done;
   }
+  __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L15_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":248
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":248
  *             if not hasfields and not copy_shape:
  *                 # do not call releasebuffer
  *                 info.obj = None             # <<<<<<<<<<<<<<
@@ -10081,11 +11688,11 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_GOTREF(__pyx_v_info->obj);
     __Pyx_DECREF(__pyx_v_info->obj);
     __pyx_v_info->obj = Py_None;
-    goto __pyx_L10;
+    goto __pyx_L14;
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":251
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":251
  *             else:
  *                 # need to call releasebuffer
  *                 info.obj = self             # <<<<<<<<<<<<<<
@@ -10098,9 +11705,9 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     __Pyx_DECREF(__pyx_v_info->obj);
     __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
   }
-  __pyx_L10:;
+  __pyx_L14:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":253
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":253
  *                 info.obj = self
  * 
  *             if not hasfields:             # <<<<<<<<<<<<<<
@@ -10110,66 +11717,69 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":254
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_4 = __pyx_v_descr->type_num;
+    __pyx_v_t = __pyx_t_4;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":255
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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);
+    __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0);
+    if (!__pyx_t_2) {
+      goto __pyx_L20_next_or;
     } else {
-      __pyx_t_2 = __pyx_t_1;
     }
+    __pyx_t_2 = (__pyx_v_little_endian != 0);
     if (!__pyx_t_2) {
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L19_bool_binop_done;
+    }
+    __pyx_L20_next_or:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":256
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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;
+    __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0);
+    if (__pyx_t_2) {
     } else {
       __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L19_bool_binop_done;
     }
+    __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0);
+    __pyx_t_1 = __pyx_t_2;
+    __pyx_L19_bool_binop_done:;
     if (__pyx_t_1) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":257
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, 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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __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 = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
  *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
@@ -10178,7 +11788,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     switch (__pyx_v_t) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":258
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":258
  *                     (descr.byteorder == c'<' and not little_endian)):
  *                     raise ValueError(u"Non-native byte order not supported")
  *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
@@ -10189,7 +11799,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_b;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
  *                     raise ValueError(u"Non-native byte order not supported")
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
@@ -10200,7 +11810,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_B;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":260
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":260
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
@@ -10211,7 +11821,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_h;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":261
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":261
  *                 elif t == NPY_UBYTE:       f = "B"
  *                 elif t == NPY_SHORT:       f = "h"
  *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
@@ -10222,7 +11832,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_H;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":262
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":262
  *                 elif t == NPY_SHORT:       f = "h"
  *                 elif t == NPY_USHORT:      f = "H"
  *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
@@ -10233,7 +11843,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_i;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":263
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":263
  *                 elif t == NPY_USHORT:      f = "H"
  *                 elif t == NPY_INT:         f = "i"
  *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
@@ -10244,7 +11854,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_I;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":264
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":264
  *                 elif t == NPY_INT:         f = "i"
  *                 elif t == NPY_UINT:        f = "I"
  *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
@@ -10255,7 +11865,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_l;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":265
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":265
  *                 elif t == NPY_UINT:        f = "I"
  *                 elif t == NPY_LONG:        f = "l"
  *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
@@ -10266,7 +11876,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_L;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":266
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":266
  *                 elif t == NPY_LONG:        f = "l"
  *                 elif t == NPY_ULONG:       f = "L"
  *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
@@ -10277,7 +11887,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_q;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":267
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":267
  *                 elif t == NPY_ULONG:       f = "L"
  *                 elif t == NPY_LONGLONG:    f = "q"
  *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
@@ -10288,7 +11898,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Q;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":268
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":268
  *                 elif t == NPY_LONGLONG:    f = "q"
  *                 elif t == NPY_ULONGLONG:   f = "Q"
  *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
@@ -10299,7 +11909,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_f;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":269
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":269
  *                 elif t == NPY_ULONGLONG:   f = "Q"
  *                 elif t == NPY_FLOAT:       f = "f"
  *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
@@ -10310,7 +11920,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_d;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":270
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":270
  *                 elif t == NPY_FLOAT:       f = "f"
  *                 elif t == NPY_DOUBLE:      f = "d"
  *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
@@ -10321,7 +11931,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_g;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":271
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":271
  *                 elif t == NPY_DOUBLE:      f = "d"
  *                 elif t == NPY_LONGDOUBLE:  f = "g"
  *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
@@ -10332,7 +11942,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zf;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":272
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":272
  *                 elif t == NPY_LONGDOUBLE:  f = "g"
  *                 elif t == NPY_CFLOAT:      f = "Zf"
  *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
@@ -10343,7 +11953,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zd;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":273
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":273
  *                 elif t == NPY_CFLOAT:      f = "Zf"
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
@@ -10354,7 +11964,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       __pyx_v_f = __pyx_k_Zg;
       break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":274
  *                 elif t == NPY_CDOUBLE:     f = "Zd"
  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
  *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
@@ -10366,33 +11976,33 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
       break;
       default:
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":276
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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 = __Pyx_PyInt_From_int(__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 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __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(__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, __pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_8);
-      __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __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(__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_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_6);
+      __pyx_t_6 = 0;
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       break;
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":277
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":277
  *                 else:
  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *                 info.format = f             # <<<<<<<<<<<<<<
@@ -10401,7 +12011,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->format = __pyx_v_f;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":278
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":278
  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *                 info.format = f
  *                 return             # <<<<<<<<<<<<<<
@@ -10413,7 +12023,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":280
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":280
  *                 return
  *             else:
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
@@ -10422,7 +12032,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_info->format = ((char *)malloc(255));
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":281
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":281
  *             else:
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
  *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
@@ -10431,7 +12041,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     (__pyx_v_info->format[0]) = '^';
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":282
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":282
  *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
  *                 info.format[0] = c'^' # Native data types, manual alignment
  *                 offset = 0             # <<<<<<<<<<<<<<
@@ -10440,17 +12050,17 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
     __pyx_v_offset = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":283
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":283
  *                 info.format[0] = c'^' # Native data types, manual alignment
  *                 offset = 0
  *                 f = _util_dtypestring(descr, info.format + 1,             # <<<<<<<<<<<<<<
  *                                       info.format + _buffer_format_string_len,
  *                                       &offset)
  */
-    __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;
+    __pyx_t_7 = __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_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_f = __pyx_t_7;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":286
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":286
  *                                       info.format + _buffer_format_string_len,
  *                                       &offset)
  *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
@@ -10460,7 +12070,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
     (__pyx_v_f[0]) = '\x00';
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":194
  *         # experimental exception made for __getbuffer__ and __releasebuffer__
  *         # -- the details of this may change.
  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
@@ -10472,8 +12082,8 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
@@ -10492,7 +12102,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
  *                 f[0] = c'\0' # Terminate format string
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
@@ -10516,7 +12126,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":289
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":289
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):
  *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
@@ -10526,7 +12136,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":290
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":290
  *         def __releasebuffer__(ndarray self, Py_buffer* info):
  *             if PyArray_HASFIELDS(self):
  *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
@@ -10538,7 +12148,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   }
   __pyx_L3:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":291
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":291
  *             if PyArray_HASFIELDS(self):
  *                 stdlib.free(info.format)
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
@@ -10548,7 +12158,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":292
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":292
  *                 stdlib.free(info.format)
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
@@ -10560,7 +12170,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   }
   __pyx_L4:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":288
  *                 f[0] = c'\0' # Terminate format string
  * 
  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
@@ -10572,7 +12182,7 @@ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_s
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
  * ctypedef npy_cdouble     complex_t
  * 
  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
@@ -10589,7 +12199,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":769
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":769
  * 
  * cdef inline object PyArray_MultiIterNew1(a):
  *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
@@ -10603,7 +12213,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":768
  * ctypedef npy_cdouble     complex_t
  * 
  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
@@ -10622,7 +12232,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
  *     return PyArray_MultiIterNew(1, <void*>a)
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
@@ -10639,7 +12249,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":772
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":772
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
@@ -10653,7 +12263,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":771
  *     return PyArray_MultiIterNew(1, <void*>a)
  * 
  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
@@ -10672,7 +12282,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
@@ -10689,7 +12299,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":775
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":775
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
@@ -10703,7 +12313,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":774
  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
  * 
  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
@@ -10722,7 +12332,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
@@ -10739,7 +12349,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":778
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":778
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
@@ -10753,7 +12363,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":777
  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
  * 
  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
@@ -10772,7 +12382,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
  * 
  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
@@ -10789,7 +12399,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":781
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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)             # <<<<<<<<<<<<<<
@@ -10803,7 +12413,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":780
  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
  * 
  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
@@ -10822,7 +12432,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":783
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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:             # <<<<<<<<<<<<<<
@@ -10847,16 +12457,14 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   int __pyx_t_5;
   int __pyx_t_6;
   int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
-  long __pyx_t_10;
-  char *__pyx_t_11;
+  long __pyx_t_8;
+  char *__pyx_t_9;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_util_dtypestring", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":790
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":790
  *     cdef int delta_offset
  *     cdef tuple i
  *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
@@ -10865,7 +12473,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
   __pyx_v_endian_detector = 1;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":791
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":791
  *     cdef tuple i
  *     cdef int endian_detector = 1
  *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
@@ -10874,7 +12482,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
  *     cdef tuple fields
  * 
  *     for childname in descr.names:             # <<<<<<<<<<<<<<
@@ -10896,7 +12504,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":795
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":795
  * 
  *     for childname in descr.names:
  *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
@@ -10909,7 +12517,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":796
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":796
  *     for childname in descr.names:
  *         fields = descr.fields[childname]
  *         child, new_offset = fields             # <<<<<<<<<<<<<<
@@ -10948,7 +12556,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":798
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":798
  *         child, new_offset = fields
  * 
  *         if (end - f) - <int>(new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
@@ -10965,70 +12573,73 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0);
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
  *         if (end - f) - <int>(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_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __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 = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":801
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_6 = ((__pyx_v_child->byteorder == '>') != 0);
-    if (__pyx_t_6) {
-      __pyx_t_7 = (__pyx_v_little_endian != 0);
+    __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0);
+    if (!__pyx_t_7) {
+      goto __pyx_L8_next_or;
     } else {
-      __pyx_t_7 = __pyx_t_6;
     }
+    __pyx_t_7 = (__pyx_v_little_endian != 0);
     if (!__pyx_t_7) {
+    } else {
+      __pyx_t_6 = __pyx_t_7;
+      goto __pyx_L7_bool_binop_done;
+    }
+    __pyx_L8_next_or:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":802
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_6 = ((__pyx_v_child->byteorder == '<') != 0);
-      if (__pyx_t_6) {
-        __pyx_t_8 = ((!(__pyx_v_little_endian != 0)) != 0);
-        __pyx_t_9 = __pyx_t_8;
-      } else {
-        __pyx_t_9 = __pyx_t_6;
-      }
-      __pyx_t_6 = __pyx_t_9;
+    __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
+    if (__pyx_t_7) {
     } else {
       __pyx_t_6 = __pyx_t_7;
+      goto __pyx_L7_bool_binop_done;
     }
+    __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0);
+    __pyx_t_6 = __pyx_t_7;
+    __pyx_L7_bool_binop_done:;
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __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 = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":813
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":813
  * 
  *         # Output padding bytes
  *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
@@ -11044,7 +12655,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (!__pyx_t_6) break;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":814
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":814
  *         # Output padding bytes
  *         while offset[0] < new_offset:
  *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
@@ -11053,7 +12664,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
       (__pyx_v_f[0]) = 120;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":815
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":815
  *         while offset[0] < new_offset:
  *             f[0] = 120 # "x"; pad byte
  *             f += 1             # <<<<<<<<<<<<<<
@@ -11062,28 +12673,28 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
       __pyx_v_f = (__pyx_v_f + 1);
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":816
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":816
  *             f[0] = 120 # "x"; pad byte
  *             f += 1
  *             offset[0] += 1             # <<<<<<<<<<<<<<
  * 
  *         offset[0] += child.itemsize
  */
-      __pyx_t_10 = 0;
-      (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1);
+      __pyx_t_8 = 0;
+      (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1);
     }
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
  *             offset[0] += 1
  * 
  *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
  * 
  *         if not PyDataType_HASFIELDS(child):
  */
-    __pyx_t_10 = 0;
-    (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize);
+    __pyx_t_8 = 0;
+    (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
  *         offset[0] += child.itemsize
  * 
  *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
@@ -11093,7 +12704,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
     __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
     if (__pyx_t_6) {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
  * 
  *         if not PyDataType_HASFIELDS(child):
  *             t = child.type_num             # <<<<<<<<<<<<<<
@@ -11105,7 +12716,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":822
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":822
  *         if not PyDataType_HASFIELDS(child):
  *             t = child.type_num
  *             if end - f < 5:             # <<<<<<<<<<<<<<
@@ -11115,21 +12726,21 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
       if (__pyx_t_6) {
 
-        /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
+        /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __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 = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":826
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":826
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
@@ -11144,10 +12755,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 98;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":827
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11162,10 +12773,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 66;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":828
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11180,10 +12791,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 104;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":829
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11198,10 +12809,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 72;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":830
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11216,10 +12827,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 105;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":831
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11234,10 +12845,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 73;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":832
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11252,10 +12863,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 108;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":833
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11270,10 +12881,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 76;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":834
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11288,10 +12899,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 113;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":835
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11306,10 +12917,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 81;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":836
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11324,10 +12935,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 102;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":837
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11342,10 +12953,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 100;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":838
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11360,10 +12971,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 103;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":839
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11380,10 +12991,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 102;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":840
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11400,10 +13011,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 100;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":841
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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             # <<<<<<<<<<<<<<
@@ -11420,10 +13031,10 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         (__pyx_v_f[0]) = 90;
         (__pyx_v_f[1]) = 103;
         __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":842
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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"             # <<<<<<<<<<<<<<
@@ -11438,11 +13049,11 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (__pyx_t_6) {
         (__pyx_v_f[0]) = 79;
-        goto __pyx_L11;
+        goto __pyx_L15;
       }
       /*else*/ {
 
-        /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":844
+        /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":844
  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
  *             else:
  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
@@ -11463,9 +13074,9 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_L11:;
+      __pyx_L15:;
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":845
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":845
  *             else:
  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  *             f += 1             # <<<<<<<<<<<<<<
@@ -11473,25 +13084,33 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # Cython ignores struct boundary information ("T{...}"),
  */
       __pyx_v_f = (__pyx_v_f + 1);
-      goto __pyx_L9;
+      goto __pyx_L13;
     }
     /*else*/ {
 
-      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":849
+      /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":849
  *             # Cython ignores struct boundary information ("T{...}"),
  *             # so don't output it
  *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
  *     return f
  * 
  */
-      __pyx_t_11 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_v_f = __pyx_t_11;
+      __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_f = __pyx_t_9;
     }
-    __pyx_L9:;
+    __pyx_L13:;
+
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":794
+ *     cdef tuple fields
+ * 
+ *     for childname in descr.names:             # <<<<<<<<<<<<<<
+ *         fields = descr.fields[childname]
+ *         child, new_offset = fields
+ */
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":850
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":850
  *             # so don't output it
  *             f = _util_dtypestring(child, f, end, offset)
  *     return f             # <<<<<<<<<<<<<<
@@ -11501,7 +13120,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   __pyx_r = __pyx_v_f;
   goto __pyx_L0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":783
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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:             # <<<<<<<<<<<<<<
@@ -11526,7 +13145,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   return __pyx_r;
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
  * 
  * 
  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
@@ -11541,7 +13160,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("set_array_base", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":968
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":968
  * cdef inline void set_array_base(ndarray arr, object base):
  *      cdef PyObject* baseptr
  *      if base is None:             # <<<<<<<<<<<<<<
@@ -11552,7 +13171,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":969
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":969
  *      cdef PyObject* baseptr
  *      if base is None:
  *          baseptr = NULL             # <<<<<<<<<<<<<<
@@ -11564,7 +13183,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":971
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":971
  *          baseptr = NULL
  *      else:
  *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
@@ -11573,7 +13192,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
     Py_INCREF(__pyx_v_base);
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":972
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":972
  *      else:
  *          Py_INCREF(base) # important to do this before decref below!
  *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
@@ -11584,7 +13203,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   }
   __pyx_L3:;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":973
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":973
  *          Py_INCREF(base) # important to do this before decref below!
  *          baseptr = <PyObject*>base
  *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
@@ -11593,7 +13212,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
   Py_XDECREF(__pyx_v_arr->base);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":974
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":974
  *          baseptr = <PyObject*>base
  *      Py_XDECREF(arr.base)
  *      arr.base = baseptr             # <<<<<<<<<<<<<<
@@ -11602,7 +13221,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
  */
   __pyx_v_arr->base = __pyx_v_baseptr;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
  * 
  * 
  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
@@ -11614,7 +13233,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+/* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
@@ -11628,7 +13247,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("get_array_base", 0);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":977
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":977
  * 
  * cdef inline object get_array_base(ndarray arr):
  *     if arr.base is NULL:             # <<<<<<<<<<<<<<
@@ -11638,7 +13257,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":978
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":978
  * cdef inline object get_array_base(ndarray arr):
  *     if arr.base is NULL:
  *         return None             # <<<<<<<<<<<<<<
@@ -11652,7 +13271,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   }
   /*else*/ {
 
-    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":980
+    /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":980
  *         return None
  *     else:
  *         return <object>arr.base             # <<<<<<<<<<<<<<
@@ -11663,7 +13282,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
     goto __pyx_L0;
   }
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
@@ -11871,10 +13490,25 @@ static int __pyx_setprop_9adios_mpi_4file_attr(PyObject *o, PyObject *v, CYTHON_
   }
 }
 
+static PyObject *__pyx_getprop_9adios_mpi_4file_is_stream(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_9is_stream_1__get__(o);
+}
+
+static int __pyx_setprop_9adios_mpi_4file_is_stream(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_9is_stream_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
 static PyMethodDef __pyx_methods_9adios_mpi_file[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_9adios_mpi_4file_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_9adios_mpi_4file_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_9adios_mpi_4file_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {"__del__", (PyCFunction)__pyx_pw_9adios_mpi_4file_3__del__, METH_NOARGS, 0},
+  {"close", (PyCFunction)__pyx_pw_9adios_mpi_4file_5close, METH_NOARGS, 0},
+  {"printself", (PyCFunction)__pyx_pw_9adios_mpi_4file_7printself, METH_NOARGS, 0},
+  {"advance", (PyCFunction)__pyx_pw_9adios_mpi_4file_9advance, METH_VARARGS|METH_KEYWORDS, 0},
   {0, 0, 0, 0}
 };
 
@@ -11889,12 +13523,13 @@ static struct PyGetSetDef __pyx_getsets_9adios_mpi_file[] = {
   {(char *)"file_size", __pyx_getprop_9adios_mpi_4file_file_size, __pyx_setprop_9adios_mpi_4file_file_size, 0, 0},
   {(char *)"var", __pyx_getprop_9adios_mpi_4file_var, __pyx_setprop_9adios_mpi_4file_var, 0, 0},
   {(char *)"attr", __pyx_getprop_9adios_mpi_4file_attr, __pyx_setprop_9adios_mpi_4file_attr, 0, 0},
+  {(char *)"is_stream", __pyx_getprop_9adios_mpi_4file_is_stream, __pyx_setprop_9adios_mpi_4file_is_stream, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
 static PyTypeObject __pyx_type_9adios_mpi_file = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios_mpi.file"), /*tp_name*/
+  "adios_mpi.file", /*tp_name*/
   sizeof(struct __pyx_obj_9adios_mpi_file), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_9adios_mpi_file, /*tp_dealloc*/
@@ -11917,7 +13552,7 @@ static PyTypeObject __pyx_type_9adios_mpi_file = {
   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*/
+  " Private Memeber ", /*tp_doc*/
   __pyx_tp_traverse_9adios_mpi_file, /*tp_traverse*/
   __pyx_tp_clear_9adios_mpi_file, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -11943,9 +13578,7 @@ static PyTypeObject __pyx_type_9adios_mpi_file = {
   0, /*tp_subclasses*/
   0, /*tp_weaklist*/
   0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
   0, /*tp_version_tag*/
-  #endif
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
@@ -12097,10 +13730,10 @@ static int __pyx_setprop_9adios_mpi_3var_nsteps(PyObject *o, PyObject *v, CYTHON
 }
 
 static PyMethodDef __pyx_methods_9adios_mpi_var[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_9adios_mpi_3var_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_9adios_mpi_3var_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_9adios_mpi_3var_7read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_9adios_mpi_3var_9printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {"__del__", (PyCFunction)__pyx_pw_9adios_mpi_3var_3__del__, METH_NOARGS, 0},
+  {"close", (PyCFunction)__pyx_pw_9adios_mpi_3var_5close, METH_NOARGS, 0},
+  {"read", (PyCFunction)__pyx_pw_9adios_mpi_3var_7read, METH_VARARGS|METH_KEYWORDS, 0},
+  {"printself", (PyCFunction)__pyx_pw_9adios_mpi_3var_9printself, METH_NOARGS, 0},
   {0, 0, 0, 0}
 };
 
@@ -12116,7 +13749,7 @@ static struct PyGetSetDef __pyx_getsets_9adios_mpi_var[] = {
 
 static PyTypeObject __pyx_type_9adios_mpi_var = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios_mpi.var"), /*tp_name*/
+  "adios_mpi.var", /*tp_name*/
   sizeof(struct __pyx_obj_9adios_mpi_var), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_9adios_mpi_var, /*tp_dealloc*/
@@ -12139,7 +13772,7 @@ static PyTypeObject __pyx_type_9adios_mpi_var = {
   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*/
+  " Private Memeber ", /*tp_doc*/
   __pyx_tp_traverse_9adios_mpi_var, /*tp_traverse*/
   __pyx_tp_clear_9adios_mpi_var, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -12165,33 +13798,32 @@ static PyTypeObject __pyx_type_9adios_mpi_var = {
   0, /*tp_subclasses*/
   0, /*tp_weaklist*/
   0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
   0, /*tp_version_tag*/
-  #endif
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
 };
 
 static PyMethodDef __pyx_methods[] = {
-  {__Pyx_NAMESTR("init"), (PyCFunction)__pyx_pw_9adios_mpi_1init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("open"), (PyCFunction)__pyx_pw_9adios_mpi_3open, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("set_group_size"), (PyCFunction)__pyx_pw_9adios_mpi_5set_group_size, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_9adios_mpi_7write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_int"), (PyCFunction)__pyx_pw_9adios_mpi_9write_int, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_long"), (PyCFunction)__pyx_pw_9adios_mpi_11write_long, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_float"), (PyCFunction)__pyx_pw_9adios_mpi_13write_float, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_9adios_mpi_15read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_9adios_mpi_17close, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("finalize"), (PyCFunction)__pyx_pw_9adios_mpi_19finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("init_noxml"), (PyCFunction)__pyx_pw_9adios_mpi_21init_noxml, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("allocate_buffer"), (PyCFunction)__pyx_pw_9adios_mpi_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("declare_group"), (PyCFunction)__pyx_pw_9adios_mpi_25declare_group, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_var"), (PyCFunction)__pyx_pw_9adios_mpi_27define_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_attribute"), (PyCFunction)__pyx_pw_9adios_mpi_29define_attribute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("select_method"), (PyCFunction)__pyx_pw_9adios_mpi_31select_method, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_init"), (PyCFunction)__pyx_pw_9adios_mpi_33read_init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read_finalize"), (PyCFunction)__pyx_pw_9adios_mpi_35read_finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {"init", (PyCFunction)__pyx_pw_9adios_mpi_1init, METH_VARARGS|METH_KEYWORDS, 0},
+  {"open", (PyCFunction)__pyx_pw_9adios_mpi_3open, METH_VARARGS|METH_KEYWORDS, 0},
+  {"set_group_size", (PyCFunction)__pyx_pw_9adios_mpi_5set_group_size, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write", (PyCFunction)__pyx_pw_9adios_mpi_7write, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_int", (PyCFunction)__pyx_pw_9adios_mpi_9write_int, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_long", (PyCFunction)__pyx_pw_9adios_mpi_11write_long, METH_VARARGS|METH_KEYWORDS, 0},
+  {"write_float", (PyCFunction)__pyx_pw_9adios_mpi_13write_float, METH_VARARGS|METH_KEYWORDS, 0},
+  {"read", (PyCFunction)__pyx_pw_9adios_mpi_15read, METH_VARARGS|METH_KEYWORDS, 0},
+  {"close", (PyCFunction)__pyx_pw_9adios_mpi_17close, METH_O, 0},
+  {"finalize", (PyCFunction)__pyx_pw_9adios_mpi_19finalize, METH_VARARGS|METH_KEYWORDS, 0},
+  {"init_noxml", (PyCFunction)__pyx_pw_9adios_mpi_21init_noxml, METH_VARARGS|METH_KEYWORDS, 0},
+  {"allocate_buffer", (PyCFunction)__pyx_pw_9adios_mpi_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, 0},
+  {"declare_group", (PyCFunction)__pyx_pw_9adios_mpi_25declare_group, METH_VARARGS|METH_KEYWORDS, 0},
+  {"define_var", (PyCFunction)__pyx_pw_9adios_mpi_27define_var, METH_VARARGS|METH_KEYWORDS, 0},
+  {"define_attribute", (PyCFunction)__pyx_pw_9adios_mpi_29define_attribute, METH_VARARGS|METH_KEYWORDS, 0},
+  {"select_method", (PyCFunction)__pyx_pw_9adios_mpi_31select_method, METH_VARARGS|METH_KEYWORDS, 0},
+  {"np2adiostype", (PyCFunction)__pyx_pw_9adios_mpi_33np2adiostype, METH_O, __pyx_doc_9adios_mpi_32np2adiostype},
+  {"read_init", (PyCFunction)__pyx_pw_9adios_mpi_35read_init, METH_VARARGS|METH_KEYWORDS, 0},
+  {"read_finalize", (PyCFunction)__pyx_pw_9adios_mpi_37read_finalize, METH_VARARGS|METH_KEYWORDS, 0},
   {0, 0, 0, 0}
 };
 
@@ -12202,8 +13834,8 @@ static struct PyModuleDef __pyx_moduledef = {
   #else
     PyModuleDef_HEAD_INIT,
   #endif
-    __Pyx_NAMESTR("adios_mpi"),
-    __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), /* m_doc */
+    "adios_mpi",
+    __pyx_k_ADIOS_is_freely_available_under, /* m_doc */
     -1, /* m_size */
     __pyx_methods /* m_methods */,
     NULL, /* m_reload */
@@ -12219,16 +13851,22 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_15s_s, __pyx_k_15s_s, sizeof(__pyx_k_15s_s), 0, 0, 1, 0},
   {&__pyx_kp_s_AdiosFile, __pyx_k_AdiosFile, sizeof(__pyx_k_AdiosFile), 0, 0, 1, 0},
   {&__pyx_kp_s_AdiosVariable, __pyx_k_AdiosVariable, sizeof(__pyx_k_AdiosVariable), 0, 0, 1, 0},
+  {&__pyx_n_s_BP, __pyx_k_BP, sizeof(__pyx_k_BP), 0, 0, 1, 1},
+  {&__pyx_n_s_BP_AGGREGATE, __pyx_k_BP_AGGREGATE, sizeof(__pyx_k_BP_AGGREGATE), 0, 0, 1, 1},
   {&__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_SELF, __pyx_k_COMM_SELF, sizeof(__pyx_k_COMM_SELF), 0, 0, 1, 1},
   {&__pyx_n_s_COMM_WORLD, __pyx_k_COMM_WORLD, sizeof(__pyx_k_COMM_WORLD), 0, 0, 1, 1},
   {&__pyx_kp_s_Count_dimension_mismatch, __pyx_k_Count_dimension_mismatch, sizeof(__pyx_k_Count_dimension_mismatch), 0, 0, 1, 0},
   {&__pyx_kp_s_Count_is_larger_than_shape, __pyx_k_Count_is_larger_than_shape, sizeof(__pyx_k_Count_is_larger_than_shape), 0, 0, 1, 0},
+  {&__pyx_n_s_DATASPACES, __pyx_k_DATASPACES, sizeof(__pyx_k_DATASPACES), 0, 0, 1, 1},
   {&__pyx_n_s_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 0, 0, 1, 1},
+  {&__pyx_n_s_DIMES, __pyx_k_DIMES, sizeof(__pyx_k_DIMES), 0, 0, 1, 1},
   {&__pyx_kp_s_Data_type_is_not_supported_yet, __pyx_k_Data_type_is_not_supported_yet, sizeof(__pyx_k_Data_type_is_not_supported_yet), 0, 0, 1, 0},
   {&__pyx_n_s_FLAG, __pyx_k_FLAG, sizeof(__pyx_k_FLAG), 0, 0, 1, 1},
+  {&__pyx_n_s_FLEXPATH, __pyx_k_FLEXPATH, sizeof(__pyx_k_FLEXPATH), 0, 0, 1, 1},
   {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0},
   {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0},
+  {&__pyx_n_s_ICEE, __pyx_k_ICEE, sizeof(__pyx_k_ICEE), 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},
@@ -12245,17 +13883,21 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
   {&__pyx_kp_s_Step_index_is_out_of_range, __pyx_k_Step_index_is_out_of_range, sizeof(__pyx_k_Step_index_is_out_of_range), 0, 0, 1, 0},
   {&__pyx_n_s_UNKNOWN, __pyx_k_UNKNOWN, sizeof(__pyx_k_UNKNOWN), 0, 0, 1, 1},
+  {&__pyx_kp_s_Use_default_BP_method, __pyx_k_Use_default_BP_method, sizeof(__pyx_k_Use_default_BP_method), 0, 0, 1, 0},
   {&__pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_k_Users_jyc_project_adios_devel_w, sizeof(__pyx_k_Users_jyc_project_adios_devel_w), 0, 0, 1, 0},
   {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+  {&__pyx_kp_s_WARN_Invalid_read_method_name, __pyx_k_WARN_Invalid_read_method_name, sizeof(__pyx_k_WARN_Invalid_read_method_name), 0, 0, 1, 0},
   {&__pyx_n_s_YES, __pyx_k_YES, sizeof(__pyx_k_YES), 0, 0, 1, 1},
-  {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
-  {&__pyx_n_s__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 0, 1, 1},
+  {&__pyx_n_s__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 0, 1, 1},
+  {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0},
   {&__pyx_n_s_adios_mpi, __pyx_k_adios_mpi, sizeof(__pyx_k_adios_mpi), 0, 0, 1, 1},
+  {&__pyx_n_s_advance, __pyx_k_advance, sizeof(__pyx_k_advance), 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, __pyx_k_attrs, sizeof(__pyx_k_attrs), 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_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
   {&__pyx_n_s_bpls, __pyx_k_bpls, sizeof(__pyx_k_bpls), 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},
@@ -12265,6 +13907,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_complex_2, __pyx_k_complex_2, sizeof(__pyx_k_complex_2), 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},
@@ -12286,7 +13929,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},
   {&__pyx_n_s_float128, __pyx_k_float128, sizeof(__pyx_k_float128), 0, 0, 1, 1},
+  {&__pyx_n_s_float16, __pyx_k_float16, sizeof(__pyx_k_float16), 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},
@@ -12302,16 +13947,20 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_is_stream, __pyx_k_is_stream, sizeof(__pyx_k_is_stream), 0, 0, 1, 1},
   {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
   {&__pyx_n_s_iterkeys, __pyx_k_iterkeys, sizeof(__pyx_k_iterkeys), 0, 0, 1, 1},
   {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
+  {&__pyx_n_s_last, __pyx_k_last, sizeof(__pyx_k_last), 0, 0, 1, 1},
   {&__pyx_n_s_last_step, __pyx_k_last_step, sizeof(__pyx_k_last_step), 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_lock_mode, __pyx_k_lock_mode, sizeof(__pyx_k_lock_mode), 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_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_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1},
+  {&__pyx_n_s_method_name, __pyx_k_method_name, sizeof(__pyx_k_method_name), 0, 0, 1, 1},
   {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
   {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
   {&__pyx_n_s_mpi4py_MPI, __pyx_k_mpi4py_MPI, sizeof(__pyx_k_mpi4py_MPI), 0, 0, 1, 1},
@@ -12341,10 +13990,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
   {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_time_steps, __pyx_k_time_steps, sizeof(__pyx_k_time_steps), 0, 0, 1, 1},
+  {&__pyx_n_s_timeout_sec, __pyx_k_timeout_sec, sizeof(__pyx_k_timeout_sec), 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},
@@ -12371,7 +14022,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __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 = 403; __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;
@@ -12383,117 +14034,117 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "adios_mpi.pyx":456
+  /* "adios_mpi.pyx":539
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__11);
-  __Pyx_GIVEREF(__pyx_tuple__11);
+  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s__8); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__9);
+  __Pyx_GIVEREF(__pyx_tuple__9);
 
-  /* "adios_mpi.pyx":528
+  /* "adios_mpi.pyx":621
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__12);
-  __Pyx_GIVEREF(__pyx_tuple__12);
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__10);
+  __Pyx_GIVEREF(__pyx_tuple__10);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":215
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__13);
-  __Pyx_GIVEREF(__pyx_tuple__13);
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__11);
+  __Pyx_GIVEREF(__pyx_tuple__11);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":219
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__14);
-  __Pyx_GIVEREF(__pyx_tuple__14);
+  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__12);
+  __Pyx_GIVEREF(__pyx_tuple__12);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":257
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__15);
-  __Pyx_GIVEREF(__pyx_tuple__15);
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__13);
+  __Pyx_GIVEREF(__pyx_tuple__13);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
  *         if (end - f) - <int>(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_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__16);
-  __Pyx_GIVEREF(__pyx_tuple__16);
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__14);
+  __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__17);
-  __Pyx_GIVEREF(__pyx_tuple__17);
+  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__15);
+  __Pyx_GIVEREF(__pyx_tuple__15);
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.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_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__18);
-  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_GIVEREF(__pyx_tuple__16);
 
-  /* "adios_mpi.pyx":567
+  /* "adios_mpi.pyx":660
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     if not f.var.has_key(varname):
  */
-  __pyx_tuple__20 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__20);
-  __Pyx_GIVEREF(__pyx_tuple__20);
-  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar, 567, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__18 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__18);
+  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar, 660, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":576
+  /* "adios_mpi.pyx":669
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,
  */
-  __pyx_tuple__22 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__22);
-  __Pyx_GIVEREF(__pyx_tuple__22);
-  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 576, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__20 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__20);
+  __Pyx_GIVEREF(__pyx_tuple__20);
+  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 669, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -12568,25 +14219,25 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios_mpi"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  __pyx_m = Py_InitModule4("adios_mpi", __pyx_methods, __pyx_k_ADIOS_is_freely_available_under, 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);
-  __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;}
+  __pyx_b = PyImport_AddModule(__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;};
+  if (PyObject_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_mpi) {
-    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;};
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   #if PY_MAJOR_VERSION >= 3
   {
@@ -12607,19 +14258,20 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   __pyx_vtabptr_9adios_mpi_file = &__pyx_vtable_9adios_mpi_file;
   __pyx_vtable_9adios_mpi_file.close = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_4file_close;
   __pyx_vtable_9adios_mpi_file.printself = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_4file_printself;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_vtable_9adios_mpi_file.advance = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_4file_advance *__pyx_optional_args))__pyx_f_9adios_mpi_4file_advance;
+  if (PyType_Ready(&__pyx_type_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_9adios_mpi_file.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_file.tp_dict, __pyx_vtabptr_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_file.tp_dict, __pyx_vtabptr_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_9adios_mpi_file) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_9adios_mpi_file = &__pyx_type_9adios_mpi_file;
   __pyx_vtabptr_9adios_mpi_var = &__pyx_vtable_9adios_mpi_var;
   __pyx_vtable_9adios_mpi_var.close = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_3var_close;
   __pyx_vtable_9adios_mpi_var.read = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_3var_read *__pyx_optional_args))__pyx_f_9adios_mpi_3var_read;
   __pyx_vtable_9adios_mpi_var.printself = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_3var_printself;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_9adios_mpi_var.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_var.tp_dict, __pyx_vtabptr_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_var.tp_dict, __pyx_vtabptr_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_9adios_mpi_var) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_9adios_mpi_var = &__pyx_type_9adios_mpi_var;
   /*--- Type import code ---*/
   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
@@ -12676,407 +14328,457 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_n_s__19);
-  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__19);
-  __Pyx_GIVEREF(__pyx_n_s__19);
+  __Pyx_INCREF(__pyx_n_s__17);
+  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__17);
+  __Pyx_GIVEREF(__pyx_n_s__17);
   __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py_MPI, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__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 = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":223
+  /* "adios_mpi.pyx":227
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":224
+  /* "adios_mpi.pyx":228
  * 
  * class DATATYPE:
  *     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 = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":225
+  /* "adios_mpi.pyx":229
  * class DATATYPE:
  *     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 = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":226
+  /* "adios_mpi.pyx":230
  *     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 = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":227
+  /* "adios_mpi.pyx":231
  *     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 = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":228
+  /* "adios_mpi.pyx":232
  *     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 = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":229
+  /* "adios_mpi.pyx":233
  *     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 = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":230
+  /* "adios_mpi.pyx":234
  *     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 = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":231
+  /* "adios_mpi.pyx":235
  *     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 = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":232
+  /* "adios_mpi.pyx":236
  *     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 = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":233
+  /* "adios_mpi.pyx":237
  *     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 = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":234
+  /* "adios_mpi.pyx":238
  *     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 = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":235
+  /* "adios_mpi.pyx":239
  *     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 = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":236
+  /* "adios_mpi.pyx":240
  *     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 = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":237
+  /* "adios_mpi.pyx":241
  *     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 = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_complex_2, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":238
+  /* "adios_mpi.pyx":242
  *     string = 9
  *     complex = 10
  *     double_complex = 11             # <<<<<<<<<<<<<<
  * 
  * class FLAG:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":223
+  /* "adios_mpi.pyx":227
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":240
+  /* "adios_mpi.pyx":244
  *     double_complex = 11
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":241
+  /* "adios_mpi.pyx":245
  * 
  * class FLAG:
  *     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 = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":242
+  /* "adios_mpi.pyx":246
  * class FLAG:
  *     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 = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":243
+  /* "adios_mpi.pyx":247
  *     UNKNOWN = 0
  *     YES = 1
  *     NO = 2             # <<<<<<<<<<<<<<
  * 
  * class BUFFER_ALLOC_WHEN:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":240
+  /* "adios_mpi.pyx":244
  *     double_complex = 11
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); 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);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":245
+  /* "adios_mpi.pyx":249
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); 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);
 
-  /* "adios_mpi.pyx":246
+  /* "adios_mpi.pyx":250
  * 
  * class BUFFER_ALLOC_WHEN:
  *     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 = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":247
+  /* "adios_mpi.pyx":251
  * class BUFFER_ALLOC_WHEN:
  *     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 = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":248
+  /* "adios_mpi.pyx":252
  *     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 = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios_mpi.pyx":245
+  /* "adios_mpi.pyx":249
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); 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);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":254
+  /* "adios_mpi.pyx":258
  * ## ====================
  * 
  * 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 = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_k_ = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_ = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":260
+  /* "adios_mpi.pyx":264
  *                    char * name,
  *                    char * mode,
  *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     cdef int64_t fd
  *     cdef int result
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k__2 = ((struct PyMPICommObject *)__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":261
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios_mpi.pyx":264
+ *                    char * name,
+ *                    char * mode,
+ *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     cdef int64_t fd
+ *     cdef int result
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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 = 264; __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_mpi.pyx":304
+  /* "adios_mpi.pyx":308
  * ## 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 = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_k__3 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k__3 = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":420
- * ## ====================
- * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                 MPI.Comm comm = MPI.COMM_WORLD,
- *                 char * parameters = ""):
+  /* "adios_mpi.pyx":487
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",
+ *                     MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)
  */
-  __pyx_k__4 = ADIOS_READ_METHOD_BP;
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); 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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k__5 = ((struct PyMPICommObject *)__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":421
+  /* "adios_mpi.pyx":486
  * 
- * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                 MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
- *                 char * parameters = ""):
- *     return adios_read_init_method (method, comm.ob_mpi, parameters)
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",             # <<<<<<<<<<<<<<
+ *                     MPI.Comm comm = MPI.COMM_WORLD,
+ *                     char * parameters = ""):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); 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_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios_mpi.pyx":487
+ * """ Call adios_read_init_method """
+ * cpdef int read_init(char * method_name = "BP",
+ *                     MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                     char * parameters = ""):
+ *     cdef method = str2adiosreadmethod(method_name)
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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 = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_k__5 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":426
- * 
- * 
- * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
- *     return adios_read_finalize_method (method)
- * 
- */
-  __pyx_k__7 = ADIOS_READ_METHOD_BP;
-
-  /* "adios_mpi.pyx":447
- * 
- *     def __init__(self, char * fname,
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
- *                  MPI.Comm comm = MPI.COMM_WORLD):
- *         self.fp = NULL
- */
-  __pyx_k__9 = ADIOS_READ_METHOD_BP;
-
-  /* "adios_mpi.pyx":448
+  /* "adios_mpi.pyx":521
  *     def __init__(self, char * fname,
- *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
- *                  MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.fp = NULL
- *         self.var = {}
+ *                  char * method_name = "BP",
+ *                  MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                  is_stream = False,
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k__8 = ((struct PyMPICommObject *)__pyx_t_1);
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k__6 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":567
+  /* "adios_mpi.pyx":523
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
+ *                  is_stream = False,
+ *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,             # <<<<<<<<<<<<<<
+ *                  float timeout_sec = 0.0):
+ *         self.fp = NULL
+ */
+  __pyx_k__7 = ADIOS_LOCKMODE_ALL;
+
+  /* "adios_mpi.pyx":660
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     if not f.var.has_key(varname):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_37readvar, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_39readvar, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":576
+  /* "adios_mpi.pyx":669
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_39bpls, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_41bpls, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "adios_mpi.pyx":1
@@ -13089,19 +14791,24 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+  /* "../../../../../../opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
  *      arr.base = baseptr
  * 
  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
  *     if arr.base is NULL:
  *         return None
  */
+
+  /*--- Wrapped vars code ---*/
+
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init adios_mpi", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    if (__pyx_d) {
+      __Pyx_AddTraceback("init adios_mpi", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    }
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
     PyErr_SetString(PyExc_ImportError, "init adios_mpi");
@@ -13130,7 +14837,7 @@ end:
     Py_XDECREF(m);
     return (__Pyx_RefNannyAPIStruct *)r;
 }
-#endif /* CYTHON_REFNANNY */
+#endif
 
 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
@@ -13314,7 +15021,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
 #if CYTHON_COMPILING_IN_CPYTHON
     result = PyDict_GetItem(__pyx_d, name);
-    if (result) {
+    if (likely(result)) {
         Py_INCREF(result);
     } else {
 #else
@@ -13333,14 +15040,10 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
     ternaryfunc call = func->ob_type->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
-#if PY_VERSION_HEX >= 0x02060000
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
         return NULL;
-#endif
     result = (*call)(func, arg, kw);
-#if PY_VERSION_HEX >= 0x02060000
     Py_LeaveRecursiveCall();
-#endif
     if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
         PyErr_SetString(
             PyExc_SystemError,
@@ -13420,6 +15123,43 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
     }
 }
 
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+    if (s1 == s2) {
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        const char *ps1, *ps2;
+        Py_ssize_t length = PyBytes_GET_SIZE(s1);
+        if (length != PyBytes_GET_SIZE(s2))
+            return (equals == Py_NE);
+        ps1 = PyBytes_AS_STRING(s1);
+        ps2 = PyBytes_AS_STRING(s2);
+        if (ps1[0] != ps2[0]) {
+            return (equals == Py_NE);
+        } else if (length == 1) {
+            return (equals == Py_EQ);
+        } else {
+            int result = memcmp(ps1, ps2, (size_t)length);
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+#endif
+}
+
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
     PyObject *r;
     if (!j) return NULL;
@@ -13498,6 +15238,70 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
 }
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
+    PyObject *self, *result;
+    PyCFunction cfunc;
+    cfunc = PyCFunction_GET_FUNCTION(func);
+    self = PyCFunction_GET_SELF(func);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = cfunc(self, arg);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_New(1);
+    if (unlikely(!args)) return NULL;
+    Py_INCREF(arg);
+    PyTuple_SET_ITEM(args, 0, arg);
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+            return __Pyx_PyObject_CallMethO(func, arg);
+        }
+    }
+    return __Pyx__PyObject_CallOneArg(func, arg);
+}
+#else
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject* args = PyTuple_Pack(1, arg);
+    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
+}
+#endif
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
+            return __Pyx_PyObject_CallMethO(func, NULL);
+        }
+    }
+    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
+}
+#endif
+
 static CYTHON_INLINE int __Pyx_IterFinish(void) {
 #if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
@@ -13532,6 +15336,27 @@ static CYTHON_INLINE int __Pyx_IterFinish(void) {
 #endif
 }
 
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
+    PyObject *method, *result = NULL;
+    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
+    if (unlikely(!method)) goto bad;
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyMethod_Check(method))) {
+        PyObject *self = PyMethod_GET_SELF(method);
+        if (likely(self)) {
+            PyObject *function = PyMethod_GET_FUNCTION(method);
+            result = __Pyx_PyObject_CallOneArg(function, self);
+            Py_DECREF(method);
+            return result;
+        }
+    }
+#endif
+    result = __Pyx_PyObject_CallNoArg(method);
+    Py_DECREF(method);
+bad:
+    return result;
+}
+
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
     PyErr_Format(PyExc_ValueError,
                  "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
@@ -13726,11 +15551,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             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);
@@ -13745,17 +15566,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             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)) {
@@ -13763,7 +15573,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                 "raise: exception class must be a subclass of BaseException");
             goto raise_error;
         }
-        #endif
     }
     __Pyx_ErrRestore(type, value, tb);
     return;
@@ -13773,7 +15582,7 @@ raise_error:
     Py_XDECREF(tb);
     return;
 }
-#else /* Python 3+ */
+#else
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
     PyObject* owned_instance = NULL;
     if (tb == Py_None) {
@@ -13859,6 +15668,13 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     }
     PyErr_SetObject(type, value);
     if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(tmp_type, tmp_value, tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
+#else
         PyThreadState *tstate = PyThreadState_GET();
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
@@ -13866,6 +15682,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             tstate->curexc_traceback = tb;
             Py_XDECREF(tmp_tb);
         }
+#endif
     }
 bad:
     Py_XDECREF(owned_instance);
@@ -13874,7 +15691,7 @@ bad:
 #endif
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
+#if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
     PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
@@ -13958,40 +15775,199 @@ static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases,
     if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
     return ns;
 bad:
-    Py_DECREF(ns);
+    Py_DECREF(ns);
+    return NULL;
+}
+static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
+                                      PyObject *dict, PyObject *mkw,
+                                      int calculate_metaclass, int allow_py2_metaclass) {
+    PyObject *result, *margs;
+    PyObject *owned_metaclass = NULL;
+    if (allow_py2_metaclass) {
+        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
+        if (owned_metaclass) {
+            metaclass = owned_metaclass;
+        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
+            PyErr_Clear();
+        } else {
+            return NULL;
+        }
+    }
+    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
+        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
+        Py_XDECREF(owned_metaclass);
+        if (unlikely(!metaclass))
+            return NULL;
+        owned_metaclass = metaclass;
+    }
+    margs = PyTuple_Pack(3, name, bases, dict);
+    if (unlikely(!margs)) {
+        result = NULL;
+    } else {
+        result = PyObject_Call(metaclass, margs, mkw);
+        Py_DECREF(margs);
+    }
+    Py_XDECREF(owned_metaclass);
+    return result;
+}
+
+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, (size_t)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,
+        0,
+        0,
+        0,
+        0,
+        __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,
+        __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 PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
-                                      PyObject *dict, PyObject *mkw,
-                                      int calculate_metaclass, int allow_py2_metaclass) {
-    PyObject *result, *margs;
-    PyObject *owned_metaclass = NULL;
-    if (allow_py2_metaclass) {
-        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
-        if (owned_metaclass) {
-            metaclass = owned_metaclass;
-        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
-            PyErr_Clear();
-        } else {
-            return NULL;
-        }
-    }
-    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
-        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
-        Py_XDECREF(owned_metaclass);
-        if (unlikely(!metaclass))
-            return NULL;
-        owned_metaclass = metaclass;
-    }
-    margs = PyTuple_Pack(3, name, bases, dict);
-    if (unlikely(!margs)) {
-        result = NULL;
-    } else {
-        result = PyObject_Call(metaclass, margs, mkw);
-        Py_DECREF(margs);
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 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_XDECREF(owned_metaclass);
-    return result;
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        __pyx_d,      /*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 CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
@@ -14020,17 +15996,16 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     }
 }
 
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func)             \
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)       \
     {                                                                     \
-        func_type value = func(x);                                        \
+        func_type value = func_value;                                     \
         if (sizeof(target_type) < sizeof(func_type)) {                    \
             if (unlikely(value != (func_type) (target_type) value)) {     \
                 func_type zero = 0;                                       \
-                PyErr_SetString(PyExc_OverflowError,                      \
-                    (is_unsigned && unlikely(value < zero)) ?             \
-                    "can't convert negative value to " #target_type :     \
-                    "value too large to convert to " #target_type);       \
-                return (target_type) -1;                                  \
+                if (is_unsigned && unlikely(value < zero))                \
+                    goto raise_neg_overflow;                              \
+                else                                                      \
+                    goto raise_overflow;                                  \
             }                                                             \
         }                                                                 \
         return (target_type) value;                                       \
@@ -14041,19 +16016,18 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
   #include "longintrepr.h"
  #endif
 #endif
+
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
     const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(int) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int");
-                return (int) -1;
+                goto raise_neg_overflow;
             }
             return (int) val;
         }
@@ -14063,40 +16037,34 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (int) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int");
-                return (int) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(int) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(int) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(int) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(int) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(int) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x))
             } else if (sizeof(int) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14134,6 +16102,14 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int");
+    return (int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int");
+    return (int) -1;
 }
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
@@ -14162,7 +16138,6 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
     empty_dict = PyDict_New();
     if (!empty_dict)
         goto bad;
-    #if PY_VERSION_HEX >= 0x02050000
     {
         #if PY_MAJOR_VERSION >= 3
         if (level == -1) {
@@ -14184,7 +16159,7 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
                     PyErr_Clear();
                 }
             }
-            level = 0; /* try absolute import on failure */
+            level = 0;
         }
         #endif
         if (!module) {
@@ -14201,14 +16176,6 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int 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);
@@ -14218,24 +16185,17 @@ bad:
     return module;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
     const int64_t neg_one = (int64_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(int64_t) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int64_t");
-                return (int64_t) -1;
+                goto raise_neg_overflow;
             }
             return (int64_t) val;
         }
@@ -14245,40 +16205,34 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (int64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int64_t, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to int64_t");
-                return (int64_t) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(int64_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(int64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(int64_t) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(int64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int64_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(int64_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong(x))
             } else if (sizeof(int64_t) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14316,26 +16270,27 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int64_t");
+    return (int64_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int64_t");
+    return (int64_t) -1;
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
         if (sizeof(uint64_t) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to uint64_t");
-                return (uint64_t) -1;
+                goto raise_neg_overflow;
             }
             return (uint64_t) val;
         }
@@ -14345,40 +16300,34 @@ static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(uint64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint64_t, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to uint64_t");
-                return (uint64_t) -1;
+                goto raise_neg_overflow;
             }
             if (sizeof(uint64_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
  #if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(uint64_t)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(uint64_t) ((PyLongObject*)x)->ob_digit[0];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint64_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(uint64_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(uint64_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong(x))
             } else if (sizeof(uint64_t) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14416,26 +16365,27 @@ static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to uint64_t");
+    return (uint64_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to uint64_t");
+    return (uint64_t) -1;
 }
 
-#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_As_long(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))) {
         if (sizeof(long) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG)
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
         } else {
             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;
+                goto raise_neg_overflow;
             }
             return (long) val;
         }
@@ -14445,40 +16395,34 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *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];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, ((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;
+                goto raise_neg_overflow;
             }
             if (sizeof(long) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong)
+                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(long) <= sizeof(unsigned long long)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong)
+                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong(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];
-                }
+            switch (Py_SIZE(x)) {
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
  #endif
 #endif
             if (sizeof(long) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong)
+                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x))
             } else if (sizeof(long) <= sizeof(long long)) {
-                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong)
+                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -14516,6 +16460,14 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
         Py_DECREF(tmp);
         return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to long");
+    return (long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to long");
+    return (long) -1;
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
@@ -14593,7 +16545,7 @@ error:
     Py_DECREF(f);
     return -1;
 }
-#else /* Python 3 has a print function */
+#else
 static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
     PyObject* kwargs = 0;
     PyObject* result = 0;
@@ -14699,7 +16651,7 @@ error:
      * warnings about unused functions */
     return __Pyx_Print(f, NULL, 0);
 }
-#else /* Python 3 has a print function */
+#else
 static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
     int res;
     PyObject* arg_tuple = PyTuple_Pack(1, o);
@@ -15013,11 +16965,7 @@ static int __Pyx_check_binary_version(void) {
                       "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;
 }
@@ -15087,11 +17035,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
         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,
@@ -15107,168 +17051,6 @@ bad:
 }
 #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
@@ -15279,7 +17061,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
         } else {
             *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
         }
-        #else  /* Python 3+ has unicode identifiers */
+        #else
         if (t->is_unicode | t->is_str) {
             if (t->intern) {
                 *t->p = PyUnicode_InternFromString(t->s);
@@ -15299,8 +17081,8 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *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 PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
+    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
 }
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
     Py_ssize_t ignore;
@@ -15329,33 +17111,31 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
                 }
             }
         }
-#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/
+#endif
         *length = PyBytes_GET_SIZE(defenc);
         return defenc_c;
-#else /* PY_VERSION_HEX < 0x03030000 */
-        if (PyUnicode_READY(o) == -1) return NULL;
+#else
+        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
         if (PyUnicode_IS_ASCII(o)) {
-            *length = PyUnicode_GET_DATA_SIZE(o);
+            *length = PyUnicode_GET_LENGTH(o);
             return PyUnicode_AsUTF8(o);
         } else {
             PyUnicode_AsASCIIString(o);
             return NULL;
         }
-#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
+#else
         return PyUnicode_AsUTF8AndSize(o, length);
-#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
-#endif /* PY_VERSION_HEX < 0x03030000 */
+#endif
+#endif
     } else
-#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#endif
 #if !CYTHON_COMPILING_IN_PYPY
-#if PY_VERSION_HEX >= 0x02060000
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
     } else
 #endif
-#endif
     {
         char* result;
         int r = PyBytes_AsStringAndSize(o, &result, length);
@@ -15416,11 +17196,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
   }
   return res;
 }
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
- #endif
-#endif
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   Py_ssize_t ival;
   PyObject *x;
@@ -15438,11 +17213,7 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
        }
      #endif
     #endif
-  #if PY_VERSION_HEX < 0x02060000
-    return PyInt_AsSsize_t(b);
-  #else
     return PyLong_AsSsize_t(b);
-  #endif
   }
   x = PyNumber_Index(b);
   if (!x) return -1;
@@ -15451,17 +17222,7 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   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
+    return PyInt_FromSize_t(ival);
 }
 
 
diff --git a/wrappers/numpy/adios_mpi.pyx b/wrappers/numpy/adios_mpi.pyx
index 7a12240..cc84963 100644
--- a/wrappers/numpy/adios_mpi.pyx
+++ b/wrappers/numpy/adios_mpi.pyx
@@ -151,6 +151,10 @@ cdef extern from "adios_read.h":
     ctypedef enum ADIOS_READ_METHOD:
         ADIOS_READ_METHOD_BP
         ADIOS_READ_METHOD_BP_AGGREGATE
+        ADIOS_READ_METHOD_DATASPACES
+        ADIOS_READ_METHOD_DIMES
+        ADIOS_READ_METHOD_FLEXPATH
+        ADIOS_READ_METHOD_ICEE
         pass
 
     ctypedef enum ADIOS_LOCKMODE:
@@ -295,7 +299,7 @@ cpdef int read(int64_t fd_p, char * name, np.ndarray val):
 cpdef int close(int64_t fd_p):
     return adios_close(fd_p)
 
-cpdef finalize(int mype = 0):
+cpdef int finalize(int mype = 0):
     return adios_finalize(mype)
 
 ## ====================
@@ -310,8 +314,8 @@ cpdef int allocate_buffer(int when,
                                  buffer_size)
 
 cpdef int64_t declare_group(char * name,
-                            char * time_index,
-                            int stats):
+                            char * time_index = "",
+                            int stats = 1):
     cdef int64_t id = 0
     adios_declare_group (&id,
                          name,
@@ -323,9 +327,9 @@ cpdef int define_var(int64_t group_id,
                      char * name,
                      char * path,
                      int type,
-                     char * dimensions,
-                     char * global_dimensions,
-                     char * local_offsets):
+                     char * dimensions = "",
+                     char * global_dimensions = "",
+                     char * local_offsets = ""):
     return adios_define_var(group_id,
                             name, path,
                             <ADIOS_DATATYPES> type,
@@ -348,8 +352,8 @@ cpdef int define_attribute (int64_t group,
 
 cpdef int select_method (int64_t group,
                          char * method,
-                         char * parameters,
-                         char * base_path):
+                         char * parameters = "",
+                         char * base_path = ""):
     return adios_select_method (group,
                                 method,
                                 parameters,
@@ -413,19 +417,82 @@ cdef printvar(ADIOS_VARINFO * v):
     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
     print '%15s : %d' % ('nsteps', v.nsteps)
 
+cdef ADIOS_READ_METHOD str2adiosreadmethod(bytes name):
+    if (name == "BP"):
+        method = ADIOS_READ_METHOD_BP
+    elif (name == "BP_AGGREGATE"):
+        method = ADIOS_READ_METHOD_BP_AGGREGATE
+    elif (name == "DATASPACES"):
+        method = ADIOS_READ_METHOD_DATASPACES
+    elif (name == "DIMES"):
+        method = ADIOS_READ_METHOD_DIMES
+    elif (name == "FLEXPATH"):
+        method = ADIOS_READ_METHOD_FLEXPATH
+    elif (name == "ICEE"):
+        method = ADIOS_READ_METHOD_ICEE
+    else:
+        print '[WARN] Invalid read method name:', name, '. Use default BP method'
+        method = ADIOS_READ_METHOD_BP
+        
+    return method
+
+cpdef np2adiostype(type nptype):
+    """ Ignored: int_, intc, intp """
+
+    cdef atype = DATATYPE.unknown
+
+    if (nptype == np.bool_):
+        atype = DATATYPE.integer
+    elif (nptype == np.int8):
+        atype = DATATYPE.byte
+    elif (nptype == np.int16):
+        atype = DATATYPE.short
+    elif (nptype == np.int32):
+        atype = DATATYPE.integer
+    elif (nptype == np.int64):
+        atype = DATATYPE.long
+    elif (nptype == np.uint8):
+        atype = DATATYPE.unsigned_byte
+    elif (nptype == np.uint16):
+        atype = DATATYPE.unsigned_short
+    elif (nptype == np.uint32):
+        atype = DATATYPE.unsigned_integer
+    elif (nptype == np.uint64):
+        atype = DATATYPE.unsigned_long
+    elif (nptype == np.float_):
+        atype = DATATYPE.double
+    elif (nptype == np.float16):
+        atype = DATATYPE.real
+    elif (nptype == np.float32):
+        atype = DATATYPE.real
+    elif (nptype == np.float64):
+        atype = DATATYPE.double
+    elif (nptype == np.complex_):
+        atype = DATATYPE.double_complex
+    elif (nptype == np.complex64):
+        atype = DATATYPE.complex
+    elif (nptype == np.complex128):
+        atype = DATATYPE.double_complex
+    elif (nptype == np.str_):
+        atype = DATATYPE.byte
+
+    return atype
+
 ## ====================
 ## ADIOS Class Definitions for Read
 ## ====================
 
 """ Call adios_read_init_method """
-cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
-                MPI.Comm comm = MPI.COMM_WORLD,
-                char * parameters = ""):
+cpdef int read_init(char * method_name = "BP",
+                    MPI.Comm comm = MPI.COMM_WORLD,
+                    char * parameters = ""):
+    cdef method = str2adiosreadmethod(method_name)
     return adios_read_init_method (method, comm.ob_mpi, parameters)
 
 
 """ Call adios_read_finalize_method """
-cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+cpdef int read_finalize(char * method_name = "BP"):
+    cdef method = str2adiosreadmethod(method_name)
     return adios_read_finalize_method (method)
 
 """ Python class for ADIOS_FILE structure """
@@ -446,15 +513,27 @@ cdef class file:
     cpdef public dict var
     cpdef public dict attr
 
+    cpdef public bint is_stream
+
     """ Initialization. Call adios_read_open and populate public members """
     def __init__(self, char * fname,
-                 ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
-                 MPI.Comm comm = MPI.COMM_WORLD):
+                 char * method_name = "BP",
+                 MPI.Comm comm = MPI.COMM_WORLD,
+                 is_stream = False,
+                 ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
+                 float timeout_sec = 0.0):
         self.fp = NULL
         self.var = {}
         self.attr = {}
+        self.is_stream = is_stream
+        cdef method = str2adiosreadmethod(method_name)
 
-        self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
+        if (is_stream):
+            self.fp = adios_read_open(fname, method, comm.ob_mpi,
+                                      lock_mode, timeout_sec)
+        else:
+            self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
+            
         assert self.fp != NULL, 'Not an open file'
 
         self.name = fname.split('/')[-1]  ## basename
@@ -462,22 +541,22 @@ cdef class file:
         self.nattrs = self.fp.nattrs
         self.current_step = self.fp.current_step
         self.last_step = self.fp.last_step
-        self.endianness = self.fp.endianness  
-        self.version = self.fp.version     
-        self.file_size = self.fp.file_size   
+        self.endianness = self.fp.endianness
+        self.version = self.fp.version
+        self.file_size = self.fp.file_size
     
         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:
             self.var[varname] = var(self, varname)
 
     def __del__(self):
             self.close()
-
+            
     """ Call adios_read_close """
     cpdef close(self):
         assert self.fp != NULL, 'Not an open file'
         adios_read_close(self.fp)
         self.fp = NULL
-
+        
     """ Print self """
     cpdef printself(self):
         assert self.fp != NULL, 'Not an open file'
@@ -485,6 +564,9 @@ cdef class file:
         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
         printfile(self.fp)
 
+    cpdef advance(self, int last = 0, float timeout_sec = 0.0):
+        return adios_advance_step(self.fp, last, timeout_sec)
+
 """ Python class for ADIOS_VARINFO structure """
 cdef class var:
     """ Private Memeber """
@@ -527,7 +609,8 @@ cdef class var:
     """ Call adios_schedule_read and adios_perform_reads """
     cpdef read(self, tuple offset = (), tuple count = (), from_steps = 0, nsteps = 1):
         assert self.type is not None, 'Data type is not supported yet'
-        assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
+        if (self.nsteps > 0):
+            assert from_steps + nsteps <= self.nsteps, 'Step index is out of range'
         
         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
@@ -574,7 +657,6 @@ cdef class var:
 ## ADIOS Global functions
 ## ====================
 
-""" Read data in a BP file and return as a numpy array """
 def readvar(fname, varname):
     f = file(fname, comm=MPI.COMM_SELF)
     if not f.var.has_key(varname):
@@ -584,7 +666,6 @@ def readvar(fname, varname):
     v = f.var[varname]
     return v.read(from_steps=0, nsteps=v.nsteps)
 
-""" List attributes of a BP file """
 def bpls(fname):
     f = file(fname, comm=MPI.COMM_SELF)
     return {'nvars': f.nvars,
@@ -593,4 +674,3 @@ def bpls(fname):
             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
             'time_steps': (f.current_step, f.last_step),
             'file_size': f.file_size}
-    
diff --git a/wrappers/numpy/adios_mpi2serial.sed b/wrappers/numpy/adios_mpi2serial.sed
new file mode 100644
index 0000000..8605442
--- /dev/null
+++ b/wrappers/numpy/adios_mpi2serial.sed
@@ -0,0 +1,15 @@
+#!/usr/bin/sed -f
+##
+## Example:
+## sed -f adios_mpi2serial.sed adios_mpi.pyx > adios.pyx
+##
+s/^import mpi4py.MPI/#import mpi4py.MPI/g
+s/^cimport mpi4py.MPI/#cimport mpi4py.MPI/g
+s/MPI./MPI_/g
+s/comm.ob_mpi/comm/g
+/ctypedef struct MPI_Comm:$/{
+  N
+  s/ctypedef struct MPI_Comm:\n[ ]*pass/ctypedef int MPI_Comm\
+    int MPI_COMM_WORLD\
+    int MPI_COMM_SELF/
+}
diff --git a/wrappers/numpy/conf/CMakeLists.txt b/wrappers/numpy/conf/CMakeLists.txt
deleted file mode 100644
index 0982134..0000000
--- a/wrappers/numpy/conf/CMakeLists.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-# Author:  Lisandro Dalcin
-# Contact: dalcinl at gmail.com
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-
-PROJECT(mpi4py)
-
-FIND_PACKAGE(PythonInterp)
-FIND_PACKAGE(PythonLibs)
-FIND_PACKAGE(MPI)
-
-SET(mpi4py_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
-SET(mpi4py_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/mpi4py")
-
-FILE(GLOB mpi4py_PYTHON_FILES
-     RELATIVE ${mpi4py_SOURCE_DIR}
-     ${mpi4py_SOURCE_DIR}/*.py)
-
-FILE(GLOB mpi4py_HEADER_FILES
-     RELATIVE ${mpi4py_SOURCE_DIR}
-     ${mpi4py_SOURCE_DIR}/include/mpi4py/*.px[di]
-     ${mpi4py_SOURCE_DIR}/include/mpi4py/*.pyx
-     ${mpi4py_SOURCE_DIR}/include/mpi4py/*.[hi]
-    )
-
-FOREACH(file
-        ${mpi4py_PYTHON_FILES}
-        ${mpi4py_HEADER_FILES}
-        )
-  SET(src "${mpi4py_SOURCE_DIR}/${file}")
-  SET(tgt "${mpi4py_BINARY_DIR}/${file}")
-  ADD_CUSTOM_COMMAND(
-    DEPENDS ${src}
-    OUTPUT  ${tgt}
-    COMMAND ${CMAKE_COMMAND} ARGS -E copy ${src} ${tgt}
-    COMMENT "copy: ${file}"
-    )
-  SET(mpi4py_OUTPUT_FILES ${mpi4py_OUTPUT_FILES} ${tgt})
-ENDFOREACH(file)
-
-FOREACH(file ${mpi4py_PYTHON_FILES})
-  SET(mpi4py_py  ${mpi4py_py}  "${mpi4py_BINARY_DIR}/${file}")
-  SET(mpi4py_pyc ${mpi4py_pyc} "${mpi4py_BINARY_DIR}/${file}c")
-  SET(mpi4py_pyo ${mpi4py_pyo} "${mpi4py_BINARY_DIR}/${file}o")
-ENDFOREACH(file)
-ADD_CUSTOM_COMMAND(
-  COMMAND ${CMAKE_COMMAND} ARGS -E echo 'from compileall import compile_dir'     > compile_py
-  COMMAND ${CMAKE_COMMAND} ARGS -E echo 'compile_dir(\"${mpi4py_BINARY_DIR}\")' >> compile_py
-  COMMAND ${PYTHON_EXECUTABLE} ARGS compile_py
-  COMMAND ${PYTHON_EXECUTABLE} ARGS -O compile_py
-  COMMAND ${CMAKE_COMMAND} ARGS -E remove compile_py
-  DEPENDS ${mpi4py_py}
-  OUTPUT  ${mpi4py_pyc} ${mpi4py_pyo}
-  )
-SET(mpi4py_OUTPUT_FILES ${mpi4py_OUTPUT_FILES} ${mpi4py_pyc} ${mpi4py_pyo})
-
-
-FIND_PROGRAM(MPI_COMPILER_CC
-  NAMES mpicc
-  HINTS "${MPI_BASE_DIR}"
-  PATH_SUFFIXES bin
-  DOC "MPI C compiler wrapper")
-MARK_AS_ADVANCED(MPI_COMPILER_CC)
-FIND_PROGRAM(MPI_COMPILER_CXX
-  NAMES mpicxx mpic++ mpiCC
-  HINTS "${MPI_BASE_DIR}"
-  PATH_SUFFIXES bin
-  DOC "MPI C++ compiler wrapper")
-MARK_AS_ADVANCED(MPI_COMPILER_CXX)
-find_program(MPI_COMPILER_F77
-  NAMES mpif77
-  HINTS "${MPI_BASE_DIR}"
-  PATH_SUFFIXES bin
-  DOC "MPI F77 compiler wrapper")
-MARK_AS_ADVANCED(MPI_COMPILER_F77)
-FIND_PROGRAM(MPI_COMPILER_F90
-  NAMES mpif90
-  HINTS "${MPI_BASE_DIR}"
-  PATH_SUFFIXES bin
-  DOC "MPI F90 compiler wrapper")
-MARK_AS_ADVANCED(MPI_COMPILER_F90)
-FOREACH(file "mpi.cfg")
-  SET(tgt "${mpi4py_BINARY_DIR}/${file}")
-  ADD_CUSTOM_COMMAND(
-    OUTPUT  ${tgt}
-    COMMAND ${CMAKE_COMMAND} ARGS -E echo '[mpi]' > "${tgt}"
-    COMMAND ${CMAKE_COMMAND} ARGS -E echo 'mpicc  = ${MPI_COMPILER_CC}'  >> ${tgt}
-    COMMAND ${CMAKE_COMMAND} ARGS -E echo 'mpicxx = ${MPI_COMPILER_CXX}' >> ${tgt}
-    COMMAND ${CMAKE_COMMAND} ARGS -E echo 'mpif77 = ${MPI_COMPILER_F77}' >> ${tgt}
-    COMMAND ${CMAKE_COMMAND} ARGS -E echo 'mpif90 = ${MPI_COMPILER_F90}' >> ${tgt}
-    COMMENT "write: ${file}"
-    )
-  SET(mpi4py_OUTPUT_FILES ${mpi4py_OUTPUT_FILES} ${tgt})
-ENDFOREACH(file)
-
-ADD_CUSTOM_TARGET(mpi4py ALL DEPENDS ${mpi4py_OUTPUT_FILES})
-
-INCLUDE_DIRECTORIES(
-  ${MPI_INCLUDE_PATH}
-  ${PYTHON_INCLUDE_PATH}
-  "${mpi4py_SOURCE_DIR}"
-  )
-
-# --- mpi4py.MPI ---
-PYTHON_ADD_MODULE(mpi4py.MPI MODULE "${mpi4py_SOURCE_DIR}/MPI.c")
-SET_TARGET_PROPERTIES(
-  mpi4py.MPI PROPERTIES
-  OUTPUT_NAME "MPI" PREFIX ""
-  COMPILE_FLAGS "${MPI_COMPILE_FLAGS}"
-  LINK_FLAGS "${MPI_LINK_FLAGS}"
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(mpi4py.MPI ${PYTHON_LIBRARY})
-TARGET_LINK_LIBRARIES(mpi4py.MPI ${MPI_LIBRARIES})
-
-
-# --- mpi4py.MPE ---
-PYTHON_ADD_MODULE(mpi4py.MPE MODULE ${mpi4py_SOURCE_DIR}/MPE.c)
-SET_TARGET_PROPERTIES(
-  mpi4py.MPE PROPERTIES
-  OUTPUT_NAME "MPE" PREFIX ""
-  COMPILE_FLAGS "${MPE_COMPILE_FLAGS}" "${MPI_COMPILE_FLAGS}"
-  LINK_FLAGS "${MPE_LINK_FLAGS}" "${MPI_LINK_FLAGS}"
-  LIBRARY_OUTPUT_DIRECTORY ${mpi4py_BINARY_DIR}
-  RUNTIME_OUTPUT_DIRECTORY ${mpi4py_BINARY_DIR}
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(mpi4py.MPE ${PYTHON_LIBRARY})
-TARGET_LINK_LIBRARIES(mpi4py.MPE ${MPE_LIBRARY})
-TARGET_LINK_LIBRARIES(mpi4py.MPE ${MPI_LIBRARIES})
-
-
-# --- mpi4py.dl ---
-PYTHON_ADD_MODULE(mpi4py.dl MODULE "${mpi4py_SOURCE_DIR}/dynload.c")
-SET_TARGET_PROPERTIES(
-  mpi4py.dl PROPERTIES
-  OUTPUT_NAME "dl" PREFIX ""
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(mpi4py.dl ${PYTHON_LIBRARY})
-TARGET_LINK_LIBRARIES(mpi4py.dl ${CMAKE_DL_LIBS})
-
-
-# --- mpi4py/bin/python-mpi ---
-ADD_EXECUTABLE(python-mpi "${mpi4py_SOURCE_DIR}/python.c")
-SET_TARGET_PROPERTIES(
-  python-mpi PROPERTIES
-  COMPILE_FLAGS "${MPI_COMPILE_FLAGS}"
-  LINK_FLAGS "${MPI_LINK_FLAGS}"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/bin"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(python-mpi ${PYTHON_LIBRARY})
-TARGET_LINK_LIBRARIES(python-mpi ${MPI_LIBRARIES})
-
-# --- mpi4py/lib-pmpi/libmpe.so ---
-ADD_LIBRARY(pmpi-mpe MODULE "${mpi4py_SOURCE_DIR}/pmpi-mpe.c")
-SET_TARGET_PROPERTIES(
-  pmpi-mpe PROPERTIES
-  OUTPUT_NAME "mpe"
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(pmpi-mpe ${MPE_LIBRARIES})
-TARGET_LINK_LIBRARIES(pmpi-mpe ${MPI_LIBRARIES})
-
-# --- mpi4py/lib-pmpi/libvt.so ---
-ADD_LIBRARY(pmpi-vt MODULE "${mpi4py_SOURCE_DIR}/pmpi-vt.c")
-SET_TARGET_PROPERTIES(
-  pmpi-vt PROPERTIES
-  OUTPUT_NAME "vt"
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(pmpi-vt ${VT_LIBRARIES})
-TARGET_LINK_LIBRARIES(pmpi-vt ${MPI_LIBRARIES})
-
-# --- mpi4py/lib-pmpi/libvt-mpi.so ---
-ADD_LIBRARY(pmpi-vt-mpi MODULE "${mpi4py_SOURCE_DIR}/pmpi-vt-mpi.c")
-SET_TARGET_PROPERTIES(
-  pmpi-vt PROPERTIES
-  OUTPUT_NAME "vt-mpi"
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(pmpi-vt-mpi ${VT_MPI_LIBRARIES})
-TARGET_LINK_LIBRARIES(pmpi-vt-mpi ${MPI_LIBRARIES})
-
-# --- mpi4py/lib-pmpi/libvt-hyb.so ---
-ADD_LIBRARY(pmpi-vt-hyb MODULE "${mpi4py_SOURCE_DIR}/pmpi-vt-hyb.c")
-SET_TARGET_PROPERTIES(
-  pmpi-vt PROPERTIES
-  OUTPUT_NAME "vt-hyb"
-  LIBRARY_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  RUNTIME_OUTPUT_DIRECTORY "${mpi4py_BINARY_DIR}/lib-pmpi"
-  LINKER_LANGUAGE C
-)
-TARGET_LINK_LIBRARIES(pmpi-vt-hyb ${VT_HYB_LIBRARIES})
-TARGET_LINK_LIBRARIES(pmpi-vt-hyb ${MPI_LIBRARIES})
diff --git a/wrappers/numpy/conf/MANIFEST.in b/wrappers/numpy/conf/MANIFEST.in
deleted file mode 100644
index c38e815..0000000
--- a/wrappers/numpy/conf/MANIFEST.in
+++ /dev/null
@@ -1,15 +0,0 @@
-include *.py *.cfg *.txt
-
-recursive-include demo *.py *.txt *.pyx *.i *.c *.cxx *.f90 *.sh *.bat
-recursive-include conf *.py *.txt *.cfg *.in *.sh *.bat
-recursive-include src  *.py *.pyx *.px[di] *.h *.c *.i
-recursive-include test *.py
-recursive-include *    [M,m]akefile
-
-include docs/*.html
-include docs/*.pdf
-recursive-include docs/usrman *
-recursive-include docs/apiref *
-recursive-include docs/source *
-
-recursive-exclude docs/source/slides *
diff --git a/wrappers/numpy/conf/__init__.py b/wrappers/numpy/conf/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/wrappers/numpy/conf/__init__.pyc b/wrappers/numpy/conf/__init__.pyc
deleted file mode 100644
index 62bdbd6..0000000
Binary files a/wrappers/numpy/conf/__init__.pyc and /dev/null differ
diff --git a/wrappers/numpy/conf/cythonize.bat b/wrappers/numpy/conf/cythonize.bat
deleted file mode 100644
index 55a02ce..0000000
--- a/wrappers/numpy/conf/cythonize.bat
+++ /dev/null
@@ -1,4 +0,0 @@
- at echo off
-python -m cython --cleanup 3 -w src -I include %* mpi4py.MPE.pyx
-python -m cython --cleanup 3 -w src -I include %* mpi4py.MPI.pyx
-move src\mpi4py.MPI*.h src\include\mpi4py
\ No newline at end of file
diff --git a/wrappers/numpy/conf/cythonize.py b/wrappers/numpy/conf/cythonize.py
deleted file mode 100644
index 44e5118..0000000
--- a/wrappers/numpy/conf/cythonize.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-import sys, os
-
-def cythonize(source,
-              includes=(),
-              destdir_c=None,
-              destdir_h=None,
-              wdir=None):
-    from Cython.Compiler.Main import \
-         CompilationOptions, default_options, \
-         compile, \
-         PyrexError
-    from Cython.Compiler import Options
-    cwd = os.getcwd()
-    try:
-        name, ext = os.path.splitext(source)
-        outputs_c = [name+'.c']
-        outputs_h = [name+'.h', name+'_api.h']
-        # change working directory
-        if wdir:
-            os.chdir(wdir)
-        # run Cython on source
-        options = CompilationOptions(default_options)
-        options.output_file = outputs_c[0]
-        options.include_path = list(includes)
-        Options.generate_cleanup_code = 3
-        any_failures = 0
-        try:
-            result = compile(source, options)
-            if result.num_errors > 0:
-                any_failures = 1
-        except (EnvironmentError, PyrexError):
-            e = sys.exc_info()[1]
-            sys.stderr.write(str(e) + '\n')
-            any_failures = 1
-        if any_failures:
-            for output in outputs_c + outputs_h:
-                try:
-                    os.remove(output)
-                except OSError:
-                    pass
-            return 1
-        # move ouputs
-        for destdir, outputs in (
-            (destdir_c, outputs_c),
-            (destdir_h, outputs_h)):
-            if destdir is None: continue
-            for output in outputs:
-                dest = os.path.join(
-                    destdir, os.path.basename(output))
-                try:
-                    os.remove(dest)
-                except OSError:
-                    pass
-                os.rename(output, dest)
-        #
-        return 0
-    #
-    finally:
-        os.chdir(cwd)
-
-if __name__ == "__main__":
-    sys.exit(
-        cythonize('mpi4py.MPI.pyx',
-                  includes=['include'],
-                  destdir_h=os.path.join('include', 'mpi4py'),
-                  wdir='src')
-        or
-        cythonize('mpi4py.MPE.pyx',
-                  includes=['include'],
-                  wdir='src')
-        )
diff --git a/wrappers/numpy/conf/cythonize.sh b/wrappers/numpy/conf/cythonize.sh
deleted file mode 100755
index 2cdcedd..0000000
--- a/wrappers/numpy/conf/cythonize.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-python -m cython --cleanup 3 -w src -Iinclude $@ mpi4py.MPE.pyx && \
-python -m cython --cleanup 3 -w src -Iinclude $@ mpi4py.MPI.pyx && \
-mv src/mpi4py.MPI*.h src/include/mpi4py
diff --git a/wrappers/numpy/conf/epydoc.cfg b/wrappers/numpy/conf/epydoc.cfg
deleted file mode 100644
index 41398a9..0000000
--- a/wrappers/numpy/conf/epydoc.cfg
+++ /dev/null
@@ -1,149 +0,0 @@
-[epydoc] # Epydoc section marker (required by ConfigParser)
-
-# The list of objects to document.  Objects can be named using
-# dotted names, module filenames, or package directory names.
-# Alases for this option include "objects" and "values".
-modules: mpi4py
-
-# The type of output that should be generated.  Should be one
-# of: html, text, latex, dvi, ps, pdf.
-#output: html
-
-# The path to the output directory.  May be relative or absolute.
-#target: docs/html/
-
-# An integer indicating how verbose epydoc should be.  The default
-# value is 0; negative values will supress warnings and errors;
-# positive values will give more verbose output.
-verbosity: 0
-
-# A boolean value indicating that Epydoc should show a tracaback
-# in case of unexpected error. By default don't show tracebacks
-#debug: 0
-
-# If True, don't try to use colors or cursor control when doing
-# textual output. The default False assumes a rich text prompt
-#simple-term: 0
-
-
-### Generation options
-
-# The default markup language for docstrings, for modules that do
-# not define __docformat__.  Defaults to epytext.
-docformat: reStructuredText
-
-# Whether or not parsing should be used to examine objects.
-parse: yes
-
-# Whether or not introspection should be used to examine objects.
-introspect: yes
-
-# Don't examine in any way the modules whose dotted name match this
-# regular expression pattern.
-exclude:
-
-
-# Don't perform introspection on the modules whose dotted name match this
-# regular expression pattern.
-#exclude-introspect
-
-# Don't perform parsing on the modules whose dotted name match this
-# regular expression pattern.
-#exclude-parse
-
-# The format for showing inheritance objects.
-# It should be one of: 'grouped', 'listed', 'included'.
-inheritance: listed
-
-# Whether or not to inclue private variables.  (Even if included,
-# private variables will be hidden by default.)
-private: yes
-
-# Whether or not to list each module's imports.
-imports: no
-
-# Whether or not to include syntax highlighted source code in
-# the output (HTML only).
-sourcecode: yes
-
-# Whether or not to include a a page with Epydoc log, containing
-# effective option at the time of generation and the reported logs.
-include-log: no
-
-
-### Output options
-
-# The documented project's name.
-name: MPI for Python
-
-# The documented project's URL.
-url: http://mpi4py.googlecode.com/
-
-# The CSS stylesheet for HTML output.  Can be the name of a builtin
-# stylesheet, or the name of a file.
-css: white
-
-# HTML code for the project link in the navigation bar.  If left
-# unspecified, the project link will be generated based on the
-# project's name and URL.
-#link: <a href="somewhere">My Cool Project</a>
-
-# The "top" page for the documentation.  Can be a URL, the name
-# of a module or class, or one of the special names "trees.html",
-# "indices.html", or "help.html"
-#top: os.path
-
-# An alternative help file.  The named file should contain the
-# body of an HTML file; navigation bars will be added to it.
-#help: my_helpfile.html
-
-# Whether or not to include a frames-based table of contents.
-frames: yes
-
-# Whether each class should be listed in its own section when
-# generating LaTeX or PDF output.
-separate-classes: no
-
-
-### API linking options
-
-# Define a new API document.  A new interpreted text role
-# will be created
-#external-api: epydoc
-
-# Use the records in this file to resolve objects in the API named NAME.
-#external-api-file: epydoc:api-objects.txt
-
-# Use this URL prefix to configure the string returned for external API.
-#external-api-root: epydoc:http://epydoc.sourceforge.net/api
-
-
-### Graph options
-
-# The list of graph types that should be automatically included
-# in the output.  Graphs are generated using the Graphviz "dot"
-# executable.  Graph types include: "classtree", "callgraph",
-# "umlclasstree".  Use "all" to include all graph types
-graph: classtree
-
-# The path to the Graphviz "dot" executable, used to generate
-# graphs.
-#dotpath: /usr/local/bin/dot
-
-# The name of one or more pstat files (generated by the profile
-# or hotshot module).  These are used to generate call graphs.
-#pstat: profile.out
-
-# Specify the font used to generate Graphviz graphs.
-# (e.g., helvetica or times).
-graph-font: Helvetica
-
-# Specify the font size used to generate Graphviz graphs.
-graph-font-size: 10
-
-
-### Return value options
-
-# The condition upon which Epydoc should exit with a non-zero
-# exit status. Possible values are error, warning, docstring_warning
-#fail-on: error
diff --git a/wrappers/numpy/conf/epydocify.py b/wrappers/numpy/conf/epydocify.py
deleted file mode 100755
index 61836e9..0000000
--- a/wrappers/numpy/conf/epydocify.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env python
-
-# --------------------------------------------------------------------
-
-from mpi4py import MPI
-
-try:
-    from signal import signal, SIGPIPE, SIG_IGN
-    signal(SIGPIPE, SIG_IGN)
-except ImportError:
-    pass
-
-# --------------------------------------------------------------------
-
-try:
-    from docutils.nodes import NodeVisitor
-    NodeVisitor.unknown_visit = lambda self, node: None
-    NodeVisitor.unknown_departure =  lambda self, node: None
-except ImportError:
-    pass
-
-try: # epydoc 3.0.1 + docutils 0.6
-    from docutils.nodes import Text
-    try:
-        from collections import UserString
-    except ImportError:
-        from UserString import UserString
-    if not isinstance(Text, UserString):
-        def Text_get_data(s):
-            try:
-                return s._data
-            except AttributeError:
-                return s.astext()
-        def Text_set_data(s, d):
-            s.astext = lambda: d
-            s._data = d
-        Text.data = property(Text_get_data, Text_set_data)
-except ImportError:
-    pass
-
-# --------------------------------------------------------------------
-
-from epydoc.docwriter import dotgraph
-
-import re
-dotgraph._DOT_VERSION_RE = \
-    re.compile(r'dot (?:- Graphviz )version ([\d\.]+)')
-
-try:
-
-    dotgraph.DotGraph.DEFAULT_HTML_IMAGE_FORMAT
-    dotgraph.DotGraph.DEFAULT_HTML_IMAGE_FORMAT = 'png'
-
-except AttributeError:
-
-    DotGraph_to_html = dotgraph.DotGraph.to_html
-    DotGraph_run_dot = dotgraph.DotGraph._run_dot
-
-    def to_html(self, image_file, image_url, center=True):
-        if image_file[-4:] == '.gif':
-            image_file = image_file[:-4] + '.png'
-        if image_url[-4:] == '.gif':
-            image_url = image_url[:-4] +  '.png'
-        return DotGraph_to_html(self, image_file, image_url)
-
-    def _run_dot(self, *options):
-        if '-Tgif' in options:
-            opts = list(options)
-            for i, o in enumerate(opts):
-                if o == '-Tgif': opts[i] = '-Tpng'
-            options = type(options)(opts)
-        return DotGraph_run_dot(self, *options)
-
-    dotgraph.DotGraph.to_html = to_html
-    dotgraph.DotGraph._run_dot = _run_dot
-
-# --------------------------------------------------------------------
-
-import re
-
-_SIGNATURE_RE = re.compile(
-    # Class name (for builtin methods)
-    r'^\s*((?P<class>\w+)\.)?' +
-    # The function name
-    r'(?P<func>\w+)' +
-    # The parameters
-    r'\(((?P<self>(?:self|cls|mcs)),?)?(?P<params>.*)\)' +
-    # The return value (optional)
-    r'(\s*(->)\s*(?P<return>\S.*?))?'+
-    # The end marker
-    r'\s*(\n|\s+(--|<=+>)\s+|$|\.\s+|\.\n)')
-
-from epydoc import docstringparser as dsp
-dsp._SIGNATURE_RE = _SIGNATURE_RE
-
-# --------------------------------------------------------------------
-
-import sys, os
-import epydoc.cli
-
-def epydocify():
-    dirname = os.path.dirname(__file__)
-    config = os.path.join(dirname, 'epydoc.cfg')
-    sys.argv.append('--config=' + config)
-    epydoc.cli.cli()
-
-if __name__ == '__main__':
-    epydocify()
-
-# --------------------------------------------------------------------
diff --git a/wrappers/numpy/conf/mpiconfig.py b/wrappers/numpy/conf/mpiconfig.py
deleted file mode 100644
index 146d2c2..0000000
--- a/wrappers/numpy/conf/mpiconfig.py
+++ /dev/null
@@ -1,363 +0,0 @@
-import sys, os, platform, re
-
-from distutils import sysconfig
-from distutils.util  import convert_path
-from distutils.util  import split_quoted
-from distutils.spawn import find_executable
-from distutils import log
-
-try:
-    from collections import OrderedDict
-except ImportError:
-    OrderedDict = dict
-
-try:
-    from configparser import ConfigParser
-    from configparser import Error as ConfigParserError
-except ImportError:
-    from ConfigParser import ConfigParser
-    from ConfigParser import Error as ConfigParserError
-
-class Config(object):
-
-    def __init__(self, logger=None):
-        self.log = logger or log
-        self.section  = None
-        self.filename = None
-        self.compiler_info = OrderedDict((
-                ('mpicc'  , None),
-                ('mpicxx' , None),
-                ('mpif77' , None),
-                ('mpif90' , None),
-                ('mpif95' , None),
-                ('mpild'  , None),
-                ))
-        self.library_info = OrderedDict((
-            ('define_macros'        , []),
-            ('undef_macros'         , []),
-            ('include_dirs'         , []),
-
-            ('libraries'            , []),
-            ('library_dirs'         , []),
-            ('runtime_library_dirs' , []),
-
-            ('extra_compile_args'   , []),
-            ('extra_link_args'      , []),
-            ('extra_objects'        , []),
-            ))
-
-    def __bool__(self):
-        for v in self.compiler_info.values():
-            if v:
-                return True
-        for v in self.library_info.values():
-            if v:
-                return True
-        return False
-
-    __nonzero__ = __bool__
-
-    def get(self, k, d=None):
-        if k in self.compiler_info:
-            return self.compiler_info[k]
-        if k in self.library_info:
-            return self.library_info[k]
-        return d
-
-    def info(self, log=None):
-        if log is None: log = self.log
-        mpicc  = self.compiler_info.get('mpicc')
-        mpicxx = self.compiler_info.get('mpicxx')
-        mpif77 = self.compiler_info.get('mpif77')
-        mpif90 = self.compiler_info.get('mpif90')
-        mpif95 = self.compiler_info.get('mpif95')
-        mpild  = self.compiler_info.get('mpild')
-        if mpicc:
-            log.info("MPI C compiler:    %s", mpicc)
-        if mpicxx:
-            log.info("MPI C++ compiler:  %s", mpicxx)
-        if mpif77:
-            log.info("MPI F77 compiler:  %s", mpif77)
-        if mpif90:
-            log.info("MPI F90 compiler:  %s", mpif90)
-        if mpif95:
-            log.info("MPI F95 compiler:  %s", mpif95)
-        if mpild:
-            log.info("MPI linker:        %s", mpild)
-
-    def update(self, config, **more):
-        if hasattr(config, 'keys'):
-            config = config.items()
-        for option, value in config:
-            if option in self.compiler_info:
-                self.compiler_info[option] = value
-            if option in self.library_info:
-                self.library_info[option] = value
-        if more:
-            self.update(more)
-
-    def setup(self, options, environ=None):
-        if environ is None: environ = os.environ
-        self.setup_library_info(options, environ)
-        self.setup_compiler_info(options, environ)
-
-    def setup_library_info(self, options, environ):
-        filename = section = None
-        mpiopt = getattr(options, 'mpi', None)
-        mpiopt = environ.get('MPICFG', mpiopt)
-        if mpiopt:
-            if ',' in mpiopt:
-                section, filename = mpiopt.split(',', 1)
-            else:
-                section = mpiopt
-        if not filename: filename = "mpi.cfg"
-        if not section:  section  = "mpi"
-
-        sections = [section+"-"+sys.platform, section]
-        self.load(filename, sections)
-        if not self:
-            if os.name == 'posix':
-                self._setup_posix()
-            if sys.platform == 'win32':
-                self._setup_windows()
-
-    def _setup_posix(self):
-        pass
-
-    def _setup_windows(self):
-        from glob import glob
-        ProgramFiles = os.environ.get('ProgramFiles', '')
-        for (name, install_suffix) in (
-            ('mpich2',   'MPICH2'),
-            ('openmpi',  'OpenMPI'),
-            ('openmpi',  'OpenMPI*'),
-            ('deinompi', 'DeinoMPI'),
-            ('msmpi',    'Microsoft HPC Pack 2008 SDK'),
-            ):
-            mpi_dir = os.path.join(ProgramFiles, install_suffix)
-            if '*' in mpi_dir:
-                dirs = glob(mpi_dir)
-                if dirs:
-                    mpi_dir = max(dirs)
-            if not os.path.isdir(mpi_dir):
-                continue
-            define_macros = []
-            include_dir = os.path.join(mpi_dir, 'include')
-            library = 'mpi'
-            library_dir = os.path.join(mpi_dir, 'lib')
-            if name == 'openmpi':
-                define_macros.append(('OMPI_IMPORTS', None))
-                library = 'libmpi'
-            if name == 'msmpi':
-                library = 'msmpi'
-                bits = platform.architecture()[0]
-                if bits == '32bit':
-                    library_dir = os.path.join(library_dir, 'i386')
-                if bits == '64bit':
-                    library_dir = os.path.join(library_dir, 'amd64')
-            self.library_info.update(
-                define_macros=define_macros,
-                include_dirs=[include_dir],
-                libraries=[library],
-                library_dirs=[library_dir],
-                )
-            self.section = name
-            self.filename = [mpi_dir]
-            break
-
-
-    def setup_compiler_info(self, options, environ):
-        def find_exe(cmd, path=None):
-            if not cmd: return None
-            parts = split_quoted(cmd)
-            exe, args = parts[0], parts[1:]
-            if not os.path.isabs(exe) and path:
-                exe = os.path.basename(exe)
-            exe = find_executable(exe, path)
-            if not exe: return None
-            return ' '.join([exe]+args)
-        COMPILERS = (
-            ('mpicc',  ['mpicc',  'mpcc_r']),
-            ('mpicxx', ['mpicxx', 'mpic++', 'mpiCC', 'mpCC_r']),
-            ('mpif77', ['mpif77', 'mpf77_r']),
-            ('mpif90', ['mpif90', 'mpf90_r']),
-            ('mpif95', ['mpif95', 'mpf95_r']),
-            ('mpild',  []),
-            )
-        #
-        compiler_info = {}
-        PATH = environ.get('PATH', '')
-        for name, _ in COMPILERS:
-            cmd = (environ.get(name.upper()) or
-                   getattr(options, name, None) or
-                   self.compiler_info.get(name) or
-                   None)
-            if cmd:
-                exe = find_exe(cmd, path=PATH)
-                if exe:
-                    path = os.path.dirname(exe)
-                    PATH = path + os.path.pathsep + PATH
-                    compiler_info[name] = exe
-                else:
-                    self.log.error("error: '%s' not found", cmd)
-        #
-        if not self and not compiler_info:
-            for name, candidates in COMPILERS:
-                for cmd in candidates:
-                    cmd = find_exe(cmd)
-                    if cmd:
-                        compiler_info[name] = cmd
-                        break
-        #
-        self.compiler_info.update(compiler_info)
-
-
-    def load(self, filename="mpi.cfg", section='mpi'):
-        if isinstance(filename, str):
-            filenames = filename.split(os.path.pathsep)
-        else:
-            filenames = list(filename)
-        if isinstance(section, str):
-            sections = section.split(',')
-        else:
-            sections = list(section)
-        #
-        try:
-            parser = ConfigParser(dict_type=OrderedDict)
-        except TypeError:
-            parser = ConfigParser()
-        try:
-            read_ok = parser.read(filenames)
-        except ConfigParserError:
-            self.log.error(
-                "error: parsing configuration file/s '%s'",
-                os.path.pathsep.join(filenames))
-            return None
-        for section in sections:
-            if parser.has_section(section):
-                break
-            section = None
-        if not section:
-            self.log.error(
-                "error: section/s '%s' not found in file/s '%s'",
-                ','.join(sections), os.path.pathsep.join(filenames))
-            return None
-        parser_items = list(parser.items(section, vars=None))
-        #
-        compiler_info = type(self.compiler_info)()
-        for option, value in parser_items:
-            if option in self.compiler_info:
-                compiler_info[option] = value
-        #
-        pathsep = os.path.pathsep
-        expanduser = os.path.expanduser
-        expandvars = os.path.expandvars
-        library_info = type(self.library_info)()
-        for k, v in parser_items:
-            if k in ('define_macros',
-                     'undef_macros',
-                     ):
-                macros = [e.strip() for e in v.split(',')]
-                if k == 'define_macros':
-                    for i, m in enumerate(macros):
-                        try: # -DFOO=bar
-                            idx = m.index('=')
-                            macro = (m[:idx], m[idx+1:] or None)
-                        except ValueError: # -DFOO
-                            macro = (m, None)
-                        macros[i] = macro
-                library_info[k] = macros
-            elif k in ('include_dirs',
-                       'library_dirs',
-                       'runtime_dirs',
-                       'runtime_library_dirs',
-                       ):
-                if k == 'runtime_dirs': k = 'runtime_library_dirs'
-                pathlist = [p.strip() for p in v.split(pathsep)]
-                library_info[k] = [expanduser(expandvars(p))
-                                   for p in pathlist if p]
-            elif k == 'libraries':
-                library_info[k] = [e.strip() for e in split_quoted(v)]
-            elif k in ('extra_compile_args',
-                       'extra_link_args',
-                       ):
-                library_info[k] = split_quoted(v)
-            elif k == 'extra_objects':
-                library_info[k] = [expanduser(expandvars(e))
-                                   for e in split_quoted(v)]
-            elif hasattr(self, k):
-                library_info[k] = v.strip()
-            else:
-                pass
-        #
-        self.section = section
-        self.filename = read_ok
-        self.compiler_info.update(compiler_info)
-        self.library_info.update(library_info)
-        return compiler_info, library_info, section, read_ok
-
-    def dump(self, filename=None, section='mpi'):
-        # prepare configuration values
-        compiler_info   = self.compiler_info.copy()
-        library_info = self.library_info.copy()
-        for k in library_info:
-            if k in ('define_macros',
-                     'undef_macros',
-                     ):
-                macros = library_info[k]
-                if k == 'define_macros':
-                    for i, (m, v) in enumerate(macros):
-                        if v is None:
-                            macros[i] = m
-                        else:
-                            macros[i] = '%s=%s' % (m, v)
-                library_info[k] = ','.join(macros)
-            elif k in ('include_dirs',
-                       'library_dirs',
-                       'runtime_library_dirs',
-                       ):
-                library_info[k] = os.path.pathsep.join(library_info[k])
-            elif isinstance(library_info[k], list):
-                library_info[k] = ' '.join(library_info[k])
-        # fill configuration parser
-        try:
-            parser = ConfigParser(dict_type=OrderedDict)
-        except TypeError:
-            parser = ConfigParser()
-        parser.add_section(section)
-        for option, value in compiler_info.items():
-            if not value: continue
-            parser.set(section, option, value)
-        for option, value in library_info.items():
-            if not value: continue
-            parser.set(section, option, value)
-        # save configuration file
-        if filename is None:
-            parser.write(sys.stdout)
-        elif hasattr(filename, 'write'):
-            parser.write(filename)
-        elif isinstance(filename, str):
-            f = open(filename, 'wt')
-            try:
-                parser.write(f)
-            finally:
-                f.close()
-        return parser
-
-
-if __name__ == '__main__':
-
-    import optparse
-    parser = optparse.OptionParser()
-    parser.add_option("--mpi",    type="string")
-    parser.add_option("--mpicc",  type="string")
-    parser.add_option("--mpicxx", type="string")
-    parser.add_option("--mpif90", type="string")
-    parser.add_option("--mpif77", type="string")
-    parser.add_option("--mpild",  type="string")
-    (options, args) = parser.parse_args()
-
-    logger = log.Log(log.INFO)
-    conf = Config(logger)
-    conf.setup(options)
-    conf.dump()
diff --git a/wrappers/numpy/conf/mpiconfig.pyc b/wrappers/numpy/conf/mpiconfig.pyc
deleted file mode 100644
index c26b84d..0000000
Binary files a/wrappers/numpy/conf/mpiconfig.pyc and /dev/null differ
diff --git a/wrappers/numpy/conf/mpidistutils.py b/wrappers/numpy/conf/mpidistutils.py
deleted file mode 100644
index 6fe9b80..0000000
--- a/wrappers/numpy/conf/mpidistutils.py
+++ /dev/null
@@ -1,1534 +0,0 @@
-# Author:  Lisandro Dalcin
-# Contact: dalcinl at gmail.com
-
-"""
-Support for building mpi4py with distutils.
-"""
-
-# -----------------------------------------------------------------------------
-
-import sys
-if sys.version[:3] == '3.0':
-    from distutils import version
-    version.cmp = lambda a, b : (a > b) - (a < b)
-    del version
-del sys
-
-# -----------------------------------------------------------------------------
-
-import sys, os, platform, re
-from distutils import sysconfig
-from distutils.util  import convert_path
-from distutils.util  import split_quoted
-from distutils.spawn import find_executable
-from distutils import log
-
-def fix_config_vars(names, values):
-    values = list(values)
-    if sys.platform == 'darwin':
-        if 'ARCHFLAGS' in os.environ:
-            ARCHFLAGS = os.environ['ARCHFLAGS']
-            for i, flag in enumerate(list(values)):
-                flag, count = re.subn('-arch\s+\w+', ' ', flag)
-                if count and ARCHFLAGS:
-                    flag = flag + ' ' + ARCHFLAGS
-                values[i] = flag
-        if 'SDKROOT' in os.environ:
-            SDKROOT = os.environ['SDKROOT']
-            for i, flag in enumerate(list(values)):
-                flag, count = re.subn('-isysroot [^ \t]*', ' ', flag)
-                if count and SDKROOT:
-                    flag = flag + ' ' + '-isysroot ' + SDKROOT
-                values[i] = flag
-    return values
-
-def get_config_vars(*names):
-    # Core Python configuration
-    values = sysconfig.get_config_vars(*names)
-    # Do any distutils flags fixup right now
-    values = fix_config_vars(names, values)
-    return values
-
-def fix_compiler_cmd(cc, mpicc):
-    if not mpicc: return cc
-    if not cc:    return mpicc
-    from os.path import basename
-    cc = split_quoted(cc)
-    i = 0
-    while basename(cc[i]) == 'env':
-        i = 1
-        while '=' in cc[i]:
-            i = i + 1
-    cc[i] = mpicc
-    return ' '.join(cc)
-
-def fix_linker_cmd(ld, mpild):
-    if not mpild: return ld
-    if not ld:    return mpild
-    from os.path import basename
-    ld = split_quoted(ld)
-    i = 0
-    if (sys.platform.startswith('aix') and
-        basename(ld[i]) == 'ld_so_aix'):
-        i = i + 1
-    while basename(ld[i]) == 'env':
-        i = i + 1
-        while '=' in ld[i]:
-            i = i + 1
-    ld[i] = mpild
-    return ' '.join(ld)
-
-def split_linker_cmd(ld):
-    from os.path import basename
-    ld = split_quoted(ld)
-    i = 0
-    if (sys.platform.startswith('aix') and
-        basename(pyld[i]) == 'ld_so_aix'):
-        i = i + 1
-    while basename(ld[i]) == 'env':
-        i = i + 1
-        while '=' in ld[i]:
-            i = i + 1
-    p = i + 1
-    ld, flags = ' '.join(ld[:p]), ' '.join(ld[p:])
-    return ld, flags
-
-from distutils.unixccompiler import UnixCCompiler
-rpath_option_orig = UnixCCompiler.runtime_library_dir_option
-def rpath_option(compiler, dir):
-    option = rpath_option_orig(compiler, dir)
-    if sys.platform.startswith('linux'):
-        if option.startswith('-R'):
-            option =  option.replace('-R', '-Wl,-rpath,', 1)
-        elif option.startswith('-Wl,-R,'):
-            option =  option.replace('-Wl,-R,', '-Wl,-rpath,', 1)
-    return option
-UnixCCompiler.runtime_library_dir_option = rpath_option
-
-def customize_compiler(compiler, lang=None,
-                       mpicc=None, mpicxx=None, mpild=None,
-                       environ=None):
-    if environ is None:
-        environ = os.environ
-    if compiler.compiler_type == 'unix':
-        # Distutils configuration, actually obtained by parsing
-        # :file:{prefix}/lib[32|64]/python{X}.{Y}/config/Makefile
-        (cc, cxx, ccshared, ld,
-         basecflags, opt) = get_config_vars (
-            'CC', 'CXX', 'CCSHARED', 'LDSHARED',
-            'BASECFLAGS', 'OPT')
-        cc  = cc  .replace('-pthread', '')
-        cxx = cxx .replace('-pthread', '')
-        ld  = ld  .replace('-pthread', '')
-        ld, ldshared = split_linker_cmd(ld)
-        basecflags, opt = basecflags or '', opt or ''
-        ccshared = ccshared or ''
-        ldshared = ldshared or ''
-        # Compiler command overriding
-        if not mpild and (mpicc or mpicxx):
-            if lang == 'c':
-                mpild = mpicc
-            elif lang == 'c++':
-                mpild = mpicxx
-            else:
-                mpild = mpicc or mpicxx
-        if mpicc:
-            cc = fix_compiler_cmd(cc, mpicc)
-        if mpicxx:
-            cxx = fix_compiler_cmd(cxx, mpicxx)
-        if mpild:
-            ld = fix_linker_cmd(ld, mpild)
-        # Environment handling
-        cppflags = cflags = cxxflags = ldflags = ''
-        CPPFLAGS = environ.get('CPPFLAGS', '')
-        CFLAGS   = environ.get('CFLAGS',   '')
-        CXXFLAGS = environ.get('CXXFLAGS', '')
-        LDFLAGS  = environ.get('LDFLAGS',  '')
-        if CPPFLAGS:
-            cppflags = cppflags + ' ' + CPPFLAGS
-            cflags   = cflags   + ' ' + CPPFLAGS
-            cxxflags = cxxflags + ' ' + CPPFLAGS
-            ldflags  = ldflags  + ' ' + CPPFLAGS
-        if CFLAGS:
-            cflags   = cflags   + ' ' + CFLAGS
-            ldflags  = ldflags  + ' ' + CFLAGS
-        if CXXFLAGS:
-            cxxflags = cxxflags + ' ' + CXXFLAGS
-            ldflags  = ldflags  + ' ' + CXXFLAGS
-        if LDFLAGS:
-            ldflags  = ldflags  + ' ' + LDFLAGS
-        basecflags = environ.get('BASECFLAGS', basecflags)
-        opt        = environ.get('OPT',        opt       )
-        ccshared   = environ.get('CCSHARED', ccshared)
-        ldshared   = environ.get('LDSHARED', ldshared)
-        cflags     = ' '.join((basecflags, opt, cflags))
-        cxxflags   = ' '.join((basecflags, opt, cxxflags))
-        cxxflags = cxxflags.replace('-Wstrict-prototypes', '')
-        # Distutils compiler setup
-        cpp    = os.environ.get('CPP') or (cc + ' -E')
-        cc_so  = cc  + ' ' + ccshared
-        cxx_so = cxx + ' ' + ccshared
-        ld_so  = ld  + ' ' + ldshared
-        compiler.set_executables(
-            preprocessor = cpp    + ' ' + cppflags,
-            compiler     = cc     + ' ' + cflags,
-            compiler_so  = cc_so  + ' ' + cflags,
-            compiler_cxx = cxx_so + ' ' + cxxflags,
-            linker_so    = ld_so  + ' ' + ldflags,
-            linker_exe   = ld     + ' ' + ldflags,
-            )
-        try: compiler.compiler_cxx.remove('-Wstrict-prototypes')
-        except: pass
-    if compiler.compiler_type == 'mingw32':
-        compiler.set_executables(
-            preprocessor = 'gcc -mno-cygwin -E',
-            )
-    if compiler.compiler_type in ('unix', 'cygwin', 'mingw32'):
-        if lang == 'c++':
-            def find_cmd_pos(cmd):
-                pos = 0
-                if os.path.basename(cmd[pos]) == "env":
-                    pos = 1
-                    while '=' in cmd[pos]:
-                        pos = pos + 1
-                return pos
-            i = find_cmd_pos(compiler.compiler_so)
-            j = find_cmd_pos(compiler.compiler_cxx)
-            compiler.compiler_so[i] = compiler.compiler_cxx[j]
-            try: compiler.compiler_so.remove('-Wstrict-prototypes')
-            except: pass
-    if compiler.compiler_type == 'msvc':
-        if not compiler.initialized:
-            compiler.initialize()
-        compiler.ldflags_shared.append('/MANIFEST')
-        compiler.ldflags_shared_debug.append('/MANIFEST')
-
-# -----------------------------------------------------------------------------
-
-try:
-    from mpiconfig import Config
-except ImportError:
-    from conf.mpiconfig import Config
-
-def configuration(command_obj, verbose=True):
-    config = Config()
-    config.setup(command_obj)
-    if verbose:
-        if config.section and config.filename:
-            log.info("MPI configuration: [%s] from '%s'",
-                     config.section, ','.join(config.filename))
-            config.info(log)
-    return config
-
-def configure_compiler(compiler, config, lang=None):
-    #
-    mpicc  = config.get('mpicc')
-    mpicxx = config.get('mpicxx')
-    mpild  = config.get('mpild')
-    customize_compiler(compiler, lang,
-                       mpicc=mpicc, mpicxx=mpicxx, mpild=mpild)
-    #
-    for k, v in config.get('define_macros', []):
-        compiler.define_macro(k, v)
-    for v in config.get('undef_macros', []):
-        compiler.undefine_macro(v)
-    for v in config.get('include_dirs', []):
-        compiler.add_include_dir(v)
-    for v in config.get('libraries', []):
-        compiler.add_library(v)
-    for v in config.get('library_dirs', []):
-        compiler.add_library_dir(v)
-    for v in config.get('runtime_library_dirs', []):
-        compiler.add_runtime_library_dir(v)
-    for v in config.get('extra_objects', []):
-        compiler.add_link_object(v)
-    if compiler.compiler_type in \
-        ('unix', 'intel', 'cygwin', 'mingw32'):
-        cc_args = config.get('extra_compile_args', [])
-        ld_args = config.get('extra_link_args', [])
-        compiler.compiler += cc_args
-        compiler.compiler_so += cc_args
-        compiler.compiler_cxx += cc_args
-        compiler.linker_so += ld_args
-        compiler.linker_exe += ld_args
-    return compiler
-
-# -----------------------------------------------------------------------------
-
-try:
-    from mpiscanner import Scanner
-except ImportError:
-    try:
-        from conf.mpiscanner import Scanner
-    except ImportError:
-        class Scanner(object):
-            def parse_file(self, *args):
-                raise NotImplementedError(
-                    "You forgot to grab 'mpiscanner.py'")
-
-class ConfigureMPI(object):
-
-    SRCDIR = 'src'
-    SOURCES = [os.path.join('include', 'mpi4py', 'mpi.pxi')]
-    DESTDIR = 'src'
-    CONFIG_H = 'config.h'
-    MISSING_H = 'missing.h'
-
-    def __init__(self, config_cmd):
-        self.scanner = Scanner()
-        for filename in self.SOURCES:
-            fullname = os.path.join(self.SRCDIR, filename)
-            self.scanner.parse_file(fullname)
-        self.config_cmd = config_cmd
-
-    def run(self):
-        results = []
-        for name, code in self.scanner.itertests():
-            log.info("checking for '%s' ..." % name)
-            body = self.gen_one(results, code)
-            ok   = self.run_one(body)
-            if not ok:
-                log.info("**** failed check for '%s'" % name)
-            results.append((name, ok))
-        return results
-
-    def dump(self, results):
-        destdir = self.DESTDIR
-        config_h  = os.path.join(destdir, self.CONFIG_H)
-        missing_h = os.path.join(destdir, self.MISSING_H)
-        log.info("writing '%s'", config_h)
-        self.scanner.dump_config_h(config_h, results)
-        log.info("writing '%s'", missing_h)
-        self.scanner.dump_missing_h(missing_h, None)
-
-    def gen_one(self, results, code):
-        #
-        configtest_h = "_configtest.h"
-        self.config_cmd.temp_files.insert(0, configtest_h)
-        fh = open(configtest_h, "w")
-        try:
-            sep = "/* " + ('-'*72)+ " */\n"
-            fh.write(sep)
-            self.scanner.dump_config_h(fh, results)
-            fh.write(sep)
-            self.scanner.dump_missing_h(fh, results)
-            fh.write(sep)
-        finally:
-            fh.close()
-        #
-        body = ['#include "%s"' % configtest_h,
-                'int main(int argc, char **argv) {',
-                '  %s' % code,
-                '  return 0;',
-                '}']
-        body = '\n'.join(body) + '\n'
-        return body
-
-    def run_one(self, body, lang='c'):
-        ok = self.config_cmd.try_link(body, headers=['mpi.h'], lang=lang)
-        return ok
-
-# -----------------------------------------------------------------------------
-
-cmd_mpi_opts = [
-
-    ('mpild=',   None,
-     "MPI linker command, "
-     "overridden by environment variable 'MPILD' "
-     "(defaults to 'mpicc' or 'mpicxx' if any is available)"),
-
-    ('mpif77=',  None,
-     "MPI F77 compiler command, "
-     "overridden by environment variable 'MPIF77' "
-     "(defaults to 'mpif77' if available)"),
-
-    ('mpif90=',  None,
-     "MPI F90 compiler command, "
-     "overridden by environment variable 'MPIF90' "
-     "(defaults to 'mpif90' if available)"),
-
-    ('mpif95=',  None,
-     "MPI F95 compiler command, "
-     "overridden by environment variable 'MPIF95' "
-     "(defaults to 'mpif95' if available)"),
-
-    ('mpicxx=',  None,
-     "MPI C++ compiler command, "
-     "overridden by environment variable 'MPICXX' "
-     "(defaults to 'mpicxx', 'mpiCC', or 'mpic++' if any is available)"),
-
-    ('mpicc=',   None,
-     "MPI C compiler command, "
-     "overridden by environment variables 'MPICC' "
-     "(defaults to 'mpicc' if available)"),
-
-    ('mpi=',     None,
-     "specify a configuration section, "
-     "and an optional list of configuration files "
-     + "(e.g. --mpi=section,file1" + os.path.pathsep + "file2), " +
-     "to look for MPI includes/libraries, "
-     "overridden by environment variable 'MPICFG' "
-     "(defaults to section 'mpi' in configuration file 'mpi.cfg')"),
-
-    ('configure', None,
-     "exhaustive test for checking missing MPI constants/types/functions"),
-
-    ]
-
-def cmd_get_mpi_options(cmd_opts):
-    optlist = []
-    for (option, _, _) in cmd_opts:
-        if option[-1] == '=':
-            option = option[:-1]
-        option = option.replace('-','_')
-        optlist.append(option)
-    return optlist
-
-def cmd_initialize_mpi_options(cmd):
-    mpiopts = cmd_get_mpi_options(cmd_mpi_opts)
-    for op in mpiopts:
-        setattr(cmd, op, None)
-
-def cmd_set_undefined_mpi_options(cmd, basecmd):
-    mpiopts = cmd_get_mpi_options(cmd_mpi_opts)
-    optlist = tuple(zip(mpiopts, mpiopts))
-    cmd.set_undefined_options(basecmd, *optlist)
-
-# -----------------------------------------------------------------------------
-
-from distutils.core import setup        as fcn_setup
-from distutils.core import Distribution as cls_Distribution
-from distutils.core import Extension    as cls_Extension
-from distutils.core import Command
-
-from distutils.command import config  as cmd_config
-from distutils.command import build   as cmd_build
-from distutils.command import install as cmd_install
-from distutils.command import sdist   as cmd_sdist
-from distutils.command import clean   as cmd_clean
-
-from distutils.command import build_py     as cmd_build_py
-from distutils.command import build_clib   as cmd_build_clib
-from distutils.command import build_ext    as cmd_build_ext
-from distutils.command import install_data as cmd_install_data
-from distutils.command import install_lib  as cmd_install_lib
-
-from distutils.errors import DistutilsError
-from distutils.errors import DistutilsSetupError
-from distutils.errors import DistutilsPlatformError
-from distutils.errors import DistutilsOptionError
-from distutils.errors import CCompilerError
-
-# -----------------------------------------------------------------------------
-
-# Distribution class supporting a 'executables' keyword
-
-class Distribution(cls_Distribution):
-
-    def __init__ (self, attrs=None):
-        # support for pkg data
-        self.package_data = {}
-        # PEP 314
-        self.provides = None
-        self.requires = None
-        self.obsoletes = None
-        # supports 'executables' keyword
-        self.executables = None
-        cls_Distribution.__init__(self, attrs)
-
-    def has_executables(self):
-        return self.executables and len(self.executables) > 0
-
-    def is_pure (self):
-        return (cls_Distribution.is_pure(self) and
-                not self.has_executables())
-
-# Extension class
-
-class Extension(cls_Extension):
-    def __init__ (self, **kw):
-        optional = kw.pop('optional', None)
-        configure = kw.pop('configure', None)
-        cls_Extension.__init__(self, **kw)
-        self.optional = optional
-        self.configure = configure
-
-# Library class
-
-class Library(Extension):
-    def __init__ (self, **kw):
-        kind = kw.pop('kind', "static")
-        package = kw.pop('package', None)
-        dest_dir = kw.pop('dest_dir', None)
-        Extension.__init__(self, **kw)
-        self.kind = kind
-        self.package = package
-        self.dest_dir = dest_dir
-
-# Executable class
-
-class Executable(Extension):
-    def __init__ (self, **kw):
-        package = kw.pop('package', None)
-        dest_dir = kw.pop('dest_dir', None)
-        Extension.__init__(self, **kw)
-        self.package = package
-        self.dest_dir = dest_dir
-
-# setup function
-
-def setup(**attrs):
-    if 'distclass' not in attrs:
-        attrs['distclass'] = Distribution
-    if 'cmdclass' not in attrs:
-        attrs['cmdclass'] = {}
-    cmdclass = attrs['cmdclass']
-    for cmd in (config, build, install,
-                test, clean, sdist,
-                build_src, build_py,
-                build_clib, build_ext, build_exe,
-                install_lib, install_data, install_exe,
-                ):
-        if cmd.__name__ not in cmdclass:
-            cmdclass[cmd.__name__] = cmd
-    return fcn_setup(**attrs)
-
-# -----------------------------------------------------------------------------
-
-# A minimalistic MPI program :-)
-
-ConfigTest = """\
-int main(int argc, char **argv)
-{
-  int ierr;
-  ierr = MPI_Init(&argc, &argv);
-  if (ierr) return -1;
-  ierr = MPI_Finalize();
-  if (ierr) return -1;
-  return 0;
-}
-"""
-
-class config(cmd_config.config):
-
-    user_options = cmd_config.config.user_options + cmd_mpi_opts
-
-    def initialize_options (self):
-        cmd_config.config.initialize_options(self)
-        cmd_initialize_mpi_options(self)
-        self.noisy = 0
-
-    def finalize_options (self):
-        cmd_config.config.finalize_options(self)
-        if not self.noisy:
-            self.dump_source = 0
-
-    def _clean(self, *a, **kw):
-        if sys.platform.startswith('win'):
-            for fn in ('_configtest.exe.manifest', ):
-                if os.path.exists(fn):
-                    self.temp_files.append(fn)
-        cmd_config.config._clean(self, *a, **kw)
-
-    def check_header (self, header, headers=None, include_dirs=None):
-        if headers is None: headers = []
-        log.info("checking for header '%s' ..." % header)
-        body = "int main(int n, char**v) { return 0; }"
-        ok = self.try_compile(body, list(headers) + [header], include_dirs)
-        log.info(ok and 'success!' or 'failure.')
-        return ok
-
-    def check_macro (self, macro, headers=None, include_dirs=None):
-        log.info("checking for macro '%s' ..." % macro)
-        body = ("#ifndef %s\n"
-                "#error macro '%s' not defined\n"
-                "#endif\n") % (macro, macro)
-        body += "int main(int n, char**v) { return 0; }\n"
-        ok = self.try_compile(body, headers, include_dirs)
-        return ok
-
-    def check_library (self, library, library_dirs=None,
-                   headers=None, include_dirs=None,
-                   other_libraries=[], lang="c"):
-        log.info("checking for library '%s' ..." % library)
-        body = "int main(int n, char**v) { return 0; }"
-        ok = self.try_link(body,  headers, include_dirs,
-                           [library]+other_libraries, library_dirs,
-                           lang=lang)
-        return ok
-
-    def check_function (self, function,
-                        headers=None, include_dirs=None,
-                        libraries=None, library_dirs=None,
-                        decl=0, call=0, lang="c"):
-        log.info("checking for function '%s' ..." % function)
-        body = []
-        if decl:
-            if call: proto = "int %s (void);"
-            else:    proto = "int %s;"
-            if lang == "c":
-                proto = "\n".join([
-                        "#ifdef __cplusplus",
-                        "extern \"C\"",
-                        "#endif", proto])
-            body.append(proto % function)
-        body.append(    "int main (int n, char**v) {")
-        if call:
-            body.append("  (void)%s();" % function)
-        else:
-            body.append("  %s;" % function)
-        body.append(    "  return 0;")
-        body.append(    "}")
-        body = "\n".join(body) + "\n"
-        ok = self.try_link(body, headers, include_dirs,
-                           libraries, library_dirs, lang=lang)
-        return ok
-
-    def check_symbol (self, symbol, type="int",
-                      headers=None, include_dirs=None,
-                      libraries=None, library_dirs=None,
-                      decl=0, lang="c"):
-        log.info("checking for symbol '%s' ..." % symbol)
-        body = []
-        if decl:
-            body.append("%s %s;" % (type, symbol))
-        body.append("int main (int n, char**v) {")
-        body.append("  %s v; v = %s;" % (type, symbol))
-        body.append("  return 0;")
-        body.append("}")
-        body = "\n".join(body) + "\n"
-        ok = self.try_link(body, headers, include_dirs,
-                           libraries, library_dirs, lang=lang)
-        return ok
-
-    check_hdr  = check_header
-    check_lib  = check_library
-    check_func = check_function
-    check_sym  = check_symbol
-
-    def run (self):
-        #
-        config = configuration(self, verbose=True)
-        # test MPI C compiler
-        self.compiler = getattr(
-            self.compiler, 'compiler_type', self.compiler)
-        self._check_compiler()
-        configure_compiler(self.compiler, config, lang='c')
-        self.try_link(ConfigTest, headers=['mpi.h'], lang='c')
-        # test MPI C++ compiler
-        self.compiler = getattr(
-            self.compiler, 'compiler_type', self.compiler)
-        self._check_compiler()
-        configure_compiler(self.compiler, config, lang='c++')
-        self.try_link(ConfigTest, headers=['mpi.h'], lang='c++')
-
-
-class build(cmd_build.build):
-
-    user_options = cmd_build.build.user_options + cmd_mpi_opts
-
-    def initialize_options(self):
-        cmd_build.build.initialize_options(self)
-        cmd_initialize_mpi_options(self)
-
-    def finalize_options(self):
-        cmd_build.build.finalize_options(self)
-        config_cmd = self.get_finalized_command('config')
-        if isinstance(config_cmd, config):
-            cmd_set_undefined_mpi_options(self, 'config')
-
-    def has_executables (self):
-        return self.distribution.has_executables()
-
-    sub_commands = \
-        [('build_src', lambda *args: True)] + \
-        cmd_build.build.sub_commands + \
-        [('build_exe', has_executables),
-         ]
-
-
-class build_src(Command):
-    description = "build C sources from Cython files"
-    user_options = [
-        ('force', 'f',
-         "forcibly build everything (ignore file timestamps)"),
-        ]
-    boolean_options = ['force']
-    def initialize_options(self):
-        self.force = False
-    def finalize_options(self):
-        self.set_undefined_options('build',
-                                   ('force', 'force'),
-                                   )
-    def run(self):
-        pass
-
-
-class build_py(cmd_build_py.build_py):
-
-  if sys.version[:3] < '2.4':
-
-    def initialize_options(self):
-        self.package_data = None
-        cmd_build_py.build_py.initialize_options(self)
-
-    def finalize_options (self):
-        cmd_build_py.build_py.finalize_options(self)
-        self.package_data = self.distribution.package_data
-        self.data_files = self.get_data_files()
-
-    def run(self):
-        cmd_build_py.build_py.run(self)
-        if self.packages:
-            self.build_package_data()
-
-    def get_data_files (self):
-        """Generate list of '(package,src_dir,build_dir,filenames)' tuples"""
-        data = []
-        if not self.packages:
-            return data
-        for package in self.packages:
-            # Locate package source directory
-            src_dir = self.get_package_dir(package)
-
-            # Compute package build directory
-            build_dir = os.path.join(*([self.build_lib] + package.split('.')))
-
-            # Length of path to strip from found files
-            plen = len(src_dir)+1
-
-            # Strip directory from globbed filenames
-            filenames = [
-                file[plen:] for file in self.find_data_files(package, src_dir)
-                ]
-            data.append((package, src_dir, build_dir, filenames))
-        return data
-
-    def find_data_files (self, package, src_dir):
-        """Return filenames for package's data files in 'src_dir'"""
-        from glob import glob
-        globs = (self.package_data.get('', [])
-                 + self.package_data.get(package, []))
-        files = []
-        for pattern in globs:
-            # Each pattern has to be converted to a platform-specific path
-            filelist = glob(os.path.join(src_dir, convert_path(pattern)))
-            # Files that match more than one pattern are only added once
-            files.extend([fn for fn in filelist if fn not in files])
-        return files
-
-    def get_package_dir (self, package):
-        """Return the directory, relative to the top of the source
-           distribution, where package 'package' should be found
-           (at least according to the 'package_dir' option, if any)."""
-        import string
-        path = string.split(package, '.')
-
-        if not self.package_dir:
-            if path:
-                return os.path.join(*path)
-            else:
-                return ''
-        else:
-            tail = []
-            while path:
-                try:
-                    pdir = self.package_dir[string.join(path, '.')]
-                except KeyError:
-                    tail.insert(0, path[-1])
-                    del path[-1]
-                else:
-                    tail.insert(0, pdir)
-                    return os.path.join(*tail)
-            else:
-                pdir = self.package_dir.get('')
-                if pdir is not None:
-                    tail.insert(0, pdir)
-
-                if tail:
-                    return os.path.join(*tail)
-                else:
-                    return ''
-
-    def build_package_data (self):
-        """Copy data files into build directory"""
-        lastdir = None
-        for package, src_dir, build_dir, filenames in self.data_files:
-            for filename in filenames:
-                target = os.path.join(build_dir, filename)
-                self.mkpath(os.path.dirname(target))
-                self.copy_file(os.path.join(src_dir, filename), target,
-                               preserve_mode=False)
-
-
-# Command class to build libraries
-
-class build_clib(cmd_build_clib.build_clib):
-
-    user_options = [
-        ('build-clib-a=', 's',
-         "directory to build C/C++ static libraries to"),
-        ('build-clib-so=', 's',
-         "directory to build C/C++ shared libraries to"),
-        ]
-
-    user_options += cmd_build_clib.build_clib.user_options + cmd_mpi_opts
-
-    def initialize_options (self):
-        self.libraries = None
-        self.libraries_a = []
-        self.libraries_so = []
-
-        self.library_dirs = None
-        self.rpath = None
-        self.link_objects = None
-
-        self.build_lib = None
-        self.build_clib_a = None
-        self.build_clib_so = None
-        cmd_build_clib.build_clib.initialize_options(self)
-        cmd_initialize_mpi_options(self)
-
-    def finalize_options (self):
-        cmd_build_clib.build_clib.finalize_options(self)
-        build_cmd = self.get_finalized_command('build')
-        if isinstance(build_cmd,  build):
-            cmd_set_undefined_mpi_options(self, 'build')
-        #
-        self.set_undefined_options('build',
-                                   ('build_lib', 'build_lib'),
-                                   ('build_lib', 'build_clib_a'),
-                                   ('build_lib', 'build_clib_so'))
-        #
-        if self.libraries:
-            libraries = self.libraries[:]
-            self.libraries = []
-            self.check_library_list (libraries)
-            for i, lib in enumerate(libraries):
-                if isinstance(lib, Library):
-                    if lib.kind == "static":
-                        self.libraries_a.append(lib)
-                    else:
-                        self.libraries_so.append(lib)
-                else:
-                    self.libraries.append(lib)
-
-    def check_library_list (self, libraries):
-        ListType, TupleType = type([]), type(())
-        if not isinstance(libraries, ListType):
-            raise DistutilsSetupError(
-                "'libraries' option must be a list of "
-                "Library instances or 2-tuples")
-        for lib in libraries:
-            #
-            if isinstance(lib, Library):
-                lib_name = lib.name
-                build_info = lib.__dict__
-            elif isinstance(lib, TupleType) and len(lib) == 2:
-                lib_name, build_info = lib
-            else:
-                raise DistutilsSetupError(
-                    "each element of 'libraries' option must be an "
-                    "Library instance or 2-tuple")
-            #
-            if not isinstance(lib_name, str):
-                raise DistutilsSetupError(
-                    "first element of each tuple in 'libraries' "
-                    "must be a string (the library name)")
-            if '/' in lib_name or (os.sep != '/' and os.sep in lib_name):
-                raise DistutilsSetupError(
-                    "bad library name '%s': "
-                    "may not contain directory separators" % lib[0])
-            if not isinstance(build_info, dict):
-                raise DistutilsSetupError(
-                    "second element of each tuple in 'libraries' "
-                    "must be a dictionary (build info)")
-            lib_type = build_info.get('kind', 'static')
-            if lib_type not in ('static', 'shared', 'dylib'):
-                raise DistutilsSetupError(
-                    "in 'kind' option (library '%s'), "
-                    "'kind' must be one of "
-                    " \"static\", \"shared\", \"dylib\"" % lib_name)
-            sources = build_info.get('sources')
-            if (sources is None or
-                type(sources) not in (ListType, TupleType)):
-                raise DistutilsSetupError(
-                    "in 'libraries' option (library '%s'), "
-                    "'sources' must be present and must be "
-                    "a list of source filenames" % lib_name)
-            depends = build_info.get('depends')
-            if (depends is not None and
-                type(depends) not in (ListType, TupleType)):
-                raise DistutilsSetupError(
-                    "in 'libraries' option (library '%s'), "
-                    "'depends' must be a list "
-                    "of source filenames" % lib_name)
-
-    def run (self):
-        cmd_build_clib.build_clib.run(self)
-        if (not self.libraries_a and
-            not self.libraries_so):
-            return
-        #
-        from distutils.ccompiler import new_compiler
-        self.compiler = new_compiler(compiler=self.compiler,
-                                     dry_run=self.dry_run,
-                                     force=self.force)
-        #
-        if self.define is not None:
-            for (name, value) in self.define:
-                self.compiler.define_macro(name, value)
-        if self.undef is not None:
-            for macro in self.undef:
-                self.compiler.undefine_macro(macro)
-        if self.include_dirs is not None:
-            self.compiler.set_include_dirs(self.include_dirs)
-        if self.library_dirs is not None:
-            self.compiler.set_library_dirs(self.library_dirs)
-        if self.rpath is not None:
-            self.compiler.set_runtime_library_dirs(self.rpath)
-        if self.link_objects is not None:
-            self.compiler.set_link_objects(self.link_objects)
-        #
-        config = configuration(self, verbose=True)
-        configure_compiler(self.compiler, config)
-        #
-        self.build_libraries(self.libraries)
-        self.build_libraries(self.libraries_a)
-        self.build_libraries(self.libraries_so)
-
-    def build_libraries (self, libraries):
-        for lib in libraries:
-            # old-style
-            if not isinstance(lib, Library):
-                cmd_build_clib.build_clib.build_libraries(self, [lib])
-                continue
-            # new-style
-            try:
-                self.build_library(lib)
-            except (DistutilsError, CCompilerError):
-                if not lib.optional: raise
-                e = sys.exc_info()[1]
-                self.warn('building library "%s" failed' % lib.name)
-                self.warn('%s' % e)
-
-    def config_library (self, lib):
-        if lib.configure:
-            config_cmd = self.get_finalized_command('config')
-            config_cmd.compiler = self.compiler # fix compiler
-            return lib.configure(lib, config_cmd)
-
-    def build_library(self, lib):
-        from distutils.dep_util import newer_group
-
-        sources = [convert_path(p) for p in lib.sources]
-        depends = [convert_path(p) for p in lib.depends]
-        depends = sources + depends
-
-        if lib.kind == "static":
-            build_dir = self.build_clib_a
-        else:
-            build_dir = self.build_clib_so
-        lib_fullpath = self.get_lib_fullpath(lib, build_dir)
-
-        if not (self.force or newer_group(depends, lib_fullpath, 'newer')):
-            log.debug("skipping '%s' %s library (up-to-date)",
-                      lib.name, lib.kind)
-            return
-
-        ok = self.config_library(lib)
-        log.info("building '%s' %s library", lib.name, lib.kind)
-
-        # First, compile the source code to object files in the library
-        # directory.  (This should probably change to putting object
-        # files in a temporary build directory.)
-        macros = lib.define_macros[:]
-        for undef in lib.undef_macros:
-            macros.append((undef,))
-
-        objects = self.compiler.compile(
-            sources,
-            depends=lib.depends,
-            output_dir=self.build_temp,
-            macros=macros,
-            include_dirs=lib.include_dirs,
-            extra_preargs=None,
-            extra_postargs=lib.extra_compile_args,
-            debug=self.debug,
-            )
-
-        if lib.kind == "static":
-            # Now "link" the object files together
-            # into a static library.
-            self.compiler.create_static_lib(
-                objects,
-                lib.name,
-                output_dir=os.path.dirname(lib_fullpath),
-                debug=self.debug,
-                )
-        else:
-            extra_objects = lib.extra_objects[:]
-            export_symbols = lib.export_symbols[:]
-            extra_link_args = lib.extra_link_args[:]
-            objects.extend(extra_objects)
-            if (self.compiler.compiler_type == 'msvc' and
-                export_symbols is not None):
-                output_dir = os.path.dirname(lib_fullpath)
-                implib_filename = self.compiler.library_filename(lib.name)
-                implib_file = os.path.join(output_dir, lib_fullpath)
-                extra_link_args.append ('/IMPLIB:' + implib_file)
-            # Detect target language, if not provided
-            src_language = self.compiler.detect_language(sources)
-            language = (lib.language or src_language)
-            # Now "link" the object files together
-            # into a shared library.
-            self.compiler.link(
-                self.compiler.SHARED_LIBRARY,
-                objects, lib_fullpath,
-                #
-                libraries=lib.libraries,
-                library_dirs=lib.library_dirs,
-                runtime_library_dirs=lib.runtime_library_dirs,
-                export_symbols=export_symbols,
-                extra_preargs=None,
-                extra_postargs=extra_link_args,
-                debug=self.debug,
-                target_lang=language,
-                )
-        return
-
-    def get_lib_fullpath (self, lib, build_dir):
-        package_dir = (lib.package or '').split('.')
-        dest_dir = convert_path(lib.dest_dir or '')
-        output_dir = os.path.join(build_dir, *package_dir+[dest_dir])
-        lib_type =  lib.kind
-        if sys.platform != 'darwin':
-            if lib_type == 'dylib':
-                lib_type = 'shared'
-        compiler = self.compiler # XXX
-        lib_fullpath = compiler.library_filename(
-            lib.name, lib_type=lib_type, output_dir=output_dir)
-        return lib_fullpath
-
-    def get_source_files (self):
-        filenames = cmd_build_clib.build_clib.get_source_files(self)
-        self.check_library_list(self.libraries)
-        self.check_library_list(self.libraries_a)
-        self.check_library_list(self.libraries_so)
-        for (lib_name, build_info) in self.libraries:
-            filenames.extend(build_info.get(sources, []))
-        for lib in self.libraries_so + self.libraries_a:
-            filenames.extend(lib.sources)
-        return filenames
-
-    def get_outputs (self):
-        outputs = []
-        for lib in self.libraries_a:
-            lib_fullpath = self.get_lib_fullpath(lib, self.build_clib_a)
-            outputs.append(lib_fullpath)
-        for lib in self.libraries_so:
-            lib_fullpath = self.get_lib_fullpath(lib, self.build_clib_so)
-            outputs.append(lib_fullpath)
-        return outputs
-
-
-# Command class to build extension modules
-
-class build_ext(cmd_build_ext.build_ext):
-
-    user_options = cmd_build_ext.build_ext.user_options + cmd_mpi_opts
-
-    def initialize_options(self):
-        cmd_build_ext.build_ext.initialize_options(self)
-        cmd_initialize_mpi_options(self)
-
-    def finalize_options(self):
-        cmd_build_ext.build_ext.finalize_options(self)
-        build_cmd = self.get_finalized_command('build')
-        if isinstance(build_cmd,  build):
-            cmd_set_undefined_mpi_options(self, 'build')
-        #
-        if ((sys.platform.startswith('linux') or
-             sys.platform.startswith('gnu') or
-             sys.platform.startswith('sunos')) and
-            sysconfig.get_config_var('Py_ENABLE_SHARED')):
-            py_version = sysconfig.get_python_version()
-            bad_pylib_dir = os.path.join(sys.prefix, "lib",
-                                         "python" + py_version,
-                                         "config")
-            try:
-                self.library_dirs.remove(bad_pylib_dir)
-            except ValueError:
-                pass
-            pylib_dir = sysconfig.get_config_var("LIBDIR")
-            if pylib_dir not in self.library_dirs:
-                self.library_dirs.append(pylib_dir)
-            if pylib_dir not in self.rpath:
-                self.rpath.append(pylib_dir)
-            if sys.exec_prefix == '/usr':
-                self.library_dirs.remove(pylib_dir)
-                self.rpath.remove(pylib_dir)
-
-    def run (self):
-        if self.distribution.has_c_libraries():
-            build_clib = self.get_finalized_command('build_clib')
-            if build_clib.libraries:
-                build_clib.run()
-        cmd_build_ext.build_ext.run(self)
-
-    def build_extensions(self):
-        # First, sanity-check the 'extensions' list
-        self.check_extensions_list(self.extensions)
-        # parse configuration file and configure compiler
-        config = configuration(self, verbose=True)
-        configure_compiler(self.compiler, config)
-        if self.compiler.compiler_type == "unix":
-            so_ext = sysconfig.get_config_var('SO')
-            self.compiler.shared_lib_extension = so_ext
-        self.config = config # XXX
-        # extra configuration, check for all MPI symbols
-        if self.configure:
-            log.info('testing for missing MPI symbols')
-            config_cmd = self.get_finalized_command('config')
-            config_cmd.compiler = self.compiler # fix compiler
-            configure = ConfigureMPI(config_cmd)
-            results = configure.run()
-            configure.dump(results)
-            #
-            macro = 'HAVE_CONFIG_H'
-            log.info("defining preprocessor macro '%s'" % macro)
-            self.compiler.define_macro(macro, 1)
-        # build extensions
-        for ext in self.extensions:
-            try:
-                self.build_extension(ext)
-            except (DistutilsError, CCompilerError):
-                if not ext.optional: raise
-                e = sys.exc_info()[1]
-                self.warn('building extension "%s" failed' % ext.name)
-                self.warn('%s' % e)
-
-    def config_extension (self, ext):
-        configure = getattr(ext, 'configure', None)
-        if configure:
-            config_cmd = self.get_finalized_command('config')
-            config_cmd.compiler = self.compiler # fix compiler
-            configure(ext, config_cmd)
-
-    def build_extension (self, ext):
-        from distutils.dep_util import newer_group
-        fullname = self.get_ext_fullname(ext.name)
-        filename = os.path.join(
-            self.build_lib, self.get_ext_filename(fullname))
-        depends = ext.sources + ext.depends
-        if not (self.force or newer_group(depends, filename, 'newer')):
-            log.debug("skipping '%s' extension (up-to-date)", ext.name)
-            return
-        #
-        self.config_extension(ext)
-        cmd_build_ext.build_ext.build_extension(self, ext)
-        #
-        # XXX -- this is a Vile HACK!
-        if ext.name == 'mpi4py.MPI':
-            dest_dir = os.path.dirname(filename)
-            self.mkpath(dest_dir)
-            mpi_cfg = os.path.join(dest_dir, 'mpi.cfg')
-            log.info("writing %s" % mpi_cfg)
-            if not self.dry_run:
-                self.config.dump(filename=mpi_cfg)
-
-    def get_outputs(self):
-        outputs = cmd_build_ext.build_ext.get_outputs(self)
-        for ext in self.extensions:
-            # XXX -- this is a Vile HACK!
-            if ext.name == 'mpi4py.MPI':
-                fullname = self.get_ext_fullname(ext.name)
-                filename = os.path.join(
-                    self.build_lib,
-                    self.get_ext_filename(fullname))
-                dest_dir = os.path.dirname(filename)
-                mpi_cfg = os.path.join(dest_dir, 'mpi.cfg')
-                outputs.append(mpi_cfg)
-        return outputs
-
-
-# Command class to build executables
-
-class build_exe(build_ext):
-
-    description = "build binary executable components"
-
-    user_options = [
-        ('build-exe=', None,
-         "build directory for executable components"),
-        ] + build_ext.user_options
-
-
-    def initialize_options (self):
-        build_ext.initialize_options(self)
-        self.build_base = None
-        self.build_exe  = None
-
-    def finalize_options (self):
-        build_ext.finalize_options(self)
-        self.configure = None
-        self.set_undefined_options('build',
-                                   ('build_base','build_base'),
-                                   ('build_lib', 'build_exe'))
-        #from distutils.util import get_platform
-        #plat_specifier = ".%s-%s" % (get_platform(), sys.version[0:3])
-        #if hasattr(sys, 'gettotalrefcount') and sys.version[0:3] > '2.5':
-        #    plat_specifier += '-pydebug'
-        #if self.build_exe is None:
-        #    self.build_exe = os.path.join(self.build_base,
-        #                                  'exe' + plat_specifier)
-        self.executables = self.distribution.executables
-        # XXX This is a hack
-        self.extensions  = self.distribution.executables
-        self.check_extensions_list = self.check_executables_list
-        self.build_extension = self.build_executable
-        self.get_ext_filename = self.get_exe_filename
-        self.build_lib = self.build_exe
-
-    def check_executables_list (self, executables):
-        ListType, TupleType = type([]), type(())
-        if type(executables) is not ListType:
-            raise DistutilsSetupError(
-                "'executables' option must be a list of Executable instances")
-        for exe in executables:
-            if not isinstance(exe, Executable):
-                raise DistutilsSetupError(
-                    "'executables' items must be Executable instances")
-            if (exe.sources is None or
-                type(exe.sources) not in (ListType, TupleType)):
-                raise DistutilsSetupError(
-                    ("in 'executables' option (executable '%s'), " +
-                     "'sources' must be present and must be " +
-                     "a list of source filenames") % exe.name)
-
-    def get_exe_filename(self, exe_name):
-        exe_ext = sysconfig.get_config_var('EXE') or ''
-        return exe_name + exe_ext
-
-    def get_exe_fullpath(self, exe, build_dir=None):
-        build_dir = build_dir or self.build_exe
-        package_dir = (exe.package or '').split('.')
-        dest_dir = convert_path(exe.dest_dir or '')
-        output_dir = os.path.join(build_dir, *package_dir+[dest_dir])
-        exe_filename = self.get_exe_filename(exe.name)
-        return os.path.join(output_dir, exe_filename)
-
-    def config_executable (self, exe):
-        build_ext.config_extension(self, exe)
-
-    def build_executable (self, exe):
-        from distutils.dep_util import newer_group
-        sources = list(exe.sources)
-        depends = list(exe.depends)
-        exe_fullpath = self.get_exe_fullpath(exe)
-        depends = sources + depends
-        if not (self.force or newer_group(depends, exe_fullpath, 'newer')):
-            log.debug("skipping '%s' executable (up-to-date)", exe.name)
-            return
-
-        self.config_executable(exe)
-        log.info("building '%s' executable", exe.name)
-
-        # Next, compile the source code to object files.
-
-        # XXX not honouring 'define_macros' or 'undef_macros' -- the
-        # CCompiler API needs to change to accommodate this, and I
-        # want to do one thing at a time!
-
-        macros = exe.define_macros[:]
-        for undef in exe.undef_macros:
-            macros.append((undef,))
-
-        # Two possible sources for extra compiler arguments:
-        #   - 'extra_compile_args' in Extension object
-        #   - CFLAGS environment variable (not particularly
-        #     elegant, but people seem to expect it and I
-        #     guess it's useful)
-        # The environment variable should take precedence, and
-        # any sensible compiler will give precedence to later
-        # command line args.  Hence we combine them in order:
-        extra_args = exe.extra_compile_args[:]
-
-        objects =  self.compiler.compile(
-            sources,
-            output_dir=self.build_temp,
-            macros=macros,
-            include_dirs=exe.include_dirs,
-            debug=self.debug,
-            extra_postargs=extra_args,
-            depends=exe.depends)
-        self._built_objects = objects[:]
-
-        # XXX -- this is a Vile HACK!
-        #
-        # Remove msvcrXX.dll when building executables with MinGW
-        #
-        if self.compiler.compiler_type == 'mingw32':
-            try: del self.compiler.dll_libraries[:]
-            except: pass
-
-        # Now link the object files together into a "shared object" --
-        # of course, first we have to figure out all the other things
-        # that go into the mix.
-        if exe.extra_objects:
-            objects.extend(exe.extra_objects)
-        extra_args = exe.extra_link_args[:]
-        # Get special linker flags for building a executable with
-        # bundled Python library, also fix location of needed
-        # python.exp file on AIX
-        ldshflag = sysconfig.get_config_var('LINKFORSHARED') or ''
-        ldshflag = ldshflag.replace('-Xlinker ', '-Wl,')
-        if sys.platform == 'darwin': # fix wrong framework paths
-            fwkprefix = sysconfig.get_config_var('PYTHONFRAMEWORKPREFIX')
-            fwkdir = sysconfig.get_config_var('PYTHONFRAMEWORKDIR')
-            if fwkprefix and fwkdir and fwkdir != 'no-framework':
-                for flag in split_quoted(ldshflag):
-                    if flag.startswith(fwkdir):
-                        fwkpath = os.path.join(fwkprefix, flag)
-                        ldshflag = ldshflag.replace(flag, fwkpath)
-        if sys.platform.startswith('aix'):
-            python_lib = sysconfig.get_python_lib(standard_lib=1)
-            python_exp = os.path.join(python_lib, 'config', 'python.exp')
-            ldshflag = ldshflag.replace('Modules/python.exp', python_exp)
-        # Detect target language, if not provided
-        language = exe.language or self.compiler.detect_language(sources)
-        self.compiler.link(
-            self.compiler.EXECUTABLE,
-            objects, exe_fullpath,
-            output_dir=None,
-            libraries=self.get_libraries(exe),
-            library_dirs=exe.library_dirs,
-            runtime_library_dirs=exe.runtime_library_dirs,
-            extra_preargs=split_quoted(ldshflag),
-            extra_postargs=extra_args,
-            debug=self.debug,
-            target_lang=language)
-
-    def get_outputs (self):
-        outputs = []
-        for exe in self.executables:
-            outputs.append(self.get_exe_fullpath(exe))
-        return outputs
-
-
-class install(cmd_install.install):
-
-    user_options = cmd_install.install.user_options + [
-        ('single-version-externally-managed', None,
-         "setuptools compatibility option"),
-    ]
-    boolean_options = cmd_install.install.boolean_options + [
-        'single-version-externally-managed',
-    ]
-
-    def initialize_options(self):
-        cmd_install.install.initialize_options(self)
-        self.single_version_externally_managed = None
-        self.no_compile = None
-
-    def has_lib (self):
-        return (cmd_install.install.has_lib(self) and
-                self.has_exe())
-
-    def has_exe (self):
-        return self.distribution.has_executables()
-
-    sub_commands = \
-        cmd_install.install.sub_commands[:] + \
-        [('install_exe', has_exe),
-         ]
-
-    # XXX disable install_exe subcommand !!!
-    del sub_commands[-1]
-
-
-class install_lib(cmd_install_lib.install_lib):
-
-    def get_outputs(self):
-        outputs = cmd_install_lib.install_lib.get_outputs(self)
-        for (build_cmd, build_dir) in (('build_clib', 'build_lib'),
-                                       ('build_exe',  'build_exe')):
-            outs = self._mutate_outputs(1, build_cmd, build_dir,
-                                        self.install_dir)
-            build_cmd = self.get_finalized_command(build_cmd)
-            build_files = build_cmd.get_outputs()
-            outputs.extend(outs)
-        return outputs
-
-
-class install_data (cmd_install_data.install_data):
-
-    def finalize_options (self):
-        self.set_undefined_options('install',
-                                   ('install_lib', 'install_dir'),
-                                   ('root', 'root'),
-                                   ('force', 'force'),
-                                   )
-
-
-class install_exe(cmd_install_lib.install_lib):
-
-    description = "install binary executable components"
-
-    user_options = [
-        ('install-dir=', 'd', "directory to install to"),
-        ('build-dir=','b', "build directory (where to install from)"),
-        ('force', 'f', "force installation (overwrite existing files)"),
-        ('skip-build', None, "skip the build steps"),
-        ]
-
-    boolean_options = ['force', 'skip-build']
-    negative_opt = { }
-
-    def initialize_options (self):
-        self.install_dir = None
-        self.build_dir = None
-        self.force = 0
-        self.skip_build = None
-
-    def finalize_options (self):
-        self.set_undefined_options('build_exe',
-                                   ('build_exe', 'build_dir'))
-        self.set_undefined_options('install',
-                                   ('force', 'force'),
-                                   ('skip_build', 'skip_build'),
-                                   ('install_scripts', 'install_dir'))
-
-    def run (self):
-        self.build()
-        self.install()
-
-    def build (self):
-        if not self.skip_build:
-            if self.distribution.has_executables():
-                self.run_command('build_exe')
-
-    def install (self):
-        self.outfiles = []
-        if self.distribution.has_executables():
-            build_exe = self.get_finalized_command('build_exe')
-            for exe in build_exe.executables:
-                exe_fullpath = build_exe.get_exe_fullpath(exe)
-                exe_filename = os.path.basename(exe_fullpath)
-                if (os.name == "posix" and
-                    exe_filename.startswith("python-")):
-                    install_name = exe_filename.replace(
-                        "python-","python%s-" % sys.version[:3])
-                    link = None
-                else:
-                    install_name = exe_fullpath
-                    link = None
-                source = exe_fullpath
-                target = os.path.join(self.install_dir, install_name)
-                self.mkpath(self.install_dir)
-                out, done = self.copy_file(source, target, link=link)
-                self.outfiles.append(out)
-
-    def get_outputs (self):
-        return self.outfiles
-
-    def get_inputs (self):
-        inputs = []
-        if self.distribution.has_executables():
-            build_exe = self.get_finalized_command('build_exe')
-            inputs.extend(build_exe.get_outputs())
-        return inputs
-
-
-class test(Command):
-    description = "run the test suite"
-    user_options = [
-        ('args=', None, "options"),
-        ]
-
-    def initialize_options(self):
-        self.args = None
-    def finalize_options(self):
-        if self.args:
-            self.args = split_quoted(self.args)
-        else:
-            self.args = []
-    def run(self):
-        pass
-
-
-class sdist(cmd_sdist.sdist):
-
-    def run (self):
-        build_src = self.get_finalized_command('build_src')
-        build_src.run()
-        cmd_sdist.sdist.run(self)
-
-
-class clean(cmd_clean.clean):
-
-    description = "clean up temporary files from 'build' command"
-    user_options = \
-        cmd_clean.clean.user_options[:2] + [
-        ('build-exe=', None,
-         "build directory for executable components "
-         "(default: 'build_exe.build-exe')"),
-        ] + cmd_clean.clean.user_options[2:]
-
-    def initialize_options(self):
-        cmd_clean.clean.initialize_options(self)
-        self.build_exe  = None
-
-    def finalize_options(self):
-        cmd_clean.clean.finalize_options(self)
-        self.set_undefined_options('build_exe',
-                                   ('build_exe', 'build_exe'))
-
-    def run(self):
-        from distutils.dir_util import remove_tree
-
-        # remove the build/temp.<plat> directory
-        # (unless it's already gone)
-        if os.path.exists(self.build_temp):
-            remove_tree(self.build_temp, dry_run=self.dry_run)
-        else:
-            log.debug("'%s' does not exist -- can't clean it",
-                      self.build_temp)
-
-        if self.all:
-            # remove build directories
-            for directory in (self.build_lib,
-                              self.build_exe,
-                              self.build_scripts,
-                              self.bdist_base,
-                              ):
-                if os.path.exists(directory):
-                    remove_tree(directory, dry_run=self.dry_run)
-                else:
-                    log.debug("'%s' does not exist -- can't clean it",
-                              directory)
-
-        # just for the heck of it, try to remove the base build directory:
-        # we might have emptied it right now, but if not we don't care
-        if not self.dry_run:
-            try:
-                os.rmdir(self.build_base)
-                log.info("removing '%s'", self.build_base)
-            except OSError:
-                pass
-
-# -----------------------------------------------------------------------------
-
-try:
-    import msilib
-    Directory_make_short = msilib.Directory.make_short
-    def make_short(self, file):
-        parts = file.split('.')
-        if len(parts) > 1:
-            file = '_'.join(parts[:-1])+'.'+parts[-1]
-        return Directory_make_short(self, file)
-    msilib.Directory.make_short = make_short
-except:
-    pass
-
-# -----------------------------------------------------------------------------
diff --git a/wrappers/numpy/conf/mpidistutils.pyc b/wrappers/numpy/conf/mpidistutils.pyc
deleted file mode 100644
index c0477ec..0000000
Binary files a/wrappers/numpy/conf/mpidistutils.pyc and /dev/null differ
diff --git a/wrappers/numpy/conf/mpiregexes.py b/wrappers/numpy/conf/mpiregexes.py
deleted file mode 100644
index eb00df8..0000000
--- a/wrappers/numpy/conf/mpiregexes.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import re
-
-def join(*args):
-    tokens = []
-    for tok in args:
-        if isinstance(tok, (list, tuple)):
-            tok = '(%s)' % r'\s*'.join(tok)
-        tokens.append(tok)
-    return r'\s*'.join(tokens)
-
-lparen   = r'\('
-rparen   = r'\)'
-colon    = r'\:'
-asterisk = r'\*'
-eol      = r'$'
-
-enum    = join('enum', colon)
-typedef = 'ctypedef'
-pointer = asterisk
-struct  = join(typedef, 'struct')
-
-basic_type    = r'(?:void|int|char\s*\*{1,3})'
-struct_type   = r'MPI_(?:Status)'
-integral_type = r'MPI_(?:Aint|Offset)'
-opaque_type   = r'MPI_(?:Datatype|Request|Op|Info|Group|Errhandler|Comm|Win|File)'
-any_mpi_type  = r'(?:%s|%s|%s)' % (struct_type, integral_type, opaque_type)
-
-upper_name  = r'MPI_[A-Z0-9_]+'
-camel_name  = r'MPI_[A-Z][a-z0-9_]+'
-usrfun_name = camel_name + r'_(?:function|fn)'
-
-arg_list = r'.*'
-ret_type = r'void|int|double'
-
-
-canylong = join(r'long', r'(?:long)?')
-canyptr  = join(r'\w+', pointer+'?')
-
-annotation = r'\#\:\='
-defval = r'(?:%s)?' % join (annotation, [r'\(?[A-Za-z0-9_\+\-\(\)\*]+\)?'])
-
-STRUCT_TYPE   = join( struct,  [struct_type] , colon,  eol)
-INTEGRAL_TYPE = join( typedef, canylong, [integral_type], eol)
-OPAQUE_TYPE   = join( typedef, canyptr,  [opaque_type],   eol)
-FUNCTION_TYPE = join( typedef, [ret_type], [camel_name],
-                      lparen, [arg_list], rparen,
-                      defval, eol)
-
-ENUM_VALUE     = join( enum,          [upper_name], defval, eol)
-HANDLE_VALUE   = join( [opaque_type], [upper_name], defval, eol)
-BASICP_VALUE   = join( [basic_type,  pointer], [upper_name], defval , eol)
-STRUCTP_VALUE  = join( [struct_type, pointer], [upper_name], defval , eol)
-FUNCTP_VALUE   = join( [usrfun_name, pointer], [upper_name], defval , eol)
-FUNCTION_PROTO = join([ret_type], [camel_name],
-                      lparen, [arg_list], rparen,
-                      defval, eol)
-
-fint_type = r'MPI_Fint'
-c2f_name  = r'MPI_[A-Z][a-z_]+_c2f'
-f2c_name  = r'MPI_[A-Z][a-z_]+_f2c'
-
-FINT_TYPE    = join( typedef, canylong, [fint_type], eol)
-FINTP_VALUE  = join( [fint_type, pointer], [upper_name], defval , eol)
-FUNCTION_C2F = join([fint_type], [c2f_name],
-                    lparen, [opaque_type], rparen,
-                    defval, eol)
-FUNCTION_F2C = join([opaque_type], [f2c_name],
-                    lparen, [fint_type], rparen,
-                    defval, eol)
-
-
-# compile the RE's
-glb = globals()
-all = [key for key in dict(glb) if key.isupper()]
-for key in all: glb[key] = re.compile(glb[key])
diff --git a/wrappers/numpy/conf/mpiregexes.pyc b/wrappers/numpy/conf/mpiregexes.pyc
deleted file mode 100644
index c20947f..0000000
Binary files a/wrappers/numpy/conf/mpiregexes.pyc and /dev/null differ
diff --git a/wrappers/numpy/conf/mpiscanner.py b/wrappers/numpy/conf/mpiscanner.py
deleted file mode 100644
index 0f80e99..0000000
--- a/wrappers/numpy/conf/mpiscanner.py
+++ /dev/null
@@ -1,342 +0,0 @@
-# Very, very naive RE-based way for collecting declarations inside
-# 'cdef extern from *' Cython blocks in in source files, and next
-# generate compatibility headers for MPI-2 partially implemented or
-# built, or MPI-1 implementations, perhaps providing a subset of MPI-2
-
-from textwrap import dedent
-
-try:
-    import mpiregexes as Re
-except ImportError:
-    from conf import mpiregexes as Re
-
-
-class Node(object):
-
-    REGEX = None
-    def match(self, line):
-        m = self.REGEX.search(line)
-        if m: return m.groups()
-    match = classmethod(match)
-
-    CONFIG = None
-    HEADER = None
-
-    HEADER_HEAD = """\
-    #ifdef  PyMPI_MISSING_%(name)s
-    #undef  %(cname)s
-    """
-    HEADER_TAIL = """
-    #endif
-
-    """
-
-    def init(self, name, **kargs):
-        assert name is not None
-        self.name = name
-        self.__dict__.update(kargs)
-    def config(self):
-        return self.CONFIG % vars(self)
-    def header(self):
-        head = dedent(self.HEADER_HEAD)
-        body = dedent(self.HEADER)
-        tail = dedent(self.HEADER_TAIL)
-        return (head+body+tail) % vars(self)
-
-class NodeType(Node):
-    CONFIG = ('%(ctype)s v;\n'
-              '%(ctype)s *p = &v; *p=v;')
-    def __init__(self, ctype):
-        self.init(name=ctype,
-                  cname=ctype,
-                  ctype=ctype,)
-
-class NodeStruct(NodeType):
-    REGEX  = Re.STRUCT_TYPE
-    HEADER = """\
-    typedef struct PyMPI_%(ctype)s {
-    %(cfields)s
-    } PyMPI_%(ctype)s;
-    #define %(ctype)s PyMPI_%(ctype)s"""
-
-    def __init__(self, ctype, cfields):
-        super(NodeStruct, self).__init__(ctype)
-        self.cfields = '\n'.join(['  %s %s;' % field
-                                  for field in cfields])
-
-class NodeFuncType(NodeType):
-    HEADER = dedent("""\
-    typedef %(crett)s (PyMPI_%(cname)s)(%(cargs)s);
-    #define %(cname)s PyMPI_%(cname)s""")
-
-    def __init__(self, crett, cname, cargs, calias=None):
-        self.init(name=cname,
-                  cname=cname,
-                  ctype=cname+'*',)
-        self.crett = crett
-        self.cargs = cargs or 'void'
-        if calias is not None:
-            self.HEADER = '#define %(cname)s %(calias)s'
-            self.calias = calias
-
-class NodeValue(Node):
-    CONFIG = ('%(ctype)s v; v = %(cname)s;\n'
-              '%(ctype)s *p = &v; *p = %(cname)s;')
-    HEADER = '#define %(cname)s (%(calias)s)'
-    def __init__(self, ctype, cname, calias):
-        self.init(name=cname,
-                  cname=cname,
-                  ctype=ctype,
-                  calias=calias)
-
-def ctypefix(ct):
-    ct = ct.strip()
-    ct = ct.replace('[][3]',' (*)[3]')
-    ct = ct.replace('[]','*')
-    return ct
-
-class NodeFuncProto(Node):
-    CONFIG = '%(crett)s v; v = %(cname)s(%(cargscall)s); if(v)v=(%(crett)s)0;'
-    HEADER = ' '. join(['#define %(cname)s(%(cargsnamed)s)',
-                        'PyMPI_UNAVAILABLE("%(name)s"%(comma)s%(cargsnamed)s)'])
-    def __init__(self, crett, cname, cargs, calias=None):
-        self.init(name=cname,
-                  cname=cname)
-        self.crett = crett
-        if cargs == 'void': cargs = ''
-        if cargs:
-            cargs = cargs.split(',')
-            if cargs[-1].strip() == '...':
-                del cargs[-1]
-        else:
-            cargs = []
-        self.cargstype = cargs
-        nargs = len(cargs)
-        if nargs: self.comma = ','
-        else:     self.comma = ''
-        cargscall = ['(%s)0' % ctypefix(a) for a in cargs]
-        self.cargscall = ','.join(cargscall)
-        cargsnamed = ['a%d' % (a+1) for a in range(nargs)]
-        self.cargsnamed = ','.join(cargsnamed)
-        if calias is not None:
-            self.HEADER = '#define %(cname)s %(calias)s'
-            self.calias = calias
-
-class IntegralType(NodeType):
-    REGEX = Re.INTEGRAL_TYPE
-    HEADER = dedent("""\
-    typedef long PyMPI_%(ctype)s;
-    #define %(ctype)s PyMPI_%(ctype)s""")
-
-class OpaqueType(NodeType):
-    REGEX = Re.OPAQUE_TYPE
-    HEADER = dedent("""\
-    typedef void *PyMPI_%(ctype)s;
-    #define %(ctype)s PyMPI_%(ctype)s""")
-
-class StructType(NodeStruct):
-    def __init__(self, ctype):
-        cnames = ['MPI_SOURCE', 'MPI_TAG', 'MPI_ERROR']
-        cfields = list(zip(['int']*3, cnames))
-        super(StructType, self).__init__(ctype, cfields)
-
-class FunctionType(NodeFuncType):
-    REGEX = Re.FUNCTION_TYPE
-
-class EnumValue(NodeValue):
-    REGEX = Re.ENUM_VALUE
-    def __init__(self, cname, calias):
-        self.init(name=cname,
-                  cname=cname,
-                  ctype='int',
-                  calias=calias)
-
-class HandleValue(NodeValue):
-    REGEX = Re.HANDLE_VALUE
-    HEADER = '#define %(cname)s ((%(ctype)s)%(calias)s)'
-    #def __init__(self, *a, **k):
-    #    NodeValue.__init__(self, *a, **k)
-    #    print self.__dict__
-    #    if self.cname.endswith('_NULL'):
-    #        self.HEADER = '#define %(cname)s ((%(ctype)s)%(calias)s)'
-
-class BasicValuePtr(NodeValue):
-    REGEX = Re.BASICP_VALUE
-    HEADER = '#define %(cname)s ((%(ctype)s)%(calias)s)'
-
-class StructValuePtr(NodeValue):
-    REGEX = Re.STRUCTP_VALUE
-
-class FunctionValuePtr(NodeValue):
-    REGEX = Re.FUNCTP_VALUE
-
-class FunctionProto(NodeFuncProto):
-    REGEX = Re.FUNCTION_PROTO
-
-
-class FIntType(NodeType):
-    REGEX = Re.FINT_TYPE
-    HEADER = dedent("""\
-    typedef int PyMPI_%(ctype)s;
-    #define %(ctype)s PyMPI_%(ctype)s""")
-
-class FIntValuePtr(BasicValuePtr):
-    REGEX = Re.FINTP_VALUE
-
-class FunctionC2F(NodeFuncProto):
-    REGEX = Re.FUNCTION_C2F
-    HEADER = ' '. join(['#define %(cname)s(%(cargsnamed)s)',
-                        '((%(crett)s)0)'])
-
-class FunctionF2C(NodeFuncProto):
-    REGEX = Re.FUNCTION_F2C
-    HEADER = ' '. join(['#define %(cname)s(%(cargsnamed)s)',
-                        '%(cretv)s'])
-    def __init__(self, *a, **k):
-        NodeFuncProto.__init__(self, *a, **k)
-        self.cretv =  self.crett.upper() + '_NULL'
-
-class Scanner(object):
-
-    NODE_TYPES = [
-        FIntType, FIntValuePtr,
-        FunctionC2F, FunctionF2C,
-        IntegralType,
-        StructType, OpaqueType,
-        HandleValue, EnumValue,
-        BasicValuePtr, StructValuePtr,
-        FunctionType, FunctionValuePtr,
-        FunctionProto,
-        ]
-    def __init__(self):
-        self.nodes = []
-        self.nodemap = {}
-
-    def parse_file(self, filename):
-        fileobj = open(filename)
-        try: self.parse_lines(fileobj)
-        finally: fileobj.close()
-
-    def parse_lines(self, lines):
-        for line in lines:
-            self.parse_line(line)
-
-    def parse_line(self, line):
-        nodemap  = self.nodemap
-        nodelist = self.nodes
-        for nodetype in self.NODE_TYPES:
-            args = nodetype.match(line)
-            if args:
-                node = nodetype(*args)
-                assert node.name not in nodemap, node.name
-                nodemap[node.name] = len(nodelist)
-                nodelist.append(node)
-                break
-
-    def __iter__(self):
-        return iter(self.nodes)
-
-    def itertests(self):
-        for node in self:
-            yield (node.name, node.config())
-
-
-    CONFIG_HEAD = """\
-    #ifndef PyMPI_CONFIG_H
-    #define PyMPI_CONFIG_H
-
-    """
-    CONFIG_MACRO = '#define PyMPI_MISSING_%s 1\n'
-    CONFIG_TAIL = """\
-
-    #endif /* !PyMPI_CONFIG_H */
-    """
-    def dump_config_h(self, fileobj, suite):
-        if isinstance(fileobj, str):
-            fileobj = open(fileobj, 'w')
-            try: self.dump_config_h(fileobj, suite)
-            finally: fileobj.close()
-            return
-        head  = dedent(self.CONFIG_HEAD)
-        macro = dedent(self.CONFIG_MACRO)
-        tail  = dedent(self.CONFIG_TAIL)
-        fileobj.write(head)
-        if suite is None:
-            for node in self:
-                fileobj.write(macro % node.name)
-        else:
-            for name, result in suite:
-                assert name in self.nodemap
-                if not result:
-                    fileobj.write(macro % name)
-        fileobj.write(tail)
-
-    MISSING_HEAD = """\
-    #ifndef PyMPI_MISSING_H
-    #define PyMPI_MISSING_H
-
-    #ifndef PyMPI_UNUSED
-    # if defined(__GNUC__)
-    #   if !defined(__cplusplus) || (__GNUC__>3||(__GNUC__==3&&__GNUC_MINOR__>=4))
-    #     define PyMPI_UNUSED __attribute__ ((__unused__))
-    #   else
-    #     define PyMPI_UNUSED
-    #   endif
-    # elif defined(__INTEL_COMPILER) || defined(__ICC)
-    #   define PyMPI_UNUSED __attribute__ ((__unused__))
-    # else
-    #   define PyMPI_UNUSED
-    # endif
-    #endif
-
-    static PyMPI_UNUSED int PyMPI_UNAVAILABLE(const char *name,...) { return -1; }
-
-    """
-    MISSING_TAIL = """\
-    #endif /* !PyMPI_MISSING_H */
-    """
-    def dump_missing_h(self, fileobj, suite):
-        if isinstance(fileobj, str):
-            fileobj = open(fileobj, 'w')
-            try: self.dump_missing_h(fileobj, suite)
-            finally: fileobj.close()
-            return
-        head = dedent(self.MISSING_HEAD)
-        tail = dedent(self.MISSING_TAIL)
-        #
-        fileobj.write(head)
-        if suite is None:
-            for node in self:
-                fileobj.write(node.header())
-        else:
-            nodelist = self.nodes
-            nodemap = self.nodemap
-            for name, result in suite:
-                assert name in nodemap, name
-                if not result:
-                    node = nodelist[nodemap[name]]
-                    fileobj.write(node.header())
-        fileobj.write(tail)
-
-
-# -----------------------------------------
-
-
-if __name__ == '__main__':
-    import sys, os
-    sources = [os.path.join('src', 'include', 'mpi4py', 'mpi.pxi')]
-    log = lambda msg: sys.stderr.write(msg + '\n')
-    scanner = Scanner()
-    for filename in sources:
-        #filename = os.path.join('src', 'mpi4py', filename)
-        log('parsing file %s' % filename)
-        scanner.parse_file(filename)
-    log('processed %d definitions' % len(scanner.nodes))
-    config_h  = os.path.join('src', 'config.h')
-    missing_h = os.path.join('src', 'missing.h')
-    log('writing file %s' % config_h)
-    scanner.dump_config_h(config_h, None)
-    log('writing file %s' % missing_h)
-    scanner.dump_missing_h(missing_h, None)
-
-# -----------------------------------------
diff --git a/wrappers/numpy/conf/mpiscanner.pyc b/wrappers/numpy/conf/mpiscanner.pyc
deleted file mode 100644
index 722d1c7..0000000
Binary files a/wrappers/numpy/conf/mpiscanner.pyc and /dev/null differ
diff --git a/wrappers/numpy/example/staging/README b/wrappers/numpy/example/staging/README
new file mode 100644
index 0000000..7ce518b
--- /dev/null
+++ b/wrappers/numpy/example/staging/README
@@ -0,0 +1,35 @@
+This is to demonstrate using staging method with Adios python
+wrapper. Writer (adios_write.py) and Reader (adios_read.py) can take
+write method (e.g., POSIX, FLEXPATH, ICEE, etc) and read method (BP,
+FLEXPATH, ICEE, etc), respectively, as an argument.
+
+1. How to run
+-------------
+
+Command line options are as follows:
+
+$ python ./adios_write.py [write method] [parameters]
+$ python ./adios_read.py [read method] [parameters]
+
+
+2. Examples
+-----------
+
+a. File-based communication
+
+First, let's run with files by
+
+$ python ./adios_write.py POSIX
+$ python ./adios_read.py BP
+
+b. ICEE
+
+Now, we can run writer and reader with ICEE staging method:
+
+$ python ./adios_write.py ICEE "verbose=3;cm_port=59990;cm_host=localhost;" &
+$ python ./adios_read.py ICEE "verbose=3;cm_remote_port=59990;cm_remote_host=localhost;"
+
+Note: Users may need to use the MPI-enabled Adios module, adios_mpi,
+instead of serial adios module, adios. Some Adios methods work only
+with MPI. In that case, use import "adios_mpi", not "adios".
+
diff --git a/wrappers/numpy/example/staging/adios_read.py b/wrappers/numpy/example/staging/adios_read.py
new file mode 100644
index 0000000..32f6bfc
--- /dev/null
+++ b/wrappers/numpy/example/staging/adios_read.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ python ./test_adios.py
+"""
+
+import adios as ad
+import getopt, sys
+import os
+
+method = "BP"
+init = "verbose=3;"
+
+if len(sys.argv) > 1:
+    method = sys.argv[1]
+
+if len(sys.argv) > 2:
+    init = sys.argv[2]
+
+ad.read_init(method, parameters=init)
+
+f = ad.file("temp.bp", method, is_stream=True, timeout_sec = 10.0)
+f.printself()
+
+i = 0
+while True:
+    print ">>> step:", i
+    v = f.var['temperature']
+    v.printself()
+
+    val = v.read()
+    print val
+
+    if (f.advance() < 0):
+        break
+    i += 1
+
+f.close()
+
+ad.read_finalize(method)
+
+print ">>> Done."
diff --git a/wrappers/numpy/example/staging/adios_write.py b/wrappers/numpy/example/staging/adios_write.py
new file mode 100644
index 0000000..1b35fbc
--- /dev/null
+++ b/wrappers/numpy/example/staging/adios_write.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ python ./test_adios.py
+"""
+
+import adios as ad
+import numpy as np
+import getopt, sys
+import os
+
+method = "POSIX"
+init = "verbose=3;"
+
+if len(sys.argv) > 1:
+    method = sys.argv[1]
+
+if len(sys.argv) > 2:
+    init = sys.argv[2]
+
+## Init
+ad.init_noxml()
+ad.allocate_buffer (ad.BUFFER_ALLOC_WHEN.NOW, 10);
+g = ad.declare_group("temperature", "", 1)
+ad.define_var(g, "NX", "", ad.DATATYPE.integer, "", "", "")
+ad.define_var(g, "size", "", ad.DATATYPE.integer, "", "", "")
+ad.define_var(g, "temperature", "", ad.DATATYPE.double, "size,NX", "size,NX", "0,0")
+ad.select_method(g, method, init, "")
+print ">>> Method:", method
+
+## Writing
+for i in range(5):
+    fd = ad.open("temperature", "temp.bp", "a")
+
+    NX = 10
+    size = 2
+    groupsize =  4 + 4 + 8 * size * NX
+    t = np.array(range(NX*size), dtype=np.float64) + 100*i
+    tt = t.reshape((size, NX))
+    ad.set_group_size(fd, groupsize)
+    ad.write_int(fd, "NX", NX)
+    ad.write_int(fd, "size", size)
+    ad.write(fd, "temperature", tt)
+    ad.close(fd)
+
+ad.finalize()
+print ">>> Done."
diff --git a/wrappers/numpy/example/utils/README b/wrappers/numpy/example/utils/README
new file mode 100644
index 0000000..e2a75f4
--- /dev/null
+++ b/wrappers/numpy/example/utils/README
@@ -0,0 +1,26 @@
+This directory contains utility scripts to demonstrate how to use
+Adios python wrappers. The following scripts were written to
+demonstrate functionality of Adios python wrapper, rather than to make
+generic tools.
+
+1. bpls.py
+----------
+
+It acts like "bpls" utility provided by Adios. The usage is as
+follows:
+
+$ python ./bpls.py bpfile
+
+
+2. ncdf2bp.py
+-------------
+
+A script to convert a netcdf file to an Adios bp file.
+
+$ python ./ncdf2bp.py netcdf_file
+
+Examples are as follows:
+$ wget http://www.unidata.ucar.edu/software/netcdf/examples/ECMWF_ERA-40_subset.nc
+$ python ./ncdf2bp.py ECMWF_ERA-40_subset.nc
+
+
diff --git a/wrappers/numpy/example/utils/bpls.py b/wrappers/numpy/example/utils/bpls.py
new file mode 100755
index 0000000..ed63dfb
--- /dev/null
+++ b/wrappers/numpy/example/utils/bpls.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ python ./bpls.py bpfile
+"""
+
+import adios as ad
+import numpy as np
+import getopt, sys
+
+def usage():
+    print "USAGE: %s filename" % sys.argv[0]
+    
+def main():
+    fname = ""
+    if len(sys.argv) < 2:
+        usage()
+        sys.exit(1)
+    else:
+        fname = sys.argv[1]
+
+    f = ad.file(fname)
+
+    print "File info:"
+    print "  %-18s %d" % ("of variables:", f.nvars)
+    print "  %-18s %d - %d" % ("time steps:", f.current_step, f.last_step)
+    print "  %-18s %d" % ("file size:", f.file_size)
+    print "  %-18s %d" % ("bp version:", f.version)
+    print ""
+    
+    for k in sorted(f.var.keys()):
+        v = f.var[k]
+        print "  %-17s  %-12s  %d*%s" % (np.typename(np.sctype2char(v.type)), v.name, v.nsteps, v.dims)
+            
+
+if __name__ == "__main__":
+    main()
diff --git a/wrappers/numpy/example/ncdf2bp.py b/wrappers/numpy/example/utils/ncdf2bp.py
similarity index 66%
rename from wrappers/numpy/example/ncdf2bp.py
rename to wrappers/numpy/example/utils/ncdf2bp.py
index 9034224..d255a8c 100755
--- a/wrappers/numpy/example/ncdf2bp.py
+++ b/wrappers/numpy/example/utils/ncdf2bp.py
@@ -1,5 +1,11 @@
 #!/usr/bin/env python
-from adios_mpi import *
+"""
+Example:
+
+$ python ./ncdf2bp.py netcdf_file
+"""
+
+from adios import *
 from scipy.io import netcdf
 import numpy as np
 import sys
@@ -37,17 +43,20 @@ tdepvar = {n:v for n,v in var.items() if tname in v.dimensions}
 tindvar = {n:v for n,v in var.items() if tname not in v.dimensions}
 
 ## Time dimension
-assert (len(set([v.dimensions.index(tname) for v in tdepvar.values()]))==1)
-tdx = tdepvar.values()[0].dimensions.index(tname)
+if len(tdepvar) > 0:
+    assert (len(set([v.dimensions.index(tname) for v in tdepvar.values()]))==1)
+    tdx = tdepvar.values()[0].dimensions.index(tname)
 
-assert (all([v.data.shape[tdx] for v in tdepvar.values()]))
-tdim = tdepvar.values()[0].shape[tdx]
+    assert (all([v.data.shape[tdx] for v in tdepvar.values()]))
+    tdim = tdepvar.values()[0].shape[tdx]
+else:
+    tdim = 1
 
 ## Init ADIOS without xml
 init_noxml()
-allocate_buffer(BUFFER_ALLOC_WHEN.NOW, 10)
+allocate_buffer(BUFFER_ALLOC_WHEN.NOW, 100)
 gid = declare_group ("group", tname, FLAG.YES)
-select_method (gid, "MPI", "", "")
+select_method (gid, "POSIX1", "verbose=3", "")
 
 d1size = 0
 for name, val in f.dimensions.items():
@@ -64,34 +73,33 @@ for name, var in dimvar.items():
         continue
     if name in f.dimensions.keys():
         name = "v_" + name
-    print "Variable : %s (%s)" % (name, ','.join(var.dimensions))
-    define_var (gid, name, "", DATATYPE.double,
+    print "Dim variable : %s (%s)" % (name, ','.join(var.dimensions))
+    define_var (gid, name, "", np2adiostype(var.data.dtype.type),
                 ','.join(var.dimensions),
                 "",
                 "")
-    d2size += reduce(operator.mul, var.shape) * 8
+    d2size += var.data.size * var.data.dtype.itemsize
+"""
 
 v1size = 0
 for name, var in tindvar.items():
     print "Variable : %s (%s)" % (name, ','.join(var.dimensions))
-    define_var (gid, name, "", DATATYPE.double,
+    define_var (gid, name, "", np2adiostype(var.data.dtype.type),
                 ','.join(var.dimensions),
                 "",
                 "")
-    v1size += reduce(operator.mul, var.shape) * 8
-"""
-    
+    v1size += var.data.size * var.data.dtype.itemsize
+
 v2size = 0
 for name, var in tdepvar.items():
     print "Variable : %s (%s)" % (name, ','.join(var.dimensions))
-    define_var (gid, name, "", DATATYPE.double,
+    define_var (gid, name, "", np2adiostype(var.data.dtype.type),
                 ','.join(var.dimensions),
                 ','.join([dname for dname in var.dimensions
                           if dname != tname]),
                 "0,0,0")
-    v2size += reduce(operator.mul, var.shape) / tdim * 8
+    v2size += var.data.size * var.data.dtype.itemsize / tdim
 
-print "Count (dim, var) : ", (d1size, v2size)
 
 ## Clean old file
 if os.access(fout, os.F_OK):
@@ -102,7 +110,7 @@ for it in range(tdim):
     print "Time step : %d" % (it)
     
     fd = open("group", fout, "a")
-    groupsize = d1size + v2size
+    groupsize = d1size + v1size + v2size
     set_group_size(fd, groupsize)
 
     for name, val in f.dimensions.items():
@@ -110,16 +118,25 @@ for it in range(tdim):
             continue
         print "Dimension writing : %s (%d)" % (name, val)
         write_int(fd, name, val)
-        
+
+    for name, var in tindvar.items():
+        try:
+            arr = np.array(var.data,
+                           dtype=var.data.dtype.type)
+            print "Time independent variable writing : %s %s" % (name, arr.shape)
+            write(fd, name, arr)
+        except ValueError:
+            print "Skip:", name
+            
     for name, var in tdepvar.items():
         try:
             arr = np.array(var.data.take([it], axis=tdx),
-                           dtype=np.float64)
-            print "Variable writing : %s %s" % (name, arr.shape)
+                           dtype=var.data.dtype)
+            print "Time dependent variable writing : %s %s" % (name, arr.shape)
             write(fd, name, arr)
         except ValueError:
             print "Skip:", name
-
+    
     close(fd)
     
 f.close()
diff --git a/wrappers/numpy/tests/README b/wrappers/numpy/tests/README
new file mode 100644
index 0000000..4512e68
--- /dev/null
+++ b/wrappers/numpy/tests/README
@@ -0,0 +1,27 @@
+This directory contains test cases for Adios python binding.
+
+1. Serial adios module test
+---------------------------
+
+$ python ./test_adios.py
+
+will write "adios_test.bp" and read back its contents.
+
+2. Serial writing with timesteps
+--------------------------------
+
+$ python ./test_adios_timesteps.py
+
+will create "adios_test.bp" with 10 timesteps.
+
+
+3. Parallel adios module test
+-----------------------------
+
+$ mpirun -n 4 python ./test_adios_mpi.py
+
+will create "adios_test_mpi.bp" parallely written by 4 MPI
+processes. User can try to increase or decrease the number of MPI
+processes.
+
+
diff --git a/wrappers/numpy/tests/config.xml b/wrappers/numpy/tests/config.xml
index ac64f8b..1d29c90 100644
--- a/wrappers/numpy/tests/config.xml
+++ b/wrappers/numpy/tests/config.xml
@@ -9,7 +9,7 @@
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="POSIX"/>
+<method group="temperature" method="POSIX1"/>
 
 <buffer size-MB="2" allocate-time="now"/>
 

-- 
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