[adios] 141/207: 1.7.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 06:04:49 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 b5ef974eecb60d450fb2f4f1d1e8aaa8fc9dc7bb
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Fri Jun 13 23:06:11 2014 +0100

    1.7.0
---
 CMakeLists.txt                                     |   123 +-
 INSTALL                                            |    12 +-
 Makefile.am                                        |     5 +-
 Makefile.in                                        |    59 +-
 NEWS                                               |    19 +-
 aclocal.m4                                         |     3 +
 adios_config                                       |    62 +-
 cmake_init                                         |   234 +-
 config.h.cmake                                     |     6 +
 config.h.in                                        |    18 +
 config/ac_cray_pmi.m4                              |     4 +-
 config/ac_cray_ugni.m4                             |     4 +-
 config/ac_dataspaces.m4                            |    13 +-
 config/ac_dimes.m4                                 |     9 +-
 config/ac_fgr.m4                                   |    67 +
 config/ac_glib.m4                                  |    67 +
 config/ac_infiniband.m4                            |     8 +-
 config/ac_lustre.m4                                |   126 +-
 config/ac_pami.m4                                  |    71 +
 config/ac_portals.m4                               |     4 +-
 configure                                          |  2325 ++-
 configure.ac                                       |    93 +-
 examples/C/Makefile.in                             |    13 +
 examples/C/arrays/Makefile.in                      |    13 +
 examples/C/arrays/arrays_read.c                    |     2 +-
 examples/C/arrays/arrays_write.c                   |     3 +-
 examples/C/attributes/Makefile.in                  |    13 +
 examples/C/attributes/attributes_read.c            |     4 +-
 examples/C/attributes/attributes_write.c           |     3 +-
 examples/C/compression_test/Makefile.in            |    13 +
 examples/C/compression_test/adios_global.c         |     1 -
 examples/C/compression_test/adios_read_box.c       |     2 +-
 examples/C/compression_test/genarray3D.c           |    18 +-
 examples/C/compression_test/read_test.h            |     5 +-
 examples/C/flexpath_arrays/Makefile.in             |    13 +
 .../global_range_select/Makefile.in                |    13 +
 .../flexpath_arrays/global_range_select/arrays.xml |     9 +-
 .../global_range_select/arrays_read.c              |    79 +-
 .../global_range_select/arrays_write.c             |    49 +-
 .../C/flexpath_arrays/process_select/Makefile.in   |    13 +
 .../C/flexpath_arrays/process_select/arrays_read.c |     6 +-
 .../flexpath_arrays/process_select/arrays_write.c  |     3 +-
 examples/C/global-array-time/Makefile.in           |    13 +
 examples/C/global-array-time/adios_globaltime.c    |     1 -
 .../C/global-array-time/adios_globaltime_no_xml.c  |     3 +-
 .../C/global-array-time/adios_read_globaltime.c    |     3 +-
 .../adios_read_globaltime_streaming.c              |    10 +-
 examples/C/global-array/Makefile.am                |     6 +-
 examples/C/global-array/Makefile.in                |    35 +-
 examples/C/global-array/adios_global.c             |     1 -
 examples/C/global-array/adios_global.xml           |     3 +-
 examples/C/global-array/adios_global_2files.c      |     3 +-
 ..._no_xml.c => adios_global_aggregate_by_color.c} |    33 +-
 examples/C/global-array/adios_global_no_xml.c      |     6 +-
 examples/C/global-array/adios_read_chunk.c         |    14 +-
 examples/C/global-array/adios_read_global.c        |     3 +-
 examples/C/global-array/adios_read_global_no_xml.c |     5 +-
 examples/C/global-array/adios_read_gpp.c           |     3 +-
 examples/C/global-array/adios_read_writeblock.c    |     6 +-
 examples/C/global-array/no_xml_write_byid.c        |     3 +-
 examples/C/global-array/read_no_xml_write_byid.c   |     5 +-
 examples/C/manual/2_adios_write.c                  |     1 -
 examples/C/manual/3_adios_read.c                   |     2 +-
 examples/C/manual/4_adios_nfiles.c                 |     1 -
 examples/C/manual/Makefile.in                      |    13 +
 examples/C/read_all/Makefile.in                    |    13 +
 examples/C/read_all/read_all.c                     |    79 +-
 examples/C/read_all/read_all_v1.c                  |    11 +-
 examples/C/scalars/Makefile.in                     |    13 +
 examples/C/scalars/scalars_read.c                  |     4 +-
 examples/C/scalars/scalars_write.c                 |     6 +-
 examples/C/schema/CMakeLists.txt                   |    11 +
 examples/C/schema/Makefile.am                      |    18 +-
 examples/C/schema/Makefile.in                      |    80 +-
 examples/C/schema/rectilinear2d.c                  |     4 -
 examples/C/schema/rectilinear2d.readme             |     2 +
 .../{rectilinear2d.c => rectilinear2d_noxml.c}     |    92 +-
 examples/C/schema/structured2d.c                   |     4 -
 examples/C/schema/structured2d.readme              |     3 +-
 .../{structured2d.c => structured2d_noxml.c}       |    84 +-
 examples/C/schema/tri2d.c                          |     4 -
 examples/C/schema/tri2d.readme                     |     2 +
 examples/C/schema/{tri2d.c => tri2d_noxml.c}       |   142 +-
 examples/C/schema/triangle2d.c                     |     4 +-
 examples/C/schema/uniform2d.c                      |     4 -
 examples/C/schema/uniform2d.readme                 |     2 +
 .../C/schema/{uniform2d.c => uniform2d_noxml.c}    |   105 +-
 examples/C/stat/Makefile.in                        |    13 +
 examples/C/stat/stat_read.c                        |     5 +-
 examples/C/stat/stat_write.c                       |     1 -
 examples/C/transforms/Makefile.in                  |    13 +
 examples/C/transforms/adios_global.c               |     1 -
 examples/C/transforms/adios_read_all_3D.c          |    15 +-
 examples/C/transforms/adios_read_points.c          |     8 +-
 examples/C/transforms/adios_read_subv.c            |     8 +-
 examples/C/transforms/adios_read_wb_subpg.c        |    11 +-
 examples/C/transforms/adios_write_all_3D.c         |     2 +-
 examples/Fortran/Makefile.in                       |    13 +
 examples/Fortran/arrays/Makefile.in                |    13 +
 examples/Fortran/global-array-time/Makefile.in     |    13 +
 examples/Fortran/global-array/Makefile.in          |    13 +
 .../Fortran/global-array/no_xml_write_byid.F90     |     4 +
 examples/Fortran/scalars/Makefile.in               |    13 +
 examples/Makefile.in                               |    13 +
 examples/coupling/job                              |     8 +-
 examples/coupling/job1                             |     2 +
 examples/staging/stage_write/genarray_stream.F90   |     7 +-
 examples/staging/stage_write/genarray_stream.xml   |    22 +-
 examples/staging/stage_write/job                   |    31 +-
 examples/staging/stage_write/job.32                |     6 +-
 examples/staging/stage_write/make.settings         |     2 +-
 examples/staging/stage_write/stage_write.c         |    22 +-
 examples/staging/stage_write/writer_adios          |     1 +
 runconf                                            |    99 +-
 scripts/FindADIOS.cmake                            |   238 +
 src/CMakeLists.txt                                 |   608 +-
 src/Makefile.am                                    |     6 +-
 src/Makefile.in                                    |   643 +-
 src/core/adios.c                                   |   151 +-
 src/core/adios_bp_v1.c                             |   158 +-
 src/core/adios_bp_v1.h                             |    23 +-
 src/core/adios_copyspec.c                          |     3 +-
 src/core/adios_copyspec.h                          |     2 +
 src/core/adios_endianness.c                        |     1 +
 src/core/adios_internals.c                         |  1151 +-
 src/core/adios_internals.h                         |   113 +-
 src/core/adios_internals_mxml.c                    |   259 +-
 src/core/adios_read.c                              |     5 +
 src/core/adios_read_hooks.c                        |    12 +-
 src/core/adios_read_hooks.h                        |    27 +-
 src/core/adios_read_v1.c                           |    14 +-
 src/core/adios_selection_util.c                    |     5 +-
 src/core/adios_socket.c                            |     2 +-
 src/core/adios_subvolume.c                         |     7 +-
 src/core/adios_subvolume.h                         |     4 +-
 src/core/adios_timing.h                            |     2 +
 src/core/adios_transport_hooks.c                   |    34 +-
 src/core/adios_transport_hooks.h                   |     6 +-
 src/core/adiosf.c                                  |    23 +-
 src/core/adiosf_read.c                             |     9 +-
 src/core/adiosf_read_v1.c                          |    17 +-
 src/core/adiosf_write_mod.f90                      |     9 +-
 src/core/bp_types.h                                |    16 +-
 src/core/bp_utils.c                                |   114 +-
 src/core/common_adios.c                            |    12 +-
 src/core/common_adios.h                            |     1 +
 src/core/common_read.c                             |   732 +-
 src/core/common_read.h                             |     5 +
 src/core/ds_metadata.h                             |     8 +
 src/core/flexpath.h                                |     2 +
 src/core/mpidummy.c                                |    66 +-
 src/core/qhashtbl.c                                |   223 +-
 src/core/qhashtbl.h                                |    15 +-
 src/core/transforms/adios_patchdata.c              |     5 +-
 src/core/transforms/adios_transforms_common.c      |     5 +-
 src/core/transforms/adios_transforms_datablock.c   |     3 +-
 src/core/transforms/adios_transforms_hooks.c       |    49 +-
 src/core/transforms/adios_transforms_hooks.h       |     7 -
 src/core/transforms/adios_transforms_hooks_read.c  |     9 +
 src/core/transforms/adios_transforms_hooks_read.h  |     7 +
 src/core/transforms/adios_transforms_hooks_write.c |     1 +
 src/core/transforms/adios_transforms_read.c        |    14 +-
 src/core/transforms/adios_transforms_reqgroup.c    |     2 +-
 src/core/transforms/adios_transforms_specparse.c   |    13 +-
 src/core/transforms/adios_transforms_specparse.h   |     4 +-
 src/core/transforms/adios_transforms_write.c       |    36 +-
 src/core/transforms/adios_transforms_write.h       |     6 +-
 .../transforms/plugindetect/detect_plugin_infos.h  |     7 +-
 .../transforms/plugindetect/plugin_info_types.h    |     3 +-
 src/core/util.c                                    |    91 +-
 src/core/util.h                                    |     3 +
 src/public/adios.h                                 |    90 +-
 src/public/adios_error.h                           |    17 +-
 src/public/adios_read_v1.h                         |     8 +-
 src/public/adios_read_v1_defs.h                    |     1 +
 src/public/adios_read_v2.h                         |    44 +-
 src/public/adios_read_v2_fwd.h                     |    43 +
 src/public/adios_schema.h                          |     9 +
 src/public/adios_types.h                           |     8 +
 src/public/mpidummy.h                              |    23 +-
 src/read/read_bp.c                                 |   615 +-
 src/read/read_bp_staged.c                          |   127 +-
 src/read/read_bp_staged1.c                         |    14 +-
 src/read/read_dataspaces.c                         |   357 +-
 src/read/read_dimes.c                              |   440 +-
 src/read/read_flexpath.c                           |   433 +-
 src/transforms/adios_transform_alacrity_read.c     |     2 +
 src/transforms/adios_transform_alacrity_write.c    |     2 +-
 src/transforms/adios_transform_aplod_read.c        |     2 +
 src/transforms/adios_transform_aplod_write.c       |     2 +-
 src/transforms/adios_transform_bzip2_read.c        |     2 +
 src/transforms/adios_transform_bzip2_write.c       |     2 +-
 src/transforms/adios_transform_identity_read.c     |     8 +
 src/transforms/adios_transform_identity_write.c    |     2 +-
 src/transforms/adios_transform_isobar_read.c       |     2 +
 src/transforms/adios_transform_isobar_write.c      |     2 +-
 src/transforms/adios_transform_szip_read.c         |     2 +
 src/transforms/adios_transform_szip_write.c        |     2 +-
 src/transforms/adios_transform_zlib_read.c         |     3 +
 src/transforms/adios_transform_zlib_write.c        |     5 +-
 src/write/adios_dataspaces.c                       |   360 +-
 src/write/adios_dimes.c                            |   436 +-
 src/write/adios_flexpath.c                         |   165 +-
 src/write/adios_mpi.c                              |    51 +-
 src/write/adios_mpi_amr.c                          |   431 +-
 src/write/adios_mpi_bgq.c                          |    21 +-
 src/write/adios_mpi_lustre.c                       |    75 +-
 src/write/adios_nc4.c                              |     1 +
 src/write/adios_nssi.c                             |     2 +-
 src/write/adios_posix.c                            |    78 +-
 src/write/adios_posix1.c                           |    75 +-
 src/write/adios_var_merge.c                        |   155 +-
 tests/C/Makefile.in                                |    13 +
 tests/C/adios_test_c.c                             |    21 +-
 tests/C/flexpath_tests/1D_arr_global/Makefile.am   |     2 +-
 tests/C/flexpath_tests/1D_arr_global/Makefile.in   |    15 +-
 tests/C/flexpath_tests/1D_arr_global/reader.c      |     5 -
 tests/C/flexpath_tests/1D_arr_global/readme.txt    |   108 +
 tests/C/flexpath_tests/1D_arr_global/writer.c      |     2 +-
 .../flexpath_tests/1D_arr_global_noxml/Makefile.am |     2 +-
 .../flexpath_tests/1D_arr_global_noxml/Makefile.in |    15 +-
 .../C/flexpath_tests/1D_arr_global_noxml/reader.c  |     5 +-
 .../flexpath_tests/1D_arr_global_noxml/readme.txt  |   104 +
 .../C/flexpath_tests/1D_arr_global_noxml/writer.c  |     2 +-
 tests/C/flexpath_tests/Makefile.in                 |    13 +
 tests/C/flexpath_tests/common/utils.c              |     2 +-
 .../flexpath_tests/global_range_select/Makefile.in |    13 +
 .../global_range_select/arrays_read.c              |     6 +-
 tests/C/flexpath_tests/include/test_common.h       |     2 +-
 tests/C/flexpath_tests/include/utils.h             |     1 +
 tests/C/flexpath_tests/maya_append/Makefile.in     |    13 +
 tests/C/flexpath_tests/maya_append/reader.c        |     6 +-
 tests/C/flexpath_tests/maya_append/writer.c        |     2 +-
 tests/C/flexpath_tests/maya_noxml/Makefile.in      |    13 +
 tests/C/flexpath_tests/maya_noxml/reader.c         |     4 +-
 tests/C/flexpath_tests/maya_noxml/writer.c         |     4 +-
 tests/C/flexpath_tests/scalar/Makefile.in          |    13 +
 tests/C/flexpath_tests/scalar/reader.c             |     1 -
 tests/C/flexpath_tests/scalar/writer.c             |     2 +-
 tests/Fortran/Makefile.in                          |    13 +
 tests/Makefile.in                                  |    13 +
 tests/bp_read/Makefile.am                          |     2 +
 tests/bp_read/Makefile.in                          |    14 +
 tests/bp_read/bp_read_c.c                          |    16 +-
 tests/bp_read/genbp.c                              |     2 +-
 tests/bp_read/testbp_c.xml                         |    21 +
 tests/genarray/CMakeLists.txt                      |     2 +-
 tests/genarray/Makefile.in                         |    13 +
 tests/suite/Makefile.in                            |    13 +
 tests/suite/programs/Makefile.am                   |    36 +-
 tests/suite/programs/Makefile.in                   |   179 +-
 tests/suite/programs/{many_vars.c => big_file.c}   |   206 +-
 tests/suite/programs/group_free_test.c             |    85 +
 tests/suite/programs/hashtest.c                    |    27 +-
 tests/suite/programs/many_vars.c                   |     3 +-
 tests/suite/programs/set_path.c                    |   334 +
 tests/suite/programs/set_path_var.c                |   353 +
 tests/suite/programs/steps_read_file.c             |   197 +
 tests/suite/programs/steps_read_stream.c           |   231 +
 tests/suite/programs/steps_write.c                 |    91 +
 tests/suite/programs/transforms_specparse.c        |    30 +-
 tests/suite/reference/arrays_bpls.txt              |     2 +-
 tests/suite/reference/attributes_bpls.txt          |     2 +-
 tests/suite/reference/global_array_no_xml_bpls.txt |     2 +-
 .../suite/reference/global_array_no_xml_f_bpls.txt |     2 +-
 tests/suite/reference/no_xml_write_byid_bpls.txt   |     2 +-
 tests/suite/reference/no_xml_write_byid_f_bpls.txt |     2 +-
 tests/suite/reference/scalars_write_bpls.txt       |     2 +-
 utils/CMakeLists.txt                               |     1 +
 utils/Makefile.am                                  |     4 +-
 utils/Makefile.in                                  |    20 +-
 utils/adios_lint/Makefile.in                       |    13 +
 utils/adios_lint/adios_lint.c                      |     4 +-
 utils/bp2ascii/Makefile.in                         |    13 +
 utils/bp2ascii/bp2ascii.c                          |    18 +-
 utils/bp2bp/Makefile.in                            |    13 +
 utils/bp2bp/bp2bp.c                                |    11 +-
 utils/bp2h5/Makefile.in                            |    13 +
 utils/bp2ncd/Makefile.in                           |    13 +
 utils/bpdiff/Makefile.in                           |    13 +
 utils/bpdiff/bpdiff.c                              |   207 +-
 utils/bpdump/Makefile.in                           |    13 +
 utils/bpdump/bpdump.c                              |    31 +-
 utils/bpls/Makefile.in                             |    13 +
 utils/bpls/bpls.c                                  |   146 +-
 utils/bpls/bpls.h                                  |     2 +-
 utils/bpsplit/Makefile.in                          |    13 +
 utils/bpsplit/bpappend.c                           |    21 +-
 utils/bpsplit/bpgettime.c                          |     5 +-
 utils/bpsplit/bpsplit.c                            |     9 +-
 utils/gpp/Makefile.in                              |    13 +
 utils/gpp/ad_config.py                             |     4 +-
 utils/list_methods/CMakeLists.txt                  |    28 +
 utils/list_methods/Makefile.am                     |    36 +
 utils/{bpsplit => list_methods}/Makefile.in        |   184 +-
 utils/list_methods/list_methods.c                  |   427 +
 utils/skel/CMakeLists.txt                          |    21 +-
 utils/skel/Makefile.am                             |    26 +-
 utils/skel/Makefile.in                             |    38 +-
 utils/skel/bin/skel                                |    70 +-
 utils/skel/etc/Makefile.in                         |    13 +
 utils/skel/etc/templates/Makefile.tmpl             |    19 +
 utils/skel/etc/templates/create_suite.tmpl         |    15 +
 utils/skel/etc/templates/replay.tmpl               |     5 +
 utils/skel/etc/templates/replay_bp.tmpl            |    18 +
 utils/skel/etc/templates/replay_yaml.tmpl          |    10 +
 utils/skel/etc/templates/source_write_c.tmpl       |   207 +
 utils/skel/etc/templates/source_write_fortran.tmpl |   216 +
 utils/skel/etc/templates/submit_nautilus.tmpl      |    33 +
 utils/skel/etc/templates/submit_sith.tmpl          |    29 +
 utils/skel/etc/templates/xml.tmpl                  |    29 +
 utils/skel/lib/skel_bpy.py                         |   193 +-
 utils/skel/lib/skel_makefile.py                    |    15 +-
 utils/skel/lib/skel_params.py                      |    50 +-
 utils/skel/lib/skel_replay.py                      |    10 +-
 utils/skel/lib/skel_source.py                      |    17 +-
 utils/skel/lib/skel_submit.py                      |    10 +-
 utils/skel/lib/skel_suite.py                       |    68 +
 utils/skel/lib/skel_template.py                    |    63 +
 utils/skel/lib/skel_test_plan.py                   |    66 +
 utils/skel/lib/skel_xml.py                         |     9 +-
 utils/skel/src/Makefile.in                         |    13 +
 utils/skeldump/Makefile.in                         |    13 +
 utils/skeldump/skeldump.c                          |    23 +-
 wrappers/matlab/adiosopenc_staging.c               |   427 +
 wrappers/matlab/writer.bp                          |   Bin 0 -> 23064 bytes
 wrappers/numpy/CMakeLists.txt                      |    61 -
 wrappers/numpy/Makefile                            |    53 +
 wrappers/numpy/Modules/CMakeUtilityFunctions.cmake |    19 -
 wrappers/numpy/Modules/FindADIOS.cmake             |   136 -
 wrappers/numpy/Modules/FindMPI4Py.cmake            |    65 -
 wrappers/numpy/Modules/FindNumpy.cmake             |    57 -
 .../Modules/FindPackageHandleStandardArgs.cmake    |   260 -
 wrappers/numpy/README                              |    75 +-
 wrappers/numpy/adios.cpp                           | 18457 +++++++++---------
 wrappers/numpy/adios.pyx                           |   502 +-
 wrappers/numpy/{adios.cpp => adios_mpi.cpp}        | 18951 +++++++++----------
 wrappers/numpy/{adios.pyx => adios_mpi.pyx}        |   496 +-
 wrappers/numpy/conf/CMakeLists.txt                 |   205 +
 wrappers/numpy/conf/MANIFEST.in                    |    15 +
 wrappers/numpy/conf/__init__.py                    |     0
 wrappers/numpy/conf/__init__.pyc                   |   Bin 0 -> 149 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 0 -> 11220 bytes
 wrappers/numpy/conf/mpidistutils.py                |  1534 ++
 wrappers/numpy/conf/mpidistutils.pyc               |   Bin 0 -> 54064 bytes
 wrappers/numpy/conf/mpiregexes.py                  |    75 +
 wrappers/numpy/conf/mpiregexes.pyc                 |   Bin 0 -> 2495 bytes
 wrappers/numpy/conf/mpiscanner.py                  |   342 +
 wrappers/numpy/conf/mpiscanner.pyc                 |   Bin 0 -> 15203 bytes
 wrappers/numpy/example/ncdf2bp.py                  |    13 +-
 wrappers/numpy/mpi.cfg                             |   184 +
 wrappers/numpy/mpiconfig.py                        |   363 +
 wrappers/numpy/mpidistutils.py                     |  1534 ++
 wrappers/numpy/setup.py                            |     9 +-
 wrappers/numpy/{setup.py => setup_mpi.py}          |    11 +-
 wrappers/numpy/test/adios_noxml_test.py            |    29 -
 wrappers/numpy/test/adios_read_test.py             |    14 -
 wrappers/numpy/test/adios_write_test.py            |    21 -
 wrappers/numpy/test/test_adios_noxml.sh            |    15 -
 .../{test/test_adios_read.sh => tests/config.xml}  |    23 +-
 .../test_adios_write.sh => tests/config_mpi.xml}   |    18 -
 wrappers/numpy/tests/test_adios.py                 |    51 +
 wrappers/numpy/tests/test_adios_mpi.py             |    59 +
 wrappers/numpy/tests/test_adios_timestep.py        |    58 +
 370 files changed, 37372 insertions(+), 26267 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 56a6578..0861c48 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -160,7 +160,7 @@ else()
 endif()
 
 if(DEFINED ENV{PAR_NC_DIR})
-  if($ENV{PAR_NC_DIR} STREQUAL "")
+  if("$ENV{PAR_NC_DIR}" STREQUAL "")
     set(NC4PAR OFF CACHE BOOL "")
   else()
     set(NC4PAR ON CACHE BOOL "")
@@ -356,7 +356,7 @@ if(DEFINED ENV{SEQ_HDF5_DIR})
     set(HDF5 ON CACHE BOOL "" FORCE)
     set(HDF5_DIR "$ENV{SEQ_HDF5_DIR}" CACHE FILEPATH "path to hdf5 dir")
     set(HDF5_FLAGS "-I${HDF5_DIR}/include")
-#  set(HDF5_LIBS "$ENV{SEQ_HDF5_CLIB}" CACHE FILEPATH "sequential hdf5")
+#    set(HDF5_LIBS "$ENV{SEQ_HDF5_CLIB}" CACHE FILEPATH "sequential hdf5")
   endif()
 else()
   set(HDF5 OFF CACHE BOOL "")
@@ -371,6 +371,42 @@ else()
   set(LUSTRE OFF CACHE BOOL "")
 endif()
 
+if(DEFINED ENV{GLIB_DIR})
+  if("$ENV{GLIB_DIR}" STREQUAL "")
+    set(GLIB OFF CACHE BOOL "")
+  else()
+    set(GLIB ON CACHE BOOL "")
+    set(GLIB_DIR "$ENV{GLIB_DIR}")
+  endif()
+elseif(DEFINED ENV{GLIB})
+  if("$ENV{GLIB}" STREQUAL "")
+    set(GLIB OFF CACHE BOOL "")
+  else()
+    set(GLIB ON CACHE BOOL "")
+    set(GLIB_DIR "$ENV{GLIB}")
+  endif()
+endif()
+
+if(GLIB)
+  if(DEFINED ENV{FGR_DIR})
+    if("$ENV{FGR_DIR}" STREQUAL "")
+      set(FGR OFF CACHE BOOL "")
+    else()
+      set(FGR ON CACHE BOOL "")
+      set(FGR_DIR "$ENV{FGR_DIR}")
+    endif()
+  elseif(DEFINED ENV{FGR})
+    if("$ENV{FGR}" STREQUAL "")
+      set(FGR OFF CACHE BOOL "")
+    else()
+      set(FGR ON CACHE BOOL "")
+      set(FGR_DIR "$ENV{FGR}")
+    endif()
+  endif()
+else()
+  set(FGR OFF CACHE BOOL "")
+endif()
+ 
 if(DEFINED ENV{BZIP2_DIR})
   if("$ENV{BZIP2_DIR}" STREQUAL "")
     set(BZIP2 OFF CACHE BOOL "")
@@ -620,7 +656,7 @@ if(HAVE_DATASPACES_H)
     set(DATASPACES_LIBS2 "${DATASPACES_LIBS2}" CACHE INTERNAL "Internal variable")
     find_library(DATASPACES_LIBS3 NAMES libdart.a  PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS3 "${DATASPACES_LIBS3}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS4 NAMES librdmacm.a  PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS4 NAMES rdmacm  PATHS ${DATASPACES_LIBDIR} /usr/lib64)
     set(DATASPACES_LIBS4 "${DATASPACES_LIBS4}" CACHE INTERNAL "Internal variable")
     if(DATASPACES_LIBS1 AND DATASPACES_LIBS2 AND DATASPACES_LIBS3 AND DATASPACES_LIBS4)
       set(DATASPACES_LIBS ${DATASPACES_LIBS1} ${DATASPACES_LIBS2} ${DATASPACES_LIBS3} ${DATASPACES_LIBS4})
@@ -784,7 +820,7 @@ endif(BUILD_FORTRAN)
 if(HDF5)
    set(HAVE_HDF5 1)
 #    link_directories(${HDF5_DIR}/lib)
-  set(HDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "")
+   set(HDF5_LIBS $ENV{SEQ_HDF5_LIBS} CACHE STRING "" FORCE)
 
   find_path(HDF5_INCLUDE_DIR hdf5.h ${HDF5_DIR}/include)
   if(HDF5_INCLUDE_DIR)
@@ -960,7 +996,7 @@ set(HAVE_PABLO 0)
 
 # Define if you have PHDF5.
 if(PHDF5)
-  set(PHDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "")
+  set(PHDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "" FORCE)
   set(HAVE_PHDF5 1)
   find_path(PHDF5_INCLUDE_DIR hdf5.h ${PHDF5_DIR}/include)
   if(PHDF5_INCLUDE_DIR)
@@ -1069,7 +1105,7 @@ set(NO_DATATAP 1)
 set(HAVE_ZLIB 0)
 set(HAVE_ZLIB_H 0)
 #CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
-#find_library(ZLIB_LIBS NAMES libz.a PATHS ${SZIP_DIR}/lib)
+#find_library(ZLIB_LIBS NAMES libz.a PATHS ${ZIP_DIR}/lib)
 #if(HAVE_ZLIB_H AND ZLIB_LIBS)
 
 set(HAVE_ZLIB 0)
@@ -1087,6 +1123,38 @@ else()
    set(ZLIB OFF CACHE BOOL "")
 endif()
 
+set(HAVE_GLIB 0)
+if(GLIB)
+  find_path(GLIB_INCLUDE_DIR1 NAMES glib.h PATHS ${GLIB_DIR}/include/glib-2.0/)
+  set(GLIB_INCLUDE_DIR1 "${GLIB_INCLUDE_DIR1}" CACHE INTERNAL "Internal variable")
+  find_path(GLIB_INCLUDE_DIR2 NAMES glibconfig.h PATHS ${GLIB_DIR}/lib/glib-2.0/include)
+  set(GLIB_INCLUDE_DIR2 "${GLIB_INCLUDE_DIR2}" CACHE INTERNAL "Internal variable")
+  set(GLIB_INCLUDE_DIR "${GLIB_INCLUDE_DIR1} ${GLIB_INCLUDE_DIR2}" CACHE FILEPATH "")
+  find_library(GLIB_LIBS NAMES glib-2.0 PATHS ${GLIB_DIR}/lib NO_DEFAULT_PATH)
+  if(GLIB_INCLUDE_DIR1 AND GLIB_INCLUDE_DIR2 AND GLIB_LIBS)
+    set(HAVE_GLIB 1)
+    set(GLIB_CPPFLAGS "-I${GLIB_INCLUDE_DIR1} -I${GLIB_INCLUDE_DIR2}")
+  else()
+    set(GLIB OFF CACHE BOOL "" FORCE)
+  endif()
+endif()
+
+set(HAVE_FGR 0)
+if(FGR)
+  if(HAVE_GLIB)
+    find_path(FGR_INCLUDE_DIR NAMES fgr.h PATHS ${FGR_DIR}/include)
+    find_library(FGR_LIBS NAMES fgr PATHS ${FGR_DIR}/lib)
+    if(FGR_INCLUDE_DIR AND FGR_LIBS)
+      set(HAVE_FGR 1)
+      set(FGR_CPPFLAGS "-I${FGR_INCLUDE_DIR}")
+    else()
+      set(FGR OFF CACHE BOOL "" FORCE)
+    endif()
+  else()
+    set(FGR OFF CACHE BOOL "" FORCE)
+  endif()
+endif()
+
 set(HAVE_BZIP2 0)
 if(BZIP2)
   find_path(BZIP2_INCLUDE_DIR NAMES bzlib.h PATHS ${BZIP2_DIR}/include)
@@ -1201,10 +1269,10 @@ set(PACKAGE adios)
 set(VERSION_MAJOR 1)
 
 # Minor version number
-set(VERSION_MINOR 5)
+set(VERSION_MINOR 6)
 
 # Micro version number
-set(VERSION_MICRO 1)
+set(VERSION_MICRO 0)
 
 # Version number of package
 set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO})
@@ -1438,6 +1506,24 @@ if(HAVE_LUSTRE)
   set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS})
 endif()
 
+if(HAVE_FGR)
+    set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${FGR_CPPFLAGS}")
+    set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${FGR_CFLAGS}")
+    set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${FGR_LIBS})
+    set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${FGR_CPPFLAGS}")
+    set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${FGR_CFLAGS}")
+    set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${FGR_LIBS})
+endif()
+
+if(HAVE_GLIB)
+    set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${GLIB_CPPFLAGS}")
+    set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${GLIB_CFLAGS}")
+    set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${GLIB_LIBS})
+    set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${GLIB_CPPFLAGS}")
+    set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${GLIB_CFLAGS}")
+    set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${GLIB_LIBS})
+endif()
+
 if(HAVE_ZLIB)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}")
@@ -1630,6 +1716,7 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/adios_config.flags.in ${CMAKE_CURRENT
 #####################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}) 
 
 add_subdirectory(utils)
 add_subdirectory(tests)
@@ -1687,6 +1774,26 @@ else()
   message("  - No LUSTRE")
   message("")
 endif()
+if(HAVE_FGR)
+    message("  - FGR")
+    message("      - FGR_CFLAGS = ${FGR_CFLAGS}")
+    message("      - FGR_CPPFLAGS = ${FGR_CPPFLAGS}")
+    message("      - FGR_LIBS = ${FGR_LIBS}")
+    message("")
+else()
+  message("  - No FGR")
+  message("")
+endif()
+if(HAVE_GLIB)
+  message("  - GLIB")
+  message("      - GLIB_CFLAGS = ${GLIB_CFLAGS}")
+  message("      - GLIB_CPPFLAGS = ${GLIB_CPPFLAGS}")
+  message("      - GLIB_LIBS = ${GLIB_LIBS}")
+  message("")
+else()
+  message("  - No GLIB")
+  message("")
+endif()
 message("  - Networking library for staging methods:")
 if(HAVE_PORTALS)
   message("    - PORTALS")
diff --git a/INSTALL b/INSTALL
index 910bb35..c5a2a51 100644
--- a/INSTALL
+++ b/INSTALL
@@ -18,10 +18,12 @@ Requirements and optional features
 
  - ADIOS requires MPI and MPI-IO. 
 
- - ADIOS requires a version 2.5 or higher of Mini-XML.
+ - ADIOS requires Mini-XML. Versions 2.5, 2.6 and 2.7 are supported.
    The Mini-XML library is used to parse XML configuration files. 
    It can be downloaded from 
-      http://www.minixml.org/software.php
+      http://www.msweet.org/downloads.php?L+Z3
+      http://www.msweet.org/files/project3/mxml-2.7.tar.gz
+   Note that ADIOS does NOT work with mxml 2.8
 
  - A Fortran 90 compiler is optional.
    The Fortran API is built only if a Fortran 90 compiler is available.
@@ -36,6 +38,8 @@ Requirements and optional features
    NetCDF version 3.6.2 can be downloaded from
        http://www.unidata.ucar.edu/downloads/netcdf
 
+   For this purpose, you can use a sequential build of NetCDF-4 too. 
+
  - HDF5 is optional.
    The bp2h5 converter utility to HDF5 format is built only if a HDF5 
    library is available. Currently ADIOS uses the 1.6 version of the HDF5 
@@ -88,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.0.tar.gz
-   $ cd adios-1.0
+   $ tar zxf adios-1.7.0.tar.gz
+   $ cd adios-1.7.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 c1cf83f..e730ec0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,8 @@ EXTRA_DIST = runconf \
              adios_config \
              scripts/create.nssi.config.sh \
              scripts/kill.nssi.staging.sh \
-             scripts/start.nssi.staging.sh
+             scripts/start.nssi.staging.sh \
+	     scripts/FindADIOS.cmake
 
 #             wrappers/matlab/Makefile \
 #             wrappers/matlab/adios.m \
@@ -26,6 +27,8 @@ if HAVE_NSSI
                    scripts/start.nssi.staging.sh
 endif
 
+sysconf_DATA = scripts/FindADIOS.cmake
+
 #install-data-hook:
 #	echo -n "VERSIONSTRING=\"$(PACKAGE) version $(VERSION) svn revision " >> adios_config.flags
 #	if type svnversion &>/dev/null; then \
diff --git a/Makefile.in b/Makefile.in
index fc4f662..fec1d2c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -15,6 +15,7 @@
 
 @SET_MAKE@
 
+
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
@@ -58,7 +59,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -69,6 +72,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -106,7 +110,7 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"
 SCRIPTS = $(bin_SCRIPTS)
 SOURCES =
 DIST_SOURCES =
@@ -117,6 +121,7 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+DATA = $(sysconf_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -244,9 +249,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -313,6 +324,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -406,7 +421,8 @@ EXTRA_DIST = runconf \
              adios_config \
              scripts/create.nssi.config.sh \
              scripts/kill.nssi.staging.sh \
-             scripts/start.nssi.staging.sh
+             scripts/start.nssi.staging.sh \
+	     scripts/FindADIOS.cmake
 
 
 #             wrappers/matlab/Makefile \
@@ -418,6 +434,7 @@ EXTRA_DIST = runconf \
 #             wrappers/matlab/adiosopenc.c \
 #             wrappers/matlab/adiosreadc.c 
 bin_SCRIPTS = adios_config $(am__append_1)
+sysconf_DATA = scripts/FindADIOS.cmake
 all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
@@ -520,6 +537,26 @@ clean-libtool:
 
 distclean-libtool:
 	-rm -f libtool config.lt
+install-sysconfDATA: $(sysconf_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)"
+	@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \
+	done
+
+uninstall-sysconfDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(sysconfdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(sysconfdir)" && rm -f $$files
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -833,10 +870,10 @@ distcleancheck: distclean
 	       exit 1; } >&2
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(SCRIPTS) config.h
+all-am: Makefile $(SCRIPTS) $(DATA) config.h
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-recursive
@@ -893,7 +930,7 @@ install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
-install-exec-am: install-binSCRIPTS
+install-exec-am: install-binSCRIPTS install-sysconfDATA
 
 install-html: install-html-recursive
 
@@ -933,7 +970,7 @@ ps: ps-recursive
 
 ps-am:
 
-uninstall-am: uninstall-binSCRIPTS
+uninstall-am: uninstall-binSCRIPTS uninstall-sysconfDATA
 
 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
 	ctags-recursive install-am install-data-am install-strip \
@@ -951,11 +988,11 @@ uninstall-am: uninstall-binSCRIPTS
 	install-exec install-exec-am install-html install-html-am \
 	install-info install-info-am install-man install-pdf \
 	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am \
-	uninstall-binSCRIPTS
+	install-sysconfDATA installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-binSCRIPTS uninstall-sysconfDATA
 
 
 #install-data-hook:
diff --git a/NEWS b/NEWS
index b3216c0..09acc23 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,24 @@
+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
+    - DataSpaces staging 
+      - support for 64bit dimension sizes 
+      - support for more than three dimensions
+      - works on Bluegene/Q (DataSpaces+DIMES methods)
+      - can run as a service (dynamic connections)
+    - Additions to non-XML Write API: 
+      - Support for the visualization schema
+      - adios_set_transform() to choose the transformation
+        for a variable
+    - Usability improvements:
+      - CMake Module for find_package(ADIOS)
+      - adios_config -m to print available write/read methods
+
+
 1.6.0 Release Dec 2013
     - Transformations of data supported in file-based I/O
       - lossless compression (zlib, bzip, szip)
-      - lossy compression (ISOBAR)
+      - lossless compression (ISOBAR)
       - precision-level-of-detail encoding (APLOD)
     - Changes to Write API:
       - variables are identified by full path at writing
diff --git a/aclocal.m4 b/aclocal.m4
index 898c106..0d5abd2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -8984,7 +8984,9 @@ 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])
@@ -8995,6 +8997,7 @@ 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])
diff --git a/adios_config b/adios_config
index fc5bab2..0327a35 100755
--- a/adios_config
+++ b/adios_config
@@ -6,20 +6,22 @@
 # Configuration values from configure script
 #
 
-FLAGSFILE=`dirname $0`/adios_config.flags
+MYDIR=`dirname $0`
+
+FLAGSFILE=${MYDIR}/adios_config.flags
 if [ ! -f ${FLAGSFILE} ]; then
     echo "ERROR: settings file ${FLAGSFILE} not found."
     exit 1
 fi
 . ${FLAGSFILE}
 
-GITSTATFILE=`dirname $0`/git.status
+GITSTATFILE=${MYDIR}/git.status
 if [ -f ${GITSTATFILE} ]; then
     . ${GITSTATFILE}
 fi
 
 function Usage () {
-    echo "`basename $0` [-d | -c | -l] [-f] [-r] [-s] [-1] [-v] [-i]
+    echo "`basename $0` [-d | -c | -l] [-f] [-r] [-s] [-1] [-m] [-v] [-i]
 Arguments
    -d   Base directory for ADIOS install
    -c   Compiler flags for C/C++, using ADIOS write/read methods
@@ -30,6 +32,8 @@ Arguments
    -s   Print above flags for using ADIOS in a sequential code (no MPI). 
    -1   Print above flags for using old Read API of ADIOS.
 
+   -m   Print available write/read methods and data transformation methods
+
    -v   Version of the installed package
    -i   More installation information about the package
 
@@ -39,6 +43,7 @@ Notes
    - If none of d,c,l are given, all of them is printed
    - If none of f,r,s are given, flags for C/C++, using ADIOS write/read 
      methods are printed
+   - -m can be combined with -r (readonly libraries) and -s (sequential libraries)
 "
 }
 
@@ -50,8 +55,9 @@ OPT_FORTRAN=no
 OPT_READ=no
 OPT_SEQ=no
 NFLAGS_ASKED=0
+PRINT_METHODS=no
 
-while getopts ":dclfrs1vih" Option
+while getopts ":dclfrs1mvih" Option
 do          
   case $Option in               
         d) PRINT_DIR=yes; let "NFLAGS_ASKED=NFLAGS_ASKED+1";;
@@ -61,6 +67,7 @@ do
         r) OPT_READ=yes;;
         s) OPT_SEQ=yes;;
         1) OPT_V1=yes;;
+        m) PRINT_METHODS=yes; let "NFLAGS_ASKED=NFLAGS_ASKED+1";;
         v) echo "$VERSIONSTRING"; 
            exit 0;;
         i) echo "ADIOS $VERSIONSTRING"; 
@@ -75,10 +82,11 @@ done
 shift $(($OPTIND - 1))
 
 if [ $NFLAGS_ASKED == 0 ]; then
-    NFLAGS_ASKED=3;
+    NFLAGS_ASKED=4;
     PRINT_DIR=yes
     PRINT_CFLAGS=yes
     PRINT_LDFLAGS=yes
+    PRINT_METHODS=yes
 fi
 
 #if [ "$OPT_SEQ" == "yes" ]; then
@@ -175,5 +183,49 @@ if [ "$PRINT_LDFLAGS" == "yes" ]; then
 fi
 
 
+if [ "$PRINT_METHODS" == "yes" ]; then
+    if [ "$OPT_SEQ" == "yes" ]; then
+        if [ "$OPT_READ" == "yes" ]; then
+            # ADIOSREAD + SEQ
+            if [ -x ${MYDIR}/list_methods_readonly_nompi ]; then
+                ${MYDIR}/list_methods_readonly_nompi
+            elif [ -x ./utils/list_methods/list_methods_readonly_nompi ]; then
+                ./utils/list_methods/list_methods_readonly_nompi
+            else
+                echo "ERROR: cannot find executable list_methods_readonly_nompi"
+            fi
+        else
+            # ADIOS + SEQ
+            if [ -x ${MYDIR}/list_methods_nompi ]; then
+                ${MYDIR}/list_methods_nompi
+            elif [ -x ./utils/list_methods/list_methods_nompi ]; then
+                ./utils/list_methods/list_methods_nompi
+            else
+               echo "ERROR: cannot find executable list_methods_nompi"
+            fi
+        fi
+    else
+        if [ "$OPT_READ" == "yes" ]; then
+            # ADIOSREAD
+            if [ -x ${MYDIR}/list_methods_readonly ]; then
+                ${MYDIR}/list_methods_readonly
+            elif [ -x ./utils/list_methods/list_methods_readonly ]; then
+                ./utils/list_methods/list_methods_readonly
+            else
+                echo "ERROR: cannot find executable list_methods_readonly"
+            fi
+        else
+            # ADIOS
+            if [ -x ${MYDIR}/list_methods ]; then
+                ${MYDIR}/list_methods
+            elif [ -x ./utils/list_methods/list_methods ]; then
+                ./utils/list_methods/list_methods
+            else
+               echo "ERROR: cannot find executable list_methods"
+            fi
+        fi
+    fi
+fi
+
 
 
diff --git a/cmake_init b/cmake_init
index 84445d5..29041e5 100755
--- a/cmake_init
+++ b/cmake_init
@@ -29,31 +29,11 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     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.10
-    export SEQ_HDF5_DIR=$HDF5_DIR
-    export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-    module unload hdf5
     module load szip
     module load bzip2
-    module load hdf5/1.8.10_par
-    export PAR_HDF5_DIR=$HDF5_DIR
-    export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-    module unload hdf5/1.8.10_par
-# start of  Seq. NetCDF 4 
-    module load netcdf/4.1.3
-    export SEQ_NC_DIR=$NETCDF_DIR
-    export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi12.8/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-    module unload netcdf
-# end of  Seq. NetCDF 4
-# start of Parallel NetCDF 4
-    module load netcdf/4.1.3_par
-    export PAR_NC_DIR=$NETCDF_DIR
-    export PAR_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#    module unload netcdf
-# end of Parallel NetCDF 4 
     export LUSTRE_DIR="/usr/lib64"
+    export 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
@@ -67,14 +47,64 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     export ALACRITY_DIR
     export NCSU_TIMER_DIR
     if [ "$TARGET" == "pgi" ]; then
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi12.8/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+        module load netcdf/4.1.3_par
+        export PAR_NC_DIR=$NETCDF_DIR
+        export PAR_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3_par
+
         export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
         export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "gnu" ]; then
-        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_gnu4.7.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+#        module load netcdf/4.1.3_par
+#        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"
     elif [ "$TARGET" == "intel" ]; then
-        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
-        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_intel11.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+#        module load netcdf/4.1.3_par
+#        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=
     else
         echo "TARGET must be pgi or gnu or intel"
         exit 1
@@ -258,30 +288,10 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         module unload PrgEnv-cray
         #module unload papi
         module load PrgEnv-$TARGET
-        module swap xtpe-interlagos xtpe-istanbul
-        #module load szip
+        module swap craype-interlagos craype-istanbul
+        module load szip
         #module load xt-papi
         module load mxml
-#        module load hdf5/1.8.11
-#    	export SEQ_HDF5_DIR=$HDF5_DIR
-#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#    	module unload hdf5/1.8.11
-#    	module load hdf5-parallel/1.8.11
-#    	export PAR_HDF5_DIR=$HDF5_DIR
-#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#    	module unload hdf5-parallel/1.8.11
-# start of Seq. NetCDF 4 
-#    	module load netcdf/4.2.0
-#    	export SEQ_NC_DIR=$NETCDF_DIR
-#    	export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.2.0/pgi/119/lib -lnetcdf"
-#    	module unload netcdf/4.2.0
-#end of Seq. NetCDF 4 
-#start of Parallel NetCDF 4
-    	module load netcdf-hdf5parallel/4.2.0
-    	export PAR_NC_DIR=$NETCDF_DIR
-    	export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.2.0/pgi/119/lib -lnetcdf"
-     	module unload netcdf
-#endof Parallel NetCDF 4 
     	# use the two lines below for openmpi
         export 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"
@@ -293,6 +303,7 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         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 INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET"
             
@@ -317,61 +328,92 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #module unload papi
         #module unload xtpe-quadcore
         module load PrgEnv-$TARGET
-        module swap xtpe-interlagos xtpe-istanbul
+        module swap craype-interlagos craype-istanbul
 	    #module load xtpe-istanbul
         unset EXTRA_LIBS
         unset LDFLAGS
         if [ "$TARGET" == "pgi" ]; then
             #module swap pgi pgi/11.8.0
             # NSSI needs -pgcpplibs flag 
-            export LDFLAGS="-pgcpplibs" 
-            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET-1.3.0"
+            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
+            export LDFLAGS="-pgcpplibs -Wl,-Bstatic" 
+            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
+            export FLEXPATH_DIR="/ccs/proj/e2e/chaos/titan/$TARGET"
         elif [ "$TARGET" == "gnu" ]; then
             # 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 
         else
             unset DATASPACES_DIR
         fi
      
         # NOTE hdf5-parallel module does not work with C++ compiler
-#start of seq and parallel hdf5
-#        module unload hdf5
-#        module load hdf5/1.8.8
-#        export SEQ_HDF5_DIR=$HDF5_DIR
-#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.8/pgi/119/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.10.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#	module unload hdf5/1.8.8
-#        module load hdf5-parallel/1.8.8
-#        export PAR_HDF5_DIR=$HDF5_DIR
-#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.8/pgi/119/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.10.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm "
-#        module unload hdf5-paralle/1.8.8
-#end of hdf5
         #module load papi
         module load mxml
-#        module load hdf5/1.8.11
-#       export SEQ_HDF5_DIR=$HDF5_DIR
-#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#       module unload hdf5/1.8.11
-#       module load hdf5-parallel/1.8.11
-#       export PAR_HDF5_DIR=$HDF5_DIR
-#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-#       module unload hdf5-parallel/1.8.11
-# start of Seq. NetCDF 4 
-#       module load netcdf/4.2.0
-#       export SEQ_NC_DIR=$NETCDF_DIR
-#       export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.2.0/pgi/119/lib -lnetcdf"
-#       module unload netcdf/4.2.0
-#end of Seq. NetCDF 4 
-#start of Parallel NetCDF 4
-        module load netcdf-hdf5parallel/4.2.0
-        export PAR_NC_DIR=$NETCDF_DIR
-        export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.2.0/pgi/119/lib -lnetcdf"
-        module unload netcdf
-#endof Parallel NetCDF 4 
         # use the two lines below for openmpi
-        export 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 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
@@ -409,6 +451,8 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
       module unload papi
       module unload pmi
       module load PrgEnv-$TARGET
+      export BUILD_WRITE=ON
+      export BUILD_FORTRAN=ON
       if [ "$TARGET" == "pgi" ]; then
           # NSSI needs -pgcpplibs flag 
           export LDFLAGS="-pgcpplibs"
@@ -418,6 +462,8 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
           unset LDFLAGS 
           export EXTRA_LIBS="/opt/gcc/4.8.1/snos/lib64/libstdc++.a"
           module swap gcc gcc/4.8.1
+      elif [ "$TARGET" == "intel" ]; then
+          export LDFLAGS=
       else
           unset LDFLAGS 
           unset EXTRA_LIBS 
@@ -955,6 +1001,28 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     export PAR_NC_DIR=/opt/nc4par
     export PAR_NC_LIBS="-L/opt/nc4par/lib -lnetcdf"
 
+elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
+
+    #######################
+    # ADIOS Virtual Box   #
+    #######################
+    echo "Configure on adiosVM VirtualBox ."
+    export BUILD_WRITE=ON
+    export BUILD_FORTRAN=ON
+    export skel_timing=ON
+    export CC=mpicc
+    export CXX=mpicxx
+    export FC=mpif90
+    export INSTALL_PREFIX="/opt/adios/1.7"
+    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
+    export SEQ_HDF5_DIR=/opt/hdf5-1.8.12
+    export SEQ_HDF5_LIBS="-L/opt/hdf5-1.8.12/lib -lhdf5_hl -lhdf5 -lm"
+    export PAR_HDF5_DIR=/opt/hdf5-1.8.12-parallel
+    export PAR_HDF5_LIBS="-L/opt/hdf5-1.8.12-parallel/lib -lhdf5_hl -lhdf5 -lm"
+    export SEQ_NC_DIR=/opt/netcdf-3.6.3
+    export SEQ_NC_LIBS="-L/opt/netcdf-3.6.3/lib -lnetcdf"
 else
     echo "Could not determine what machine is this."
     echo "This script is for configuring adios on the authors' machines."
diff --git a/config.h.cmake b/config.h.cmake
index 01436a6..d85c7ab 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -82,12 +82,18 @@
 /* Define to 1 if you have the `fdatasync' function. */
 #cmakedefine HAVE_FDATASYNC 1
 
+/* Define if you have FGR. */
+#cmakedefine HAVE_FGR 1
+
 /* Flexpath is enabled */
 #define HAVE_FLEXPATH ${HAVE_FLEXPATH}
 
 /* Define to 1 if you have the `gettimeofday' function. */
 #cmakedefine HAVE_GETTIMEOFDAY 1
 
+/* Define if you have GLIB. */
+#cmakedefine HAVE_GLIB 1
+
 /* Define if you have HDF5. */
 #cmakedefine HAVE_HDF5 1
 
diff --git a/config.h.in b/config.h.in
index 4a4585e..b503611 100644
--- a/config.h.in
+++ b/config.h.in
@@ -80,12 +80,18 @@
 /* Define to 1 if you have the `fdatasync' function. */
 #undef HAVE_FDATASYNC
 
+/* Define if you have FGR. */
+#undef HAVE_FGR
+
 /* Flexpath is enabled */
 #undef HAVE_FLEXPATH
 
 /* Define to 1 if you have the `gettimeofday' function. */
 #undef HAVE_GETTIMEOFDAY
 
+/* Define if you have GLIB. */
+#undef HAVE_GLIB
+
 /* Define if you have HDF5. */
 #undef HAVE_HDF5
 
@@ -113,6 +119,12 @@
 /* Define if you have LUSTRE. */
 #undef HAVE_LUSTRE
 
+/* Define to 1 if you have the <lustre/liblustreapi.h> header file. */
+#undef HAVE_LUSTRE_LIBLUSTREAPI_H
+
+/* Define to 1 if you have the <lustre/lustreapi.h> header file. */
+#undef HAVE_LUSTRE_LUSTREAPI_H
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -152,6 +164,12 @@
 /* Define if you have the Pablo. */
 #undef HAVE_PABLO
 
+/* Define if you have the PAMI. */
+#undef HAVE_PAMI
+
+/* Define to 1 if you have the <pami.h> header file. */
+#undef HAVE_PAMI_H
+
 /* Define if you have PHDF5. */
 #undef HAVE_PHDF5
 
diff --git a/config/ac_cray_pmi.m4 b/config/ac_cray_pmi.m4
index fdcf179..a9f4c77 100644
--- a/config/ac_cray_pmi.m4
+++ b/config/ac_cray_pmi.m4
@@ -9,8 +9,6 @@ AC_DEFUN([AC_CRAY_PMI],
 
 ac_cray_pmi_lib_ok=no
 
-AC_MSG_NOTICE([=== checking for CRAY PMI ===])
-
 AM_CONDITIONAL(HAVE_CRAY_PMI,true)
 
 dnl Automatic checking for CRAY_PMI is disabled now.
@@ -42,6 +40,8 @@ if test "x$with_cray_pmi" == "xno"; then
 
 else
 
+    AC_MSG_NOTICE([=== checking for CRAY PMI ===])
+
     dnl If we know CRAY_PMI_DIR, then we can know CRAY_PMI_INCDIR.
     dnl We don't overwrite CRAY_PMI_INCDIR.
     if test -z "${CRAY_PMI_INCDIR}"; then
diff --git a/config/ac_cray_ugni.m4 b/config/ac_cray_ugni.m4
index 3064c79..b8292fe 100644
--- a/config/ac_cray_ugni.m4
+++ b/config/ac_cray_ugni.m4
@@ -9,8 +9,6 @@ AC_DEFUN([AC_CRAY_UGNI],
 
 ac_cray_ugni_lib_ok=no
 
-AC_MSG_NOTICE([=== checking for CRAY UGNI ===])
-
 AM_CONDITIONAL(HAVE_CRAY_UGNI,true)
 
 dnl Automatic checking for CRAY_UGNI is disabled now.
@@ -42,6 +40,8 @@ if test "x$with_cray_ugni" == "xno"; then
 
 else
 
+    AC_MSG_NOTICE([=== checking for CRAY UGNI ===])
+
     dnl If we know CRAY_UGNI_DIR, then we can know CRAY_UGNI_INCDIR.
     dnl We don't overwrite CRAY_UGNI_INCDIR.
     if test -z "${CRAY_UGNI_INCDIR}"; then
diff --git a/config/ac_dataspaces.m4 b/config/ac_dataspaces.m4
index 48351b0..0805db4 100644
--- a/config/ac_dataspaces.m4
+++ b/config/ac_dataspaces.m4
@@ -108,22 +108,27 @@ else
         # Check for the DataSpaces library and headers
         if test "x${ac_portals_lib_ok}" == "xyes"; then 
             AC_TRY_COMPILE([#include "dataspaces.h"],
-                    [int err; err = dspaces_init(1,1);],
+                    [int err; err = dspaces_init(1,1,0,"");],
                     [DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
                     [AM_CONDITIONAL(HAVE_DATASPACES,false)])
         elif test "x${ac_infiniband_lib_ok}" == "xyes"; then 
             AC_TRY_COMPILE([#include "dataspaces.h"],
-                    [int err; err = dspaces_init(1,1);],
+                    [int err; err = dspaces_init(1,1,0,"");],
                     [DATASPACES_LIBS="-ldspaces -ldscommon -ldart -lrdmacm"],
                     [AM_CONDITIONAL(HAVE_DATASPACES,false)])
         elif test -z "${HAVE_CRAY_PMI_TRUE}" -a -z "${HAVE_CRAY_UGNI_TRUE}"; then 
             AC_TRY_COMPILE([#include "dataspaces.h"],
-                    [int err; err = dspaces_init(1,1);],
+                    [int err; err = dspaces_init(1,1,0,"");],
                     [DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
                     [AM_CONDITIONAL(HAVE_DATASPACES,false)])
 	elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
             AC_TRY_COMPILE([#include "dataspaces.h"],
-                    [int err; err = dspaces_init(1,1);],
+                    [int err; err = dspaces_init(1,1,0,"");],
+                    [DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
+                    [AM_CONDITIONAL(HAVE_DATASPACES,false)])
+	elif test "x${ac_pami_lib_ok}" == "xyes"; then
+            AC_TRY_COMPILE([#include "dataspaces.h"],
+                    [int err; err = dspaces_init(1,1,0,"");],
                     [DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
                     [AM_CONDITIONAL(HAVE_DATASPACES,false)])
         else
diff --git a/config/ac_dimes.m4 b/config/ac_dimes.m4
index 57a940c..6b4f1d8 100644
--- a/config/ac_dimes.m4
+++ b/config/ac_dimes.m4
@@ -107,12 +107,17 @@ else
         # Check for the DataSpaces/DIMES library and headers
         if test -z "${HAVE_CRAY_PMI_TRUE}" -a -z "${HAVE_CRAY_UGNI_TRUE}"; then 
             AC_TRY_LINK([#include "dimes_interface.h"],
-                    [int err; dimes_set_storage_type(1);],
+                    [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_set_storage_type(1);],
+                    [int err; dimes_put_sync_all();],
+                    [DIMES_LIBS="-ldspaces -ldscommon -ldart"],
+                    [AM_CONDITIONAL(HAVE_DIMES,false)])
+	elif test "x${ac_pami_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)])
         else
diff --git a/config/ac_fgr.m4 b/config/ac_fgr.m4
new file mode 100644
index 0000000..791546b
--- /dev/null
+++ b/config/ac_fgr.m4
@@ -0,0 +1,67 @@
+#
+#
+# AC_FGR
+#
+#
+#
+dnl @synopsis AC_FGR
+dnl
+dnl This macro test if fgr (for Titan only) is to be used. 
+dnl Use in C code:
+dnl     #ifdef FGR
+dnl     #include "fgr.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Qing Liu, ORNL
+dnl
+AC_DEFUN([AC_FGR],[
+
+AC_MSG_NOTICE([=== checking for FGR ===])
+
+AM_CONDITIONAL(HAVE_FGR,true)
+
+AC_ARG_WITH(fgr,
+        [  --with-fgr=DIR      Location of FGR library],
+        [FGR_LDFLAGS="-L$withval/lib";
+         FGR_LIBS="-lfgr";
+         FGR_CPPFLAGS="-I$withval/include";],
+        [with_fgr=no])
+
+if test "x$with_fgr" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_FGR,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lfgr"
+    LDFLAGS="$LDFLAGS $FDR_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $FDR_CPPFLAGS"
+    
+    # Check for the FGR 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        [LUSTRE_LIBS="-llustreapi"],
+    dnl        [AM_CONDITIONAL(HAVE_LUSTRE,false)])
+    
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+    
+    AC_SUBST(FGR_LIBS)
+    AC_SUBST(FGR_LDFLAGS)
+    AC_SUBST(FGR_CPPFLAGS)
+    
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_FGR_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_FGR,1,[Define if you have FGR.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_FGR
diff --git a/config/ac_glib.m4 b/config/ac_glib.m4
new file mode 100644
index 0000000..268522f
--- /dev/null
+++ b/config/ac_glib.m4
@@ -0,0 +1,67 @@
+#
+#
+# AC_GLIB
+#
+#
+#
+dnl @synopsis AC_GLIB
+dnl
+dnl This macro test if glib (for Titan only) is to be used. 
+dnl Use in C code:
+dnl     #ifdef GLIB
+dnl     #include "glib.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Qing Liu, ORNL
+dnl
+AC_DEFUN([AC_GLIB],[
+
+AC_MSG_NOTICE([=== checking for GLIB ===])
+
+AM_CONDITIONAL(HAVE_GLIB,true)
+
+AC_ARG_WITH(glib,
+        [  --with-glib=DIR      Location of GLIB],
+        [GLIB_LDFLAGS="-L$withval/lib";
+         GLIB_LIBS="-lglib-2.0";
+         GLIB_CPPFLAGS="-I$withval/include/glib-2.0 -I$withval/lib/glib-2.0/include";],
+        [with_glib=no])
+
+if test "x$with_glib" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_GLIB,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lglib-2.0"
+    LDFLAGS="$LDFLAGS $GLIB_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $GLIB_CPPFLAGS"
+    
+    # Check for the GLIB library and headers
+    AC_TRY_COMPILE([#include "glib.h"],
+                   [GHashTable * ght],
+                   [GLIB_LIBS="-lglib-2.0"],
+                   [AM_CONDITIONAL(HAVE_GLIB,false)])
+    
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+    
+    AC_SUBST(GLIB_LIBS)
+    AC_SUBST(GLIB_LDFLAGS)
+    AC_SUBST(GLIB_CPPFLAGS)
+    
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_GLIB_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_GLIB,1,[Define if you have GLIB.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_GLIB
diff --git a/config/ac_infiniband.m4 b/config/ac_infiniband.m4
index 672d2c2..aec79a5 100644
--- a/config/ac_infiniband.m4
+++ b/config/ac_infiniband.m4
@@ -36,15 +36,15 @@ INFINIBAND_LIBS=""
 
 AC_ARG_WITH(infiniband,
         [  --with-infiniband=DIR      Location of Infiniband],
-        [ ac_with_infiniband=yes;])
+        [ INFINIBAND_DIR=$withval;], [with_infiniband=yes])
 
 
 
-if test x"$withval" = xno; then
+if test x"$with_infiniband" = xno; then
 
         ac_with_infiniband=no;
 
-elif test x"$withval" = xyes -o x"$withval" = x; then
+elif test x"$with_infiniband" = xyes -o x"$with_infiniband" = x; then
 
         INFINIBAND_CPPFLAGS="";
         INFINIBAND_LDFLAGS="";
@@ -64,6 +64,8 @@ AM_CONDITIONAL(HAVE_INFINIBAND,test x$ac_with_infiniband = xyes)
 dnl Check for command-line disable
 if test x"$ac_with_infiniband" = xyes; then
 
+        AC_MSG_NOTICE([=== checking for INFINIBAND ===])
+
         dnl Look for Infiniband header files
         save_CPPFLAGS=$CPPFLAGS;
         save_LDFLAGS=$LDFLAGS;
diff --git a/config/ac_lustre.m4 b/config/ac_lustre.m4
index f472dc2..f72741b 100644
--- a/config/ac_lustre.m4
+++ b/config/ac_lustre.m4
@@ -6,14 +6,10 @@
 #
 dnl @synopsis AC_LUSTRE
 dnl
-dnl This macro test if dmalloc is to be used. 
-dnl Use in C code:
-dnl     #ifdef DMALLOC
-dnl     #include "dmalloc.h"
-dnl     #endif
-dnl
-dnl @version 1.0
+dnl This macro test if lustreapi.a can be used
+dnl @version 2.0
 dnl @author Qing Liu, UT
+dnl @author Norbert Podhorszki, ORNL
 dnl
 AC_DEFUN([AC_LUSTRE],[
 
@@ -21,37 +17,113 @@ AC_MSG_NOTICE([=== checking for Lustre ===])
 
 AM_CONDITIONAL(HAVE_LUSTRE,true)
 
+dnl This is optional, if not given, do nothing
 AC_ARG_WITH(lustre,
-        [  --with-lustre=DIR      Location of lustre library],
-        [LUSTRE_LDFLAGS="-L$withval/lib";
-         LUSTRE_LIBS="-llustreapi";
-         LUSTRE_CPPFLAGS="-I$withval/include";],
-        [with_lustre=no])
-
-if test "x$with_lustre" == "xno"; then
+        [  --with-lustre[=DIR]      Location of lustre library],
+        [:],[with_lustre=no])
 
-   AM_CONDITIONAL(HAVE_LUSTRE,false)
+if test "x${with_lustre}" == "xno"; then
+       AM_CONDITIONAL(HAVE_LUSTRE,false)
+fi
 
-else
+if test -z "${HAVE_LUSTRE_TRUE}"; then
 
+    dnl AC_MSG_NOTICE([   debug: with_lustre="$with_lustre"])
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    LIBS="$LIBS -llustreapi"
+    
+    if test "x$with_lustre" == "xyes"; then
+        dnl No path given
+        LUSTRE_CPPFLAGS=""
+        LUSTRE_LIBS="-llustreapi"
+        LUSTRE_LDFLAGS=""
+    else
+        dnl Path given, first try path/lib64
+        LUSTRE_CPPFLAGS="-I${with_lustre}/include"
+        LUSTRE_LIBS="-llustreapi"
+        LUSTRE_LDFLAGS="-L${with_lustre}/lib64"
+    fi
+
+    LIBS="$LIBS $LUSTRE_LIBS"
     LDFLAGS="$LDFLAGS $LUSTRE_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $LUSTRE_CPPFLAGS"
     
-    dnl if test -z "${HAVE_DMALLOC_TRUE}"; then
-    dnl        AC_CHECK_HEADERS(dmalloc.h,
-    dnl                ,
-    dnl                [AM_CONDITIONAL(HAVE_DMALLOC,false)])
-    dnl fi
+    oldheader=no
+    AC_CHECK_HEADERS([lustre/lustreapi.h],
+                    ,
+                    [AM_CONDITIONAL(HAVE_LUSTRE,false)])
+
+    dnl if lustreapi.h is missing, we may still find 1.x lustre's liblustreapi.h
+    if test -z "${HAVE_LUSTRE_FALSE}"; then
+        AC_CHECK_HEADERS([lustre/liblustreapi.h],
+                        [AM_CONDITIONAL(HAVE_LUSTRE,true)
+                         oldheader=yes],
+                        [AM_CONDITIONAL(HAVE_LUSTRE,false)])
+    fi
     
-    # Check for the lustre 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        [LUSTRE_LIBS="-llustreapi"],
-    dnl        [AM_CONDITIONAL(HAVE_LUSTRE,false)])
+    if test -z "${HAVE_LUSTRE_TRUE}"; then
+        dnl Check for the lustre library
+        AC_MSG_CHECKING([if lustre code can be linked with $LUSTRE_LDFLAGS])
+        if test "${oldheader}" == "no" ; then
+            AC_TRY_LINK(
+                [#include <stdlib.h>
+                 #include "lustre/lustreapi.h"
+                 int fd, num_ost;
+                 struct obd_uuid uuids[1024];],
+                [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+                [AC_MSG_RESULT(yes)],
+                [AM_CONDITIONAL(HAVE_LUSTRE,false)
+                 AC_MSG_RESULT(no)
+                ])
+        else
+            AC_TRY_LINK(
+                [#include <stdlib.h>
+                 #include "lustre/liblustreapi.h"
+                 int fd, num_ost;
+                 struct obd_uuid uuids[1024];],
+                [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+                [AC_MSG_RESULT(yes)],
+                [AM_CONDITIONAL(HAVE_LUSTRE,false)
+                 AC_MSG_RESULT(no)
+                ])
+        fi
+    fi
+
+    dnl If Linking above failed, one reason might be that we looked in lib64/ instead of lib/
+    if test -z "${HAVE_LUSTRE_FALSE}"; then
+        if test "x$with_lustre" != "xyes"; then
+            LUSTRE_LDFLAGS="-L${with_lustre}/lib"
+            LDFLAGS="$save_LDFLAGS $LUSTRE_LDFLAGS"
+            dnl Check for the lustre library
+            AC_MSG_CHECKING([if lustre code can be linked with $LUSTRE_LDFLAGS])
+            if test "${oldheader}" == "no" ; then
+                AC_TRY_LINK(
+                    [#include <stdlib.h>
+                     #include "lustre/lustreapi.h"
+                     int fd, num_ost;
+                     struct obd_uuid uuids[1024];],
+                    [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+                    [AM_CONDITIONAL(HAVE_LUSTRE,true)
+                     AC_MSG_RESULT(yes)],
+                    [AM_CONDITIONAL(HAVE_LUSTRE,false)
+                    AC_MSG_RESULT(no)
+                    ])
+            else
+                AC_TRY_LINK(
+                    [#include <stdlib.h>
+                     #include "lustre/liblustreapi.h"
+                     int fd, num_ost;
+                     struct obd_uuid uuids[1024];],
+                    [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+                    [AM_CONDITIONAL(HAVE_LUSTRE,true)
+                     AC_MSG_RESULT(yes)],
+                    [AM_CONDITIONAL(HAVE_LUSTRE,false)
+                    AC_MSG_RESULT(no)
+                    ])
+            fi
+        fi
+    fi
     
     LIBS="$save_LIBS"
     LDFLAGS="$save_LDFLAGS"
diff --git a/config/ac_pami.m4 b/config/ac_pami.m4
new file mode 100644
index 0000000..caa0765
--- /dev/null
+++ b/config/ac_pami.m4
@@ -0,0 +1,71 @@
+dnl ######################################################################
+dnl
+dnl Finds IBM_PAMI 
+dnl
+dnl ######################################################################
+
+AC_DEFUN([AC_PAMI],[
+ac_pami_lib_ok=no
+
+PAMI_CFLAGS=""
+PAMI_CPPFLAGS=""
+PAMI_LDFLAGS=""
+PAMI_LIBS=""
+
+AC_MSG_NOTICE([=== checking for IBM PAMI ===])
+
+AM_CONDITIONAL(HAVE_PAMI,true)
+
+AC_ARG_WITH(pami,
+            [  --with-pami=DIR      Location of IBM PAMI],
+    	    [ PAMI_CPPFLAGS="-I/bgsys/drivers/ppcfloor/comm/sys/include";
+              PAMI_LDFLAGS="";
+	      PAMI_LIBS="-lpthread";])
+
+save_CPPFLAGS="$CPPFLAGS"
+save_LDFLAGS="$LDFLAGS"
+save_LIBS="$LIBS"
+CPPFLAGS="$CPPFLAGS $PAMI_CPPFLAGS"
+LDFLAGS="$LDFLAGS $PAMI_LDFLAGS"
+LIBS="$LIBS $PAMI_LIBS"
+
+dnl Check for the header file.
+if test -z "${HAVE_PAMI_TRUE}"; then
+	  AC_CHECK_HEADERS(pami.h,
+		  ,
+		  [AM_CONDITIONAL(HAVE_PAMI,false)])
+fi
+
+dnl Check for the library.
+if test -z "${HAVE_PAMI_TRUE}"; then
+	AC_MSG_CHECKING([if pami code can be linked])
+	AC_TRY_LINK([#include "pami.h"],
+		[pami_context_t context;
+		 PAMI_Context_lock(context);
+		 PAMI_Context_unlock(context);
+		],
+		[PAMI_LIBS="-lpthread"
+		 AC_MSG_RESULT(yes)],
+		[AM_CONDITIONAL(HAVE_PAMI, false)
+		 AC_MSG_RESULT(no)])
+fi
+
+LIBS="$save_LIBS"
+LDFLAGS="$save_LDFLAGS"
+CPPFLAGS="$save_CPPFLAGS"
+
+AC_SUBST(PAMI_CFLAGS)
+AC_SUBST(PAMI_CPPFLAGS)
+AC_SUBST(PAMI_LDFLAGS)
+AC_SUBST(PAMI_LIBS)
+
+dnl Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test -z "${HAVE_PAMI_TRUE}"; then
+	ac_pami_lib_ok=yes
+ 	ifelse([$1],,[AC_DEFINE(HAVE_PAMI,1,[Define if you have the PAMI.])],[$1])
+	:
+else
+	$2
+	:
+fi
+])dnl AC_PAMI
diff --git a/config/ac_portals.m4 b/config/ac_portals.m4
index 77e470e..24c34a0 100644
--- a/config/ac_portals.m4
+++ b/config/ac_portals.m4
@@ -41,9 +41,9 @@ dnl PtlFini
 
 AC_ARG_WITH(portals,
         [  --with-portals=DIR      Location of Portals (yes/no/path_to_portals)],
-        [ ac_with_portals=yes; ])
+        [ ac_with_portals=$withval; ], [ac_with_portals=no])
 
-if test x"$withval" = xno; then
+if test x"$ac_with_portals" = xno; then
 
         AM_CONDITIONAL(HAVE_PORTALS,false)
         ac_with_portals=no;
diff --git a/configure b/configure
index 7f5c2c2..058eb8a 100755
--- a/configure
+++ b/configure
@@ -868,6 +868,16 @@ DT_CPPFLAGS
 DT_LIBS
 PATHPROG
 CSH
+GLIB_CPPFLAGS
+GLIB_LDFLAGS
+GLIB_LIBS
+HAVE_GLIB_FALSE
+HAVE_GLIB_TRUE
+FGR_CPPFLAGS
+FGR_LDFLAGS
+FGR_LIBS
+HAVE_FGR_FALSE
+HAVE_FGR_TRUE
 LUSTRE_CPPFLAGS
 LUSTRE_LDFLAGS
 LUSTRE_LIBS
@@ -955,6 +965,12 @@ DCMF_CPPFLAGS
 DCMF_CFLAGS
 HAVE_DCMF_FALSE
 HAVE_DCMF_TRUE
+PAMI_LIBS
+PAMI_LDFLAGS
+PAMI_CPPFLAGS
+PAMI_CFLAGS
+HAVE_PAMI_FALSE
+HAVE_PAMI_TRUE
 MXML_CPPFLAGS
 MXML_LDFLAGS
 MXML_LIBS
@@ -1107,6 +1123,7 @@ enable_libtool_lock
 enable_write
 with_mxml
 with_mxml_libs
+with_pami
 with_dcmf
 with_infiniband
 with_portals
@@ -1144,6 +1161,8 @@ with_dimes_incdir
 with_dimes_libdir
 with_dmalloc
 with_lustre
+with_fgr
+with_glib
 with_datatap
 with_installed
 with_local
@@ -1840,6 +1859,7 @@ Optional Packages:
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-mxml=DIR      Location of Mini-XML library
   --with-mxml-libs=<linker flags for Mini-XML library>
+  --with-pami=DIR      Location of IBM PAMI
   --with-dcmf=DIR      Location of IBM DCMF
   --with-infiniband=DIR      Location of Infiniband
   --with-portals=DIR      Location of Portals (yes/no/path_to_portals)
@@ -1879,6 +1899,8 @@ Optional Packages:
   --with-dimes-libdir=<location of dimes library>
   --with-dmalloc=DIR      Location of dmalloc library
   --with-lustre=DIR      Location of lustre library
+  --with-fgr=DIR      Location of FGR library
+  --with-glib=DIR      Location of GLIB
   --with-datatap=DIR 	Location of DataTap
   --with-installed        Don't use local copies of CERCS packages
   --with-local            Use only local copies of CERCS packages
@@ -2844,7 +2866,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=adios
- VERSION=1.6.0
+ VERSION=1.7.0
 
 
 cat >>confdefs.h <<_ACEOF
@@ -8813,13 +8835,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:8816: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:8838: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8819: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:8841: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8822: output\"" >&5)
+  (eval echo "\"\$as_me:8844: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -10024,7 +10046,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 10027 "configure"' > conftest.$ac_ext
+  echo '#line 10049 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -12701,11 +12723,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:12704: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12726: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12708: \$? = $ac_status" >&5
+   echo "$as_me:12730: \$? = $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.
@@ -13040,11 +13062,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:13043: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13065: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13047: \$? = $ac_status" >&5
+   echo "$as_me:13069: \$? = $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.
@@ -13145,11 +13167,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:13148: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13170: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13152: \$? = $ac_status" >&5
+   echo "$as_me:13174: \$? = $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
@@ -13200,11 +13222,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:13203: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13225: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13207: \$? = $ac_status" >&5
+   echo "$as_me:13229: \$? = $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
@@ -16083,7 +16105,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16086 "configure"
+#line 16108 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16179,7 +16201,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16182 "configure"
+#line 16204 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18215,11 +18237,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:18218: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18240: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:18222: \$? = $ac_status" >&5
+   echo "$as_me:18244: \$? = $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.
@@ -18314,11 +18336,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:18317: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18339: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18321: \$? = $ac_status" >&5
+   echo "$as_me:18343: \$? = $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
@@ -18366,11 +18388,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:18369: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18391: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18373: \$? = $ac_status" >&5
+   echo "$as_me:18395: \$? = $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
@@ -19918,11 +19940,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:19921: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19943: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:19925: \$? = $ac_status" >&5
+   echo "$as_me:19947: \$? = $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.
@@ -20017,11 +20039,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:20020: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20042: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:20024: \$? = $ac_status" >&5
+   echo "$as_me:20046: \$? = $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
@@ -20069,11 +20091,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:20072: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20094: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:20076: \$? = $ac_status" >&5
+   echo "$as_me:20098: \$? = $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
@@ -23211,6 +23233,296 @@ $as_echo "$as_me: error: The ADIOS libraries for writing cannot be built without
     fi
 
 
+ac_pami_lib_ok=no
+
+PAMI_CFLAGS=""
+PAMI_CPPFLAGS=""
+PAMI_LDFLAGS=""
+PAMI_LIBS=""
+
+{ $as_echo "$as_me:$LINENO: === checking for IBM PAMI ===" >&5
+$as_echo "$as_me: === checking for IBM PAMI ===" >&6;}
+
+ if true; then
+  HAVE_PAMI_TRUE=
+  HAVE_PAMI_FALSE='#'
+else
+  HAVE_PAMI_TRUE='#'
+  HAVE_PAMI_FALSE=
+fi
+
+
+
+# Check whether --with-pami was given.
+if test "${with_pami+set}" = set; then
+  withval=$with_pami;  PAMI_CPPFLAGS="-I/bgsys/drivers/ppcfloor/comm/sys/include";
+              PAMI_LDFLAGS="";
+	      PAMI_LIBS="-lpthread";
+fi
+
+
+save_CPPFLAGS="$CPPFLAGS"
+save_LDFLAGS="$LDFLAGS"
+save_LIBS="$LIBS"
+CPPFLAGS="$CPPFLAGS $PAMI_CPPFLAGS"
+LDFLAGS="$LDFLAGS $PAMI_LDFLAGS"
+LIBS="$LIBS $PAMI_LIBS"
+
+if test -z "${HAVE_PAMI_TRUE}"; then
+
+for ac_header in pami.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_PAMI_TRUE=
+  HAVE_PAMI_FALSE='#'
+else
+  HAVE_PAMI_TRUE='#'
+  HAVE_PAMI_FALSE=
+fi
+
+fi
+
+done
+
+fi
+
+if test -z "${HAVE_PAMI_TRUE}"; then
+	{ $as_echo "$as_me:$LINENO: checking if pami code can be linked" >&5
+$as_echo_n "checking if pami code can be linked... " >&6; }
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include "pami.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 ()
+{
+pami_context_t context;
+		 PAMI_Context_lock(context);
+		 PAMI_Context_unlock(context);
+
+  ;
+  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
+  PAMI_LIBS="-lpthread"
+		 { $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_PAMI_TRUE=
+  HAVE_PAMI_FALSE='#'
+else
+  HAVE_PAMI_TRUE='#'
+  HAVE_PAMI_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
+
+LIBS="$save_LIBS"
+LDFLAGS="$save_LDFLAGS"
+CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+
+if test -z "${HAVE_PAMI_TRUE}"; then
+	ac_pami_lib_ok=yes
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PAMI 1
+_ACEOF
+
+	:
+else
+
+	:
+fi
+
+
 ac_dcmf_lib_ok=no
 
 DCMF_CFLAGS=""
@@ -23522,17 +23834,19 @@ INFINIBAND_LIBS=""
 
 # Check whether --with-infiniband was given.
 if test "${with_infiniband+set}" = set; then
-  withval=$with_infiniband;  ac_with_infiniband=yes;
+  withval=$with_infiniband;  INFINIBAND_DIR=$withval;
+else
+  with_infiniband=yes
 fi
 
 
 
 
-if test x"$withval" = xno; then
+if test x"$with_infiniband" = xno; then
 
         ac_with_infiniband=no;
 
-elif test x"$withval" = xyes -o x"$withval" = x; then
+elif test x"$with_infiniband" = xyes -o x"$with_infiniband" = x; then
 
         INFINIBAND_CPPFLAGS="";
         INFINIBAND_LDFLAGS="";
@@ -23558,6 +23872,9 @@ fi
 
 if test x"$ac_with_infiniband" = xyes; then
 
+        { $as_echo "$as_me:$LINENO: === checking for INFINIBAND ===" >&5
+$as_echo "$as_me: === checking for INFINIBAND ===" >&6;}
+
                 save_CPPFLAGS=$CPPFLAGS;
         save_LDFLAGS=$LDFLAGS;
         CPPFLAGS="$CPPFLAGS $INFINIBAND_CPPFLAGS"
@@ -23914,11 +24231,13 @@ PORTALS_LIBS=""
 
 # Check whether --with-portals was given.
 if test "${with_portals+set}" = set; then
-  withval=$with_portals;  ac_with_portals=yes;
+  withval=$with_portals;  ac_with_portals=$withval;
+else
+  ac_with_portals=no
 fi
 
 
-if test x"$withval" = xno; then
+if test x"$ac_with_portals" = xno; then
 
          if false; then
   HAVE_PORTALS_TRUE=
@@ -25267,9 +25586,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_cray_pmi_lib_ok=no
 
-{ $as_echo "$as_me:$LINENO: === checking for CRAY PMI ===" >&5
-$as_echo "$as_me: === checking for CRAY PMI ===" >&6;}
-
  if true; then
   HAVE_CRAY_PMI_TRUE=
   HAVE_CRAY_PMI_FALSE='#'
@@ -25326,6 +25642,9 @@ fi
 
 else
 
+    { $as_echo "$as_me:$LINENO: === checking for CRAY PMI ===" >&5
+$as_echo "$as_me: === checking for CRAY PMI ===" >&6;}
+
             if test -z "${CRAY_PMI_INCDIR}"; then
         if test -n "${CRAY_PMI_DIR}"; then
             CRAY_PMI_INCDIR="${CRAY_PMI_DIR}/include";
@@ -25495,9 +25814,6 @@ fi
 
 ac_cray_ugni_lib_ok=no
 
-{ $as_echo "$as_me:$LINENO: === checking for CRAY UGNI ===" >&5
-$as_echo "$as_me: === checking for CRAY UGNI ===" >&6;}
-
  if true; then
   HAVE_CRAY_UGNI_TRUE=
   HAVE_CRAY_UGNI_FALSE='#'
@@ -25554,6 +25870,9 @@ fi
 
 else
 
+    { $as_echo "$as_me:$LINENO: === checking for CRAY UGNI ===" >&5
+$as_echo "$as_me: === checking for CRAY UGNI ===" >&6;}
+
             if test -z "${CRAY_UGNI_INCDIR}"; then
         if test -n "${CRAY_UGNI_DIR}"; then
             CRAY_UGNI_INCDIR="${CRAY_UGNI_DIR}/include";
@@ -28178,7 +28497,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; err = dspaces_init(1,1);
+int err; err = dspaces_init(1,1,0,"");
   ;
   return 0;
 }
@@ -28236,7 +28555,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; err = dspaces_init(1,1);
+int err; err = dspaces_init(1,1,0,"");
   ;
   return 0;
 }
@@ -28294,7 +28613,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; err = dspaces_init(1,1);
+int err; err = dspaces_init(1,1,0,"");
   ;
   return 0;
 }
@@ -28352,7 +28671,65 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; err = dspaces_init(1,1);
+int err; err = dspaces_init(1,1,0,"");
+  ;
+  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
+  DATASPACES_LIBS="-ldspaces -ldscommon -ldart"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_DATASPACES_TRUE=
+  HAVE_DATASPACES_FALSE='#'
+else
+  HAVE_DATASPACES_TRUE='#'
+  HAVE_DATASPACES_FALSE=
+fi
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	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 "dataspaces.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 ()
+{
+int err; err = dspaces_init(1,1,0,"");
   ;
   return 0;
 }
@@ -28711,7 +29088,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; dimes_set_storage_type(1);
+int err; dimes_put_sync_all();
   ;
   return 0;
 }
@@ -28774,7 +29151,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-int err; dimes_set_storage_type(1);
+int err; dimes_put_sync_all();
   ;
   return 0;
 }
@@ -28813,248 +29190,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
@@ -29066,7 +29209,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;
 }
@@ -29095,16 +29530,727 @@ else
 sed 's/^/| /' conftest.$ac_ext >&5
 
 	 if false; then
-  HAVE_DMALLOC_TRUE=
-  HAVE_DMALLOC_FALSE='#'
+  HAVE_DMALLOC_TRUE=
+  HAVE_DMALLOC_FALSE='#'
+else
+  HAVE_DMALLOC_TRUE='#'
+  HAVE_DMALLOC_FALSE=
+fi
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_DMALLOC_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DMALLOC 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for Lustre ===" >&5
+$as_echo "$as_me: === checking for Lustre ===" >&6;}
+
+ if true; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+
+
+# Check whether --with-lustre was given.
+if test "${with_lustre+set}" = set; then
+  withval=$with_lustre; :
+else
+  with_lustre=no
+fi
+
+
+if test "x${with_lustre}" == "xno"; then
+        if false; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+fi
+
+if test -z "${HAVE_LUSTRE_TRUE}"; then
+
+        save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+
+    if test "x$with_lustre" == "xyes"; then
+                LUSTRE_CPPFLAGS=""
+        LUSTRE_LIBS="-llustreapi"
+        LUSTRE_LDFLAGS=""
+    else
+                LUSTRE_CPPFLAGS="-I${with_lustre}/include"
+        LUSTRE_LIBS="-llustreapi"
+        LUSTRE_LDFLAGS="-L${with_lustre}/lib64"
+    fi
+
+    LIBS="$LIBS $LUSTRE_LIBS"
+    LDFLAGS="$LDFLAGS $LUSTRE_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $LUSTRE_CPPFLAGS"
+
+    oldheader=no
+
+for ac_header in lustre/lustreapi.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_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+fi
+
+done
+
+
+        if test -z "${HAVE_LUSTRE_FALSE}"; then
+
+for ac_header in lustre/liblustreapi.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
+  if true; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+                         oldheader=yes
+else
+   if false; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    if test -z "${HAVE_LUSTRE_TRUE}"; then
+                { $as_echo "$as_me:$LINENO: checking if lustre code can be linked with $LUSTRE_LDFLAGS" >&5
+$as_echo_n "checking if lustre code can be linked with $LUSTRE_LDFLAGS... " >&6; }
+        if test "${oldheader}" == "no" ; then
+            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 "lustre/lustreapi.h"
+                 int fd, num_ost;
+                 struct obd_uuid uuids[1024];
+#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 ()
+{
+llapi_lov_get_uuids(fd, uuids, &num_ost);
+  ;
+  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_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
 else
-  HAVE_DMALLOC_TRUE='#'
-  HAVE_DMALLOC_FALSE=
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
 fi
 
+                 { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        else
+            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 "lustre/liblustreapi.h"
+                 int fd, num_ost;
+                 struct obd_uuid uuids[1024];
+#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 ()
+{
+llapi_lov_get_uuids(fd, uuids, &num_ost);
+  ;
+  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_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_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
+
+        if test -z "${HAVE_LUSTRE_FALSE}"; then
+        if test "x$with_lustre" != "xyes"; then
+            LUSTRE_LDFLAGS="-L${with_lustre}/lib"
+            LDFLAGS="$save_LDFLAGS $LUSTRE_LDFLAGS"
+                        { $as_echo "$as_me:$LINENO: checking if lustre code can be linked with $LUSTRE_LDFLAGS" >&5
+$as_echo_n "checking if lustre code can be linked with $LUSTRE_LDFLAGS... " >&6; }
+            if test "${oldheader}" == "no" ; then
+                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 "lustre/lustreapi.h"
+                     int fd, num_ost;
+                     struct obd_uuid uuids[1024];
+#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 ()
+{
+llapi_lov_get_uuids(fd, uuids, &num_ost);
+  ;
+  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
+   if true; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+                     { $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_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_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
+            else
+                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 "lustre/liblustreapi.h"
+                     int fd, num_ost;
+                     struct obd_uuid uuids[1024];
+#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 ()
+{
+llapi_lov_get_uuids(fd, uuids, &num_ost);
+  ;
+  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
+   if true; then
+  HAVE_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_FALSE=
+fi
+
+                     { $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_LUSTRE_TRUE=
+  HAVE_LUSTRE_FALSE='#'
+else
+  HAVE_LUSTRE_TRUE='#'
+  HAVE_LUSTRE_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"
@@ -29115,10 +30261,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
     # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-    if test -z "${HAVE_DMALLOC_TRUE}"; then
+    if test -z "${HAVE_LUSTRE_TRUE}"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_DMALLOC 1
+#define HAVE_LUSTRE 1
 _ACEOF
 
             :
@@ -29130,37 +30276,37 @@ fi
 
 
 
-{ $as_echo "$as_me:$LINENO: === checking for Lustre ===" >&5
-$as_echo "$as_me: === checking for Lustre ===" >&6;}
+{ $as_echo "$as_me:$LINENO: === checking for FGR ===" >&5
+$as_echo "$as_me: === checking for FGR ===" >&6;}
 
  if true; then
-  HAVE_LUSTRE_TRUE=
-  HAVE_LUSTRE_FALSE='#'
+  HAVE_FGR_TRUE=
+  HAVE_FGR_FALSE='#'
 else
-  HAVE_LUSTRE_TRUE='#'
-  HAVE_LUSTRE_FALSE=
+  HAVE_FGR_TRUE='#'
+  HAVE_FGR_FALSE=
 fi
 
 
 
-# Check whether --with-lustre was given.
-if test "${with_lustre+set}" = set; then
-  withval=$with_lustre; LUSTRE_LDFLAGS="-L$withval/lib";
-         LUSTRE_LIBS="-llustreapi";
-         LUSTRE_CPPFLAGS="-I$withval/include";
+# Check whether --with-fgr was given.
+if test "${with_fgr+set}" = set; then
+  withval=$with_fgr; FGR_LDFLAGS="-L$withval/lib";
+         FGR_LIBS="-lfgr";
+         FGR_CPPFLAGS="-I$withval/include";
 else
-  with_lustre=no
+  with_fgr=no
 fi
 
 
-if test "x$with_lustre" == "xno"; then
+if test "x$with_fgr" == "xno"; then
 
     if false; then
-  HAVE_LUSTRE_TRUE=
-  HAVE_LUSTRE_FALSE='#'
+  HAVE_FGR_TRUE=
+  HAVE_FGR_FALSE='#'
 else
-  HAVE_LUSTRE_TRUE='#'
-  HAVE_LUSTRE_FALSE=
+  HAVE_FGR_TRUE='#'
+  HAVE_FGR_FALSE=
 fi
 
 
@@ -29169,12 +30315,137 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    LIBS="$LIBS -llustreapi"
-    LDFLAGS="$LDFLAGS $LUSTRE_LDFLAGS"
-    CPPFLAGS="$CPPFLAGS $LUSTRE_CPPFLAGS"
+    LIBS="$LIBS -lfgr"
+    LDFLAGS="$LDFLAGS $FDR_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $FDR_CPPFLAGS"
+
+    # Check for the FGR 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_FGR_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FGR 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for GLIB ===" >&5
+$as_echo "$as_me: === checking for GLIB ===" >&6;}
+
+ if true; then
+  HAVE_GLIB_TRUE=
+  HAVE_GLIB_FALSE='#'
+else
+  HAVE_GLIB_TRUE='#'
+  HAVE_GLIB_FALSE=
+fi
+
+
+
+# Check whether --with-glib was given.
+if test "${with_glib+set}" = set; then
+  withval=$with_glib; GLIB_LDFLAGS="-L$withval/lib";
+         GLIB_LIBS="-lglib-2.0";
+         GLIB_CPPFLAGS="-I$withval/include/glib-2.0 -I$withval/lib/glib-2.0/include";
+else
+  with_glib=no
+fi
+
+
+if test "x$with_glib" == "xno"; then
+
+    if false; then
+  HAVE_GLIB_TRUE=
+  HAVE_GLIB_FALSE='#'
+else
+  HAVE_GLIB_TRUE='#'
+  HAVE_GLIB_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lglib-2.0"
+    LDFLAGS="$LDFLAGS $GLIB_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $GLIB_CPPFLAGS"
+
+    # Check for the GLIB 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 "glib.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 ()
+{
+GHashTable * ght
+  ;
+  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
+  GLIB_LIBS="-lglib-2.0"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 if false; then
+  HAVE_GLIB_TRUE=
+  HAVE_GLIB_FALSE='#'
+else
+  HAVE_GLIB_TRUE='#'
+  HAVE_GLIB_FALSE=
+fi
 
+fi
 
-    # Check for the lustre library and headers
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
     LIBS="$save_LIBS"
     LDFLAGS="$save_LDFLAGS"
@@ -29185,10 +30456,10 @@ else
 
 
     # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-    if test -z "${HAVE_LUSTRE_TRUE}"; then
+    if test -z "${HAVE_GLIB_TRUE}"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_LUSTRE 1
+#define HAVE_GLIB 1
 _ACEOF
 
             :
@@ -29436,11 +30707,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:29439: searching for $search_list " >&5
+echo "configure:30710: 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:29443: first found $tmp_search_results " >&5
+	echo "configure:30714: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29528,11 +30799,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:29531: searching for $search_list " >&5
+echo "configure:30802: 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:29535: first found $tmp_search_results " >&5
+	echo "configure:30806: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29601,11 +30872,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:29604: searching for $search_list " >&5
+echo "configure:30875: 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:29608: first found $tmp_search_results " >&5
+	echo "configure:30879: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29643,11 +30914,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:29646: searching for $search_list " >&5
+echo "configure:30917: 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:29650: first found $tmp_search_results " >&5
+	echo "configure:30921: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29771,11 +31042,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:29774: searching for $search_list " >&5
+echo "configure:31045: 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:29778: first found $tmp_search_results " >&5
+	echo "configure:31049: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29863,11 +31134,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:29866: searching for $search_list " >&5
+echo "configure:31137: 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:29870: first found $tmp_search_results " >&5
+	echo "configure:31141: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29936,11 +31207,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:29939: searching for $search_list " >&5
+echo "configure:31210: 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:29943: first found $tmp_search_results " >&5
+	echo "configure:31214: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29978,11 +31249,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:29981: searching for $search_list " >&5
+echo "configure:31252: 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:29985: first found $tmp_search_results " >&5
+	echo "configure:31256: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30106,11 +31377,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:30109: searching for $search_list " >&5
+echo "configure:31380: 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:30113: first found $tmp_search_results " >&5
+	echo "configure:31384: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30198,11 +31469,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:30201: searching for $search_list " >&5
+echo "configure:31472: 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:30205: first found $tmp_search_results " >&5
+	echo "configure:31476: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30271,11 +31542,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:30274: searching for $search_list " >&5
+echo "configure:31545: 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:30278: first found $tmp_search_results " >&5
+	echo "configure:31549: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30313,11 +31584,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:30316: searching for $search_list " >&5
+echo "configure:31587: 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:30320: first found $tmp_search_results " >&5
+	echo "configure:31591: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30464,11 +31735,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:30467: searching for $search_list " >&5
+echo "configure:31738: 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:30471: first found $tmp_search_results " >&5
+	echo "configure:31742: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30556,11 +31827,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:30559: searching for $search_list " >&5
+echo "configure:31830: 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:30563: first found $tmp_search_results " >&5
+	echo "configure:31834: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30629,11 +31900,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:30632: searching for $search_list " >&5
+echo "configure:31903: 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:30636: first found $tmp_search_results " >&5
+	echo "configure:31907: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30671,11 +31942,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:30674: searching for $search_list " >&5
+echo "configure:31945: 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:30678: first found $tmp_search_results " >&5
+	echo "configure:31949: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30831,11 +32102,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:30834: searching for $search_list " >&5
+echo "configure:32105: 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:30838: first found $tmp_search_results " >&5
+	echo "configure:32109: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30923,11 +32194,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:30926: searching for $search_list " >&5
+echo "configure:32197: 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:30930: first found $tmp_search_results " >&5
+	echo "configure:32201: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30996,11 +32267,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:30999: searching for $search_list " >&5
+echo "configure:32270: 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:31003: first found $tmp_search_results " >&5
+	echo "configure:32274: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31038,11 +32309,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:31041: searching for $search_list " >&5
+echo "configure:32312: 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:31045: first found $tmp_search_results " >&5
+	echo "configure:32316: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31166,11 +32437,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:31169: searching for $search_list " >&5
+echo "configure:32440: 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:31173: first found $tmp_search_results " >&5
+	echo "configure:32444: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31258,11 +32529,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:31261: searching for $search_list " >&5
+echo "configure:32532: 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:31265: first found $tmp_search_results " >&5
+	echo "configure:32536: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31331,11 +32602,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31334: searching for $search_list " >&5
+echo "configure:32605: 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:31338: first found $tmp_search_results " >&5
+	echo "configure:32609: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31373,11 +32644,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31376: searching for $search_list " >&5
+echo "configure:32647: 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:31380: first found $tmp_search_results " >&5
+	echo "configure:32651: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31501,11 +32772,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:31504: searching for $search_list " >&5
+echo "configure:32775: 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:31508: first found $tmp_search_results " >&5
+	echo "configure:32779: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31593,11 +32864,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:31596: searching for $search_list " >&5
+echo "configure:32867: 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:31600: first found $tmp_search_results " >&5
+	echo "configure:32871: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31666,11 +32937,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31669: searching for $search_list " >&5
+echo "configure:32940: 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:31673: first found $tmp_search_results " >&5
+	echo "configure:32944: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31708,11 +32979,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31711: searching for $search_list " >&5
+echo "configure:32982: 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:31715: first found $tmp_search_results " >&5
+	echo "configure:32986: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31859,11 +33130,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:31862: searching for $search_list " >&5
+echo "configure:33133: 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:31866: first found $tmp_search_results " >&5
+	echo "configure:33137: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31951,11 +33222,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:31954: searching for $search_list " >&5
+echo "configure:33225: 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:31958: first found $tmp_search_results " >&5
+	echo "configure:33229: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32024,11 +33295,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:32027: searching for $search_list " >&5
+echo "configure:33298: 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:32031: first found $tmp_search_results " >&5
+	echo "configure:33302: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32066,11 +33337,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:32069: searching for $search_list " >&5
+echo "configure:33340: 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:32073: first found $tmp_search_results " >&5
+	echo "configure:33344: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32275,11 +33546,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:32278: searching for $search_list " >&5
+echo "configure:33549: 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:32282: first found $tmp_search_results " >&5
+	echo "configure:33553: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32367,11 +33638,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:32370: searching for $search_list " >&5
+echo "configure:33641: 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:32374: first found $tmp_search_results " >&5
+	echo "configure:33645: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32440,11 +33711,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:32443: searching for $search_list " >&5
+echo "configure:33714: 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:32447: first found $tmp_search_results " >&5
+	echo "configure:33718: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32482,11 +33753,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:32485: searching for $search_list " >&5
+echo "configure:33756: 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:32489: first found $tmp_search_results " >&5
+	echo "configure:33760: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32610,11 +33881,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:32613: searching for $search_list " >&5
+echo "configure:33884: 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:32617: first found $tmp_search_results " >&5
+	echo "configure:33888: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32702,11 +33973,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:32705: searching for $search_list " >&5
+echo "configure:33976: 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:32709: first found $tmp_search_results " >&5
+	echo "configure:33980: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32775,11 +34046,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32778: searching for $search_list " >&5
+echo "configure:34049: 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:32782: first found $tmp_search_results " >&5
+	echo "configure:34053: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32817,11 +34088,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32820: searching for $search_list " >&5
+echo "configure:34091: 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:32824: first found $tmp_search_results " >&5
+	echo "configure:34095: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32945,11 +34216,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:32948: searching for $search_list " >&5
+echo "configure:34219: 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:32952: first found $tmp_search_results " >&5
+	echo "configure:34223: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33037,11 +34308,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:33040: searching for $search_list " >&5
+echo "configure:34311: 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:33044: first found $tmp_search_results " >&5
+	echo "configure:34315: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33110,11 +34381,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:33113: searching for $search_list " >&5
+echo "configure:34384: 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:33117: first found $tmp_search_results " >&5
+	echo "configure:34388: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33152,11 +34423,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:33155: searching for $search_list " >&5
+echo "configure:34426: 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:33159: first found $tmp_search_results " >&5
+	echo "configure:34430: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33280,11 +34551,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:33283: searching for $search_list " >&5
+echo "configure:34554: 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:33287: first found $tmp_search_results " >&5
+	echo "configure:34558: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33372,11 +34643,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:33375: searching for $search_list " >&5
+echo "configure:34646: 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:33379: first found $tmp_search_results " >&5
+	echo "configure:34650: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33445,11 +34716,11 @@ else
 
 search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:33448: searching for $search_list " >&5
+echo "configure:34719: 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:33452: first found $tmp_search_results " >&5
+	echo "configure:34723: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33487,11 +34758,11 @@ else
 
 search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:33490: searching for $search_list " >&5
+echo "configure:34761: 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:33494: first found $tmp_search_results " >&5
+	echo "configure:34765: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33615,11 +34886,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:33618: searching for $search_list " >&5
+echo "configure:34889: 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:33622: first found $tmp_search_results " >&5
+	echo "configure:34893: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33707,11 +34978,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:33710: searching for $search_list " >&5
+echo "configure:34981: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33714: first found $tmp_search_results " >&5
+	echo "configure:34985: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33780,11 +35051,11 @@ else
 
 search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
 tmp_search_results=""
-echo "configure:33783: searching for $search_list " >&5
+echo "configure:35054: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33787: first found $tmp_search_results " >&5
+	echo "configure:35058: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33822,11 +35093,11 @@ else
 
 search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
 tmp_search_results=""
-echo "configure:33825: searching for $search_list " >&5
+echo "configure:35096: 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:33829: first found $tmp_search_results " >&5
+	echo "configure:35100: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -35578,7 +36849,12 @@ fi
 
 
 
-LIBS="$MPILIBS"
+if test "x y" == "x${MPILIBS}y"; then
+    MPILIBS=""
+fi
+if test -n "${MPILIBS}"; then
+    LIBS="${MPILIBS} ${LIBS}"
+fi
 
  if false; then
   USE_PARALLEL_COMPILER_TRUE=
@@ -35665,10 +36941,15 @@ ADIOSLIB_SEQ_CPPFLAGS="${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}"
 ADIOSLIB_SEQ_CFLAGS=
 ADIOSLIB_SEQ_LDFLAGS="${MXML_LDFLAGS}"
 ADIOSLIB_SEQ_LDADD="-lm ${MXML_LIBS}"
-ADIOSLIB_INT_CPPFLAGS="${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}"
+ADIOSLIB_INT_CPPFLAGS="${MACRODEFFLAG}_NOMPI"
 ADIOSLIB_INT_CFLAGS=
-ADIOSLIB_INT_LDFLAGS="${MXML_LDFLAGS}"
-ADIOSLIB_INT_LDADD="-lm ${MXML_LIBS}"
+ADIOSLIB_INT_LDFLAGS=
+ADIOSLIB_INT_LDADD=
+if test "x$enable_write" != "xno"; then
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${MXML_CPPFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${MXML_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="-lm ${MXML_LIBS}"
+fi
 ADIOSREADLIB_CPPFLAGS=
 ADIOSREADLIB_CFLAGS=
 ADIOSREADLIB_LDFLAGS=
@@ -35865,6 +37146,24 @@ if test -z "${HAVE_DCMF_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${DCMF_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${DCMF_LIBS}"
 fi
+if test -z "${HAVE_PAMI_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${PAMI_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${PAMI_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${PAMI_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${PAMI_LIBS}"
+fi
 if test -z "${HAVE_NETCDF_TRUE}"; then
     ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${NETCDF_CPPFLAGS}"
     ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${NETCDF_CFLAGS}"
@@ -35909,6 +37208,26 @@ if test -z "${HAVE_LUSTRE_TRUE}"; then
     ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LUSTRE_LDFLAGS}"
     ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS}"
 fi
+if test -z "${HAVE_FGR_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${FGR_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${FGR_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${FGR_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${FGR_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${FGR_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${FGR_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${FGR_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${FGR_LIBS}"
+fi
+if test -z "${HAVE_GLIB_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${GLIB_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${GLIB_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${GLIB_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${GLIB_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${GLIB_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${GLIB_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${GLIB_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${GLIB_LIBS}"
+fi
 if test -z "${HAVE_ZLIB_TRUE}"; then
     ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
     ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}"
@@ -36132,7 +37451,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/Fortran/Makefile tests/genarray/Makefile tests/bp_read/Makefile tests/suite/Makefile tests [...]
 
 
 cat >confcache <<\_ACEOF
@@ -36359,6 +37678,27 @@ $as_echo "$as_me: error: conditional \"HAVE_MXML\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${HAVE_PAMI_TRUE}" && test -z "${HAVE_PAMI_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_PAMI_TRUE}" && test -z "${HAVE_PAMI_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_PAMI_TRUE}" && test -z "${HAVE_PAMI_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_PAMI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${HAVE_DCMF_TRUE}" && test -z "${HAVE_DCMF_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_DCMF\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -36702,6 +38042,20 @@ $as_echo "$as_me: error: conditional \"HAVE_DATASPACES\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${HAVE_DATASPACES_TRUE}" && test -z "${HAVE_DATASPACES_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_DATASPACES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_DATASPACES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_DIMES_TRUE}" && test -z "${HAVE_DIMES_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_DIMES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_DIMES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${HAVE_DIMES_TRUE}" && test -z "${HAVE_DIMES_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_DIMES\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -36800,6 +38154,104 @@ $as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LUSTRE_TRUE}" && test -z "${HAVE_LUSTRE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_LUSTRE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FGR_TRUE}" && test -z "${HAVE_FGR_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FGR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_FGR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FGR_TRUE}" && test -z "${HAVE_FGR_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FGR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_FGR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_GLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${HAVE_FLEXPATH_TRUE}" && test -z "${HAVE_FLEXPATH_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_FLEXPATH\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -37988,6 +39440,7 @@ do
     "utils/bpls/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpls/Makefile" ;;
     "utils/bpdiff/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpdiff/Makefile" ;;
     "utils/bp2bp/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bp2bp/Makefile" ;;
+    "utils/list_methods/Makefile") CONFIG_FILES="$CONFIG_FILES utils/list_methods/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" ;;
@@ -39865,6 +41318,28 @@ else
         echo "  - No LUSTRE"
 fi
 
+if test -z "${HAVE_FGR_TRUE}"; then
+        echo "  - FGR";
+        echo "      - FGR_CFLAGS = $FGR_CFLAGS";
+        echo "      - FGR_CPPFLAGS = $FGR_CPPFLAGS";
+        echo "      - FGR_LDFLAGS = $FGR_LDFLAGS";
+        echo "      - FGR_LIBS = $FGR_LIBS";
+        echo
+else
+        echo "  - No FGR"
+fi
+
+if test -z "${HAVE_GLIB_TRUE}"; then
+        echo "  - GLIB";
+        echo "      - GLIB_CFLAGS = $GLIB_CFLAGS";
+        echo "      - GLIB_CPPFLAGS = $GLIB_CPPFLAGS";
+        echo "      - GLIB_LDFLAGS = $GLIB_LDFLAGS";
+        echo "      - GLIB_LIBS = $GLIB_LIBS";
+        echo
+else
+        echo "  - No GLIB"
+fi
+
     echo "  - Networking library for staging methods:";
 if test -z "${HAVE_PORTALS_TRUE}"; then
     echo "    - PORTALS";
@@ -39905,6 +41380,14 @@ elif test -z "${HAVE_DCMF_TRUE}"; then
     echo "      - DCMF_LDFLAGS = $DCMF_LDFLAGS";
     echo "      - DCMF_LIBS = $DCMF_LIBS";
     echo
+
+elif test -z "${HAVE_PAMI_TRUE}"; then
+    echo "    - IBM PAMI";
+    echo "      - PAMI_CFLAGS = $PAMI_CFLAGS";
+    echo "      - PAMI_CPPFLAGS = $PAMI_CPPFLAGS";
+    echo "      - PAMI_LDFLAGS = $PAMI_LDFLAGS";
+    echo "      - PAMI_LIBS = $PAMI_LIBS";
+    echo
 else
     echo "    - No supported networking library found"
 fi
diff --git a/configure.ac b/configure.ac
index 8eafd53..af296e2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ AC_CONFIG_MACRO_DIR(config)
 AC_REVISION($Revision$)
 
 AC_CONFIG_HEADERS(config.h)
-AM_INIT_AUTOMAKE(adios,1.6.0)
+AM_INIT_AUTOMAKE(adios,1.7.0)
 
 AM_MAINTAINER_MODE([enable])
 
@@ -72,6 +72,7 @@ if test -z "${HAVE_MXML_FALSE}" -a -z "${BUILD_WRITE_TRUE}"; then
 fi
 
 dnl AC_PROG_GENGETOPT
+AC_PAMI
 AC_DCMF
 AC_INFINIBAND
 AC_PORTALS
@@ -86,6 +87,8 @@ AC_PROG_DATASPACES
 AC_PROG_DIMES
 AC_DMALLOC
 AC_LUSTRE
+AC_FGR
+AC_GLIB
 AC_DATATAP
 AC_FLEXPATH
 AC_ZLIB
@@ -135,7 +138,13 @@ dnl CC="$MPICC"
 dnl CXX="$MPICXX"
 dnl FC="$MPIFC"
 
-LIBS="$MPILIBS"
+dnl Unset if MPILIBS == " ", a byproduct of config/acx_mpi.m4 on success
+if test "x y" == "x${MPILIBS}y"; then
+    MPILIBS=""
+fi
+if test -n "${MPILIBS}"; then
+    LIBS="${MPILIBS} ${LIBS}"
+fi
 
 AM_CONDITIONAL(USE_PARALLEL_COMPILER,false)
 
@@ -187,10 +196,15 @@ ADIOSLIB_SEQ_CPPFLAGS="${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}"
 ADIOSLIB_SEQ_CFLAGS=
 ADIOSLIB_SEQ_LDFLAGS="${MXML_LDFLAGS}"
 ADIOSLIB_SEQ_LDADD="-lm ${MXML_LIBS}"
-ADIOSLIB_INT_CPPFLAGS="${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}"
+ADIOSLIB_INT_CPPFLAGS="${MACRODEFFLAG}_NOMPI"
 ADIOSLIB_INT_CFLAGS=
-ADIOSLIB_INT_LDFLAGS="${MXML_LDFLAGS}"
-ADIOSLIB_INT_LDADD="-lm ${MXML_LIBS}"
+ADIOSLIB_INT_LDFLAGS=
+ADIOSLIB_INT_LDADD=
+if test "x$enable_write" != "xno"; then
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${MXML_CPPFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${MXML_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="-lm ${MXML_LIBS}"
+fi
 ADIOSREADLIB_CPPFLAGS=
 ADIOSREADLIB_CFLAGS=
 ADIOSREADLIB_LDFLAGS=
@@ -387,6 +401,24 @@ if test -z "${HAVE_DCMF_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${DCMF_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${DCMF_LIBS}"
 fi
+if test -z "${HAVE_PAMI_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${PAMI_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${PAMI_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${PAMI_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} ${PAMI_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${PAMI_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${PAMI_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${PAMI_LIBS}"
+fi
 if test -z "${HAVE_NETCDF_TRUE}"; then
     ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${NETCDF_CPPFLAGS}"
     ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${NETCDF_CFLAGS}"
@@ -431,6 +463,26 @@ if test -z "${HAVE_LUSTRE_TRUE}"; then
     ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LUSTRE_LDFLAGS}"
     ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS}"
 fi
+if test -z "${HAVE_FGR_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${FGR_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${FGR_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${FGR_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${FGR_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${FGR_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${FGR_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${FGR_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${FGR_LIBS}"
+fi
+if test -z "${HAVE_GLIB_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${GLIB_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${GLIB_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${GLIB_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${GLIB_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${GLIB_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${GLIB_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${GLIB_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${GLIB_LIBS}"
+fi
 if test -z "${HAVE_ZLIB_TRUE}"; then
     ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
     ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}"
@@ -672,6 +724,7 @@ AC_CONFIG_FILES([Makefile
                  utils/bpls/Makefile
                  utils/bpdiff/Makefile
                  utils/bp2bp/Makefile
+                 utils/list_methods/Makefile
                  examples/Makefile
                  examples/C/Makefile
                  examples/C/scalars/Makefile
@@ -767,6 +820,28 @@ else
         echo "  - No LUSTRE"
 fi
 
+if test -z "${HAVE_FGR_TRUE}"; then
+        echo "  - FGR";
+        echo "      - FGR_CFLAGS = $FGR_CFLAGS";
+        echo "      - FGR_CPPFLAGS = $FGR_CPPFLAGS";
+        echo "      - FGR_LDFLAGS = $FGR_LDFLAGS";
+        echo "      - FGR_LIBS = $FGR_LIBS";
+        echo
+else
+        echo "  - No FGR"
+fi
+
+if test -z "${HAVE_GLIB_TRUE}"; then
+        echo "  - GLIB";
+        echo "      - GLIB_CFLAGS = $GLIB_CFLAGS";
+        echo "      - GLIB_CPPFLAGS = $GLIB_CPPFLAGS";
+        echo "      - GLIB_LDFLAGS = $GLIB_LDFLAGS";
+        echo "      - GLIB_LIBS = $GLIB_LIBS";
+        echo
+else
+        echo "  - No GLIB"
+fi
+
     echo "  - Networking library for staging methods:";
 if test -z "${HAVE_PORTALS_TRUE}"; then
     echo "    - PORTALS";
@@ -807,6 +882,14 @@ elif test -z "${HAVE_DCMF_TRUE}"; then
     echo "      - DCMF_LDFLAGS = $DCMF_LDFLAGS";
     echo "      - DCMF_LIBS = $DCMF_LIBS";
     echo
+
+elif test -z "${HAVE_PAMI_TRUE}"; then
+    echo "    - IBM PAMI";
+    echo "      - PAMI_CFLAGS = $PAMI_CFLAGS";
+    echo "      - PAMI_CPPFLAGS = $PAMI_CPPFLAGS";
+    echo "      - PAMI_LDFLAGS = $PAMI_LDFLAGS";
+    echo "      - PAMI_LIBS = $PAMI_LIBS";
+    echo
 else
     echo "    - No supported networking library found"
 fi
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index d3e216a..ab2ab63 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/arrays/Makefile.in b/examples/C/arrays/Makefile.in
index ebf92c9..f636976 100644
--- a/examples/C/arrays/Makefile.in
+++ b/examples/C/arrays/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/arrays/arrays_read.c b/examples/C/arrays/arrays_read.c
index a49dab4..9a92b94 100644
--- a/examples/C/arrays/arrays_read.c
+++ b/examples/C/arrays/arrays_read.c
@@ -21,7 +21,7 @@
 int main (int argc, char ** argv) 
 {
     char        filename [256];
-    int         rank, size, i, j;
+    int         rank, i, j;
     int         NX, NY; 
     double      *t;
     int         *p;
diff --git a/examples/C/arrays/arrays_write.c b/examples/C/arrays/arrays_write.c
index 64d523c..a9d4a09 100644
--- a/examples/C/arrays/arrays_write.c
+++ b/examples/C/arrays/arrays_write.c
@@ -18,13 +18,12 @@
 int main (int argc, char ** argv) 
 {
     char        filename [256];
-    int         rank, size, i, j;
+    int         rank, i, j;
     int         NX = 10, NY = 100; 
     double      t[NX][NY];
     int         p[NX];
     MPI_Comm    comm = MPI_COMM_WORLD;
 
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/attributes/Makefile.in b/examples/C/attributes/Makefile.in
index 0af1141..205a2ed 100644
--- a/examples/C/attributes/Makefile.in
+++ b/examples/C/attributes/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/attributes/attributes_read.c b/examples/C/attributes/attributes_read.c
index 6d0c503..d032252 100644
--- a/examples/C/attributes/attributes_read.c
+++ b/examples/C/attributes/attributes_read.c
@@ -12,16 +12,14 @@
  *
 */
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include "mpi.h"
 #include "adios_read.h"
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i;
-    int         NX = 10, level = 1; 
-    double      t[NX], mean = 0;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_DATATYPES attr_type;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
diff --git a/examples/C/attributes/attributes_write.c b/examples/C/attributes/attributes_write.c
index 1acd293..cff9ce6 100644
--- a/examples/C/attributes/attributes_write.c
+++ b/examples/C/attributes/attributes_write.c
@@ -15,13 +15,12 @@ int main (int argc, char ** argv)
 {
     char        filename [256];
     int         rank, size, i;
-    int         NX = 10, level = 1; 
+    int         NX = 10; 
     double      t[NX], mean = 0;
     MPI_Comm    comm = MPI_COMM_WORLD;
     const char * str = "Nov, 2009";
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/compression_test/Makefile.in b/examples/C/compression_test/Makefile.in
index d682809..3940142 100644
--- a/examples/C/compression_test/Makefile.in
+++ b/examples/C/compression_test/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -206,9 +209,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -275,6 +284,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/compression_test/adios_global.c b/examples/C/compression_test/adios_global.c
index 1a22dab..eac6356 100755
--- a/examples/C/compression_test/adios_global.c
+++ b/examples/C/compression_test/adios_global.c
@@ -34,7 +34,6 @@ int main (int argc, char ** argv)
     MPI_Comm    comm = MPI_COMM_WORLD;
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/compression_test/adios_read_box.c b/examples/C/compression_test/adios_read_box.c
index fbebb6f..c97a947 100755
--- a/examples/C/compression_test/adios_read_box.c
+++ b/examples/C/compression_test/adios_read_box.c
@@ -62,7 +62,7 @@ int main(int argc, char** argv)
 	int i = 0;
 	for(i = 0; i < g_ndims; i++)
 	{
-		printf("%d ", g_dim[i]);
+		printf("%lld ", g_dim[i]);
 	}
 	printf("\n");
 	
diff --git a/examples/C/compression_test/genarray3D.c b/examples/C/compression_test/genarray3D.c
index 062b70c..09e348f 100755
--- a/examples/C/compression_test/genarray3D.c
+++ b/examples/C/compression_test/genarray3D.c
@@ -1,6 +1,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/time.h>
+
 #include "mpi.h"
 #include "adios.h"
 
@@ -55,10 +57,10 @@ int main (int argc, char ** 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;
+    //double t1 = 0.0;
+    //double t2 = 0.0;
+    //double t3 = 0.0;
+    //double t4 = 0.0;
 
     // variable dimensions
     int gndx = DIM_GLOBAL;
@@ -91,7 +93,6 @@ int main (int argc, char ** argv)
     int offy = posy * ndy;
     int offz = posz * ndz;
 
-    int timesteps = 0;
 
     srand(0); // all procs generate the same random datasets
 
@@ -101,16 +102,15 @@ int main (int argc, char ** argv)
         double_xyz[i] = (double) rand () / RAND_MAX;
     }
 
-    int adios_err;
     uint64_t adios_groupsize, adios_totalsize;
     int64_t adios_handle;
 
-    if(rank == 0)
-        t3 = dclock();
+    //if(rank == 0)
+    //    t3 = dclock();
 
     MPI_Barrier(comm);
 
-    t1 = dclock();
+    //t1 = dclock();
 
     adios_init (xml_file_name, comm);
     adios_open (&adios_handle, GROUP_NAME, bp_file_name, "w", comm);
diff --git a/examples/C/compression_test/read_test.h b/examples/C/compression_test/read_test.h
index a9593e5..ad05b04 100755
--- a/examples/C/compression_test/read_test.h
+++ b/examples/C/compression_test/read_test.h
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <time.h>
 #include "mpi.h"
 #include "adios_read.h"
 
@@ -46,7 +47,7 @@ int generate_random_box(uint64_t* starts, uint64_t* counts)
 	{
 		starts[d] = rand() % (g_dim[d] - 1);
 		counts[d] = rand() % (g_dim[d] - 1 - starts[d]) + 1;
-		printf("sel dim[%d]: %d %d\n", d, starts[d], counts[d]);
+		printf("sel dim[%d]: %lld %lld\n", d, starts[d], counts[d]);
 	}
 	return 0;
 }
@@ -57,7 +58,7 @@ int generate_random_points(uint64_t** points, uint64_t* npoints)
 	*npoints = rand() % g_total + 1;	
 	*points  = (uint64_t *)malloc((*npoints) * g_ndims * sizeof (uint64_t));
 	
-	printf("num of points %d %d\n", *npoints, g_total);
+	printf("num of points %lld %lld\n", *npoints, g_total);
 	
 	int i = 0;
 	for (i = 0; i < *npoints; i ++)
diff --git a/examples/C/flexpath_arrays/Makefile.in b/examples/C/flexpath_arrays/Makefile.in
index d999589..e5f04e4 100644
--- a/examples/C/flexpath_arrays/Makefile.in
+++ b/examples/C/flexpath_arrays/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.in b/examples/C/flexpath_arrays/global_range_select/Makefile.in
index 5f7a8c2..48a70b2 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.in
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays.xml b/examples/C/flexpath_arrays/global_range_select/arrays.xml
index 147457c..da505d0 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays.xml
+++ b/examples/C/flexpath_arrays/global_range_select/arrays.xml
@@ -1,15 +1,16 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
 <adios-group name="temperature" coordination-communicator="comm" stats="On">
-    <var name="NX" path="scalar/dim" type="integer"/>
-    <var name="NY" path="scalar/dim" type="integer"/>
+    <var name="NX" path="/scalar/dim" type="integer"/>
+    <var name="NY" path="/scalar/dim" type="integer"/>
+    <var name="NZ" path="/scalar/dim" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <var name="offset" type="integer"/>
     <var name="size_y" type="integer"/>
     <var name="test_scalar" type="integer"/>
-    <global-bounds dimensions="scalar/dim/NX,size_y" offsets="0,offset">
-        <var name="var_2d_array" gwrite="t" type="double" dimensions="scalar/dim/NX,scalar/dim/NY"/>
+    <global-bounds dimensions="/scalar/dim/NZ,size_y,/scalar/dim/NX" offsets="0,offset,0">
+        <var name="var_2d_array" gwrite="t" type="double" dimensions="/scalar/dim/NZ,/scalar/dim/NY,/scalar/dim/NX"/>
     </global-bounds>
 </adios-group>
 
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_read.c b/examples/C/flexpath_arrays/global_range_select/arrays_read.c
index 2655b11..fbcc0f8 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_read.c
+++ b/examples/C/flexpath_arrays/global_range_select/arrays_read.c
@@ -19,19 +19,49 @@
 #include "adios.h"
 #include "public/adios_read.h"
 
+
+void
+slice(uint64_t length, uint64_t *s, uint64_t *e, int rank, int mpisize)
+{
+    uint64_t start = 0;
+    uint64_t end = 0;
+    uint64_t rem = length % mpisize;
+
+    start = length/mpisize * rank;
+    end = length/mpisize * (rank+1);
+    *s = start;
+    *e = end;
+    
+    /* If our MPI size is greater
+       than the number of y dimensions,
+       then read the whole thing. */
+    if (mpisize > length) {
+	*e = length;
+	*s = 0;
+	return;\
+    }
+    if (end > length) {
+        end = length;
+        *e = end;
+        return;
+    }
+    if (rank == mpisize-1) {
+        end += rem;
+        *e = end;
+    }
+}
+
+
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, i, j;
-    int         NX, NY; 
+    int         rank, size, j;
+    int         NX, NY, NZ; 
     double      *t;
     MPI_Comm    comm = MPI_COMM_WORLD;
 
-    int         adios_err;
-    int64_t     adios_handle, adios_buf_size;
-
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
 
     adios_read_init_method(ADIOS_READ_METHOD_FLEXPATH, comm, "");
 
@@ -39,7 +69,7 @@ int main (int argc, char ** argv)
 
     ADIOS_SELECTION scalar_block_select;
     scalar_block_select.type = ADIOS_SELECTION_WRITEBLOCK;
-    scalar_block_select.u.block.index = rank;
+    scalar_block_select.u.block.index = 0;
 
     /* schedule_read of a scalar. */    
     int test_scalar = -1;
@@ -48,6 +78,7 @@ int main (int argc, char ** argv)
 					comm,
 					ADIOS_LOCKMODE_NONE, 0.0);
 
+    int i;
     /* for(i=0; i<afile->nvars; i++){ */
     /* 	printf("var: %s\n", afile->var_namelist[i]); */
     /* } */
@@ -55,8 +86,10 @@ int main (int argc, char ** argv)
     int ii = 0;
     while(adios_errno != err_end_of_stream){       
         /* get a bounding box - rank 0 for now*/
-        ADIOS_VARINFO *nx_info = adios_inq_var( afile, "scalar/dim/NX");
-        ADIOS_VARINFO *ny_info = adios_inq_var( afile, "scalar/dim/NY");
+        ADIOS_VARINFO *nx_info = adios_inq_var(afile, "/scalar/dim/NX");
+        ADIOS_VARINFO *ny_info = adios_inq_var(afile, "/scalar/dim/NY");
+	ADIOS_VARINFO *nz_info = adios_inq_var(afile, "/scalar/dim/NZ");
+
 	ADIOS_VARINFO *size_info = adios_inq_var( afile, "size");
 	ADIOS_VARINFO *arry = adios_inq_var( afile, "var_2d_array");
 
@@ -64,17 +97,30 @@ int main (int argc, char ** argv)
 	int ny_val = *((int*)ny_info->value);
 	int size_val = *((int*)size_info->value);
 
-	printf("nx: %d, ny: %d, size: %d\n", nx_val, ny_val, size);
+	//printf("nx: %d, ny: %d, size: %d\n", nx_val, ny_val, size_val);
 	
+	// slice array along y dimension
+	uint64_t my_ystart, my_yend, my_ycount;
+	slice(arry->dims[1], &my_ystart, &my_yend, rank, size);
+
+	/* printf("rank: %d my_ystart: %d, my_yend: %d\n", */
+	/*        rank, (int)my_ystart, (int)my_yend); */
+
 	uint64_t xcount = arry->dims[0];
-	uint64_t ycount = arry->dims[1];
+	uint64_t ycount = my_yend - my_ystart;
+	uint64_t zcount = arry->dims[2];
+
+	uint64_t starts[] = {0, my_ystart, 0};
+	uint64_t counts[] = {xcount, ycount, zcount};
 
-	uint64_t starts[] = {0,0};
-	uint64_t counts[] = {xcount, ycount};
+	/* printf("rank: %d starts: %d %d %d. counts: %d %d %d\n", */
+	/*        rank, */
+	/*        (int)starts[0], (int)starts[1], (int)starts[2], */
+	/*        (int)counts[0], (int)counts[1], (int)counts[2]); */
 
-	global_range_select = adios_selection_boundingbox(2, starts, counts);
+	global_range_select = adios_selection_boundingbox(arry->ndim, starts, counts);
 
-	int nelem = xcount*ycount;
+	int nelem = xcount*ycount*zcount;
 
         if(nx_info->value) {
             NX = *((int *)nx_info->value);
@@ -82,6 +128,9 @@ int main (int argc, char ** argv)
         if(ny_info->value){
             NY= *((int*)ny_info->value);
         }
+        if(nz_info->value){
+            NZ= *((int*)nz_info->value);
+        }
     
 	if(rank == 0){
 	    int n;
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_write.c b/examples/C/flexpath_arrays/global_range_select/arrays_write.c
index b0f823e..c325d2c 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_write.c
+++ b/examples/C/flexpath_arrays/global_range_select/arrays_write.c
@@ -19,9 +19,10 @@ int main (int argc, char ** argv)
 {
     char        filename [256];
     int         rank, size, i, j, offset, size_y;
-    int         NX = 40; 
+    int         NX = 5; 
     int         NY = 2;
-    double      t[NX*NY];
+    int         NZ = 2;
+    double      t[NX*NY*NZ];
     MPI_Comm    comm = MPI_COMM_WORLD;
 
     int64_t     adios_handle;
@@ -33,36 +34,52 @@ int main (int argc, char ** argv)
     strcpy (filename, "arrays");
     adios_init ("arrays.xml", comm);
     
+    int total = NX * NY * NZ * size;
     int test_scalar = rank * 1000;
+
     offset = rank*NY;
     size_y = size*NY;
-    int ii;
-   
-    for(ii = 0; ii<20; ii++){       
-	for(j=0; j<NY*NX; j++){       
-	    t[j] = (offset * NX) + j + NY*NX*ii;	    
+
+    int start = 0;
+    int myslice = NX * NY * NZ;
+
+    for (i = 0; i<5; i++) {       
+	for (j=0; j<NY*NX*NZ; j++) {       
+	    t[j] = rank*myslice + (start + j);
+	}
+
+	int s;
+	for (s = 0; s<size; s++) {
+	    if (s == rank) {
+		fprintf(stderr, "rank %d: step: %d [", rank, i);
+		int z;
+		for(z=0; z<NX*NY*NZ;z++){
+		    fprintf(stderr, "%lf, ", t[z]);
+		}
+		fprintf(stderr, "]\n");
+	    }
+	    fprintf(stderr, "\n");
+	    fflush(stderr);
+	    MPI_Barrier(MPI_COMM_WORLD);
 	}
 
+	start += total;
         //prints the array.
 	adios_open (&adios_handle, "temperature", filename, "w", comm);
 	
-	adios_write (adios_handle, "scalar/dim/NX", &NX);
-	adios_write (adios_handle, "scalar/dim/NY", &NY);
+	adios_write (adios_handle, "/scalar/dim/NX", &NX);
+	adios_write (adios_handle, "/scalar/dim/NY", &NY);
+	adios_write (adios_handle, "/scalar/dim/NZ", &NZ);
 	adios_write (adios_handle, "test_scalar", &test_scalar);
 	adios_write (adios_handle, "size", &size);
 	adios_write (adios_handle, "rank", &rank);
 	adios_write (adios_handle, "offset", &offset);
 	adios_write (adios_handle, "size_y", &size_y);
 	adios_write (adios_handle, "var_2d_array", t);
-    
+	
 	adios_close (adios_handle);
-	fprintf(stderr, "Rank=%d commited write %d\n", rank, ii);
-	printf("rank %d: [", rank);
-	//for(i=0; i<NX*NY;i++){
-	printf("%lf, ", t[0]);
-		//}
-	printf("]\n");
     }
+
     adios_finalize (rank);
     MPI_Finalize ();
     return 0;
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.in b/examples/C/flexpath_arrays/process_select/Makefile.in
index cd844a6..bff36b6 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.in
+++ b/examples/C/flexpath_arrays/process_select/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/flexpath_arrays/process_select/arrays_read.c b/examples/C/flexpath_arrays/process_select/arrays_read.c
index c8bf8bb..93065d4 100644
--- a/examples/C/flexpath_arrays/process_select/arrays_read.c
+++ b/examples/C/flexpath_arrays/process_select/arrays_read.c
@@ -22,16 +22,13 @@
 int main (int argc, char ** argv) 
 {
     /* application data structures */
-    char        filename [256];
-    int         rank, size, i, j;
+    int         rank;
     int         NX, NY; 
     double      *t;
     int         *p;
 
     /* MPI and ADIOS data structures */
     MPI_Comm    comm = MPI_COMM_WORLD;
-    int         adios_err;
-    int64_t     adios_handle, adios_buf_size;
 
     /* MPI and ADIOS setup */
     MPI_Init (&argc, &argv);
@@ -51,7 +48,6 @@ int main (int argc, char ** argv)
     ADIOS_FILE* afile = adios_read_open("arrays", ADIOS_READ_METHOD_FLEXPATH, comm, 
                                         ADIOS_LOCKMODE_NONE, 30.0);
     /* Read arrays for each time step */
-    int ii=0;
     while(adios_errno != err_end_of_stream){
 
 	ADIOS_VARINFO* nx_info = adios_inq_var( afile, "NX");
diff --git a/examples/C/flexpath_arrays/process_select/arrays_write.c b/examples/C/flexpath_arrays/process_select/arrays_write.c
index 2880590..f1086b3 100644
--- a/examples/C/flexpath_arrays/process_select/arrays_write.c
+++ b/examples/C/flexpath_arrays/process_select/arrays_write.c
@@ -19,14 +19,13 @@ int main (int argc, char ** argv)
 {
     /* application data structures */
     char        filename [256];
-    int         rank, size, i, j;
+    int         rank, i, j;
     int         NX = 10, NY = 100; 
     double      t[NX][NY];
     int         p[NX];
 
     /* MPI and ADIOS data structures */
     MPI_Comm    comm = MPI_COMM_WORLD;
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/global-array-time/Makefile.in b/examples/C/global-array-time/Makefile.in
index f8b296f..0f705d6 100644
--- a/examples/C/global-array-time/Makefile.in
+++ b/examples/C/global-array-time/Makefile.in
@@ -52,7 +52,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -63,6 +65,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -217,9 +220,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -286,6 +295,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/global-array-time/adios_globaltime.c b/examples/C/global-array-time/adios_globaltime.c
index 85dd00c..f9077f0 100644
--- a/examples/C/global-array-time/adios_globaltime.c
+++ b/examples/C/global-array-time/adios_globaltime.c
@@ -20,7 +20,6 @@ int main (int argc, char ** argv)
 	double      p[NY];
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
 	int64_t     adios_handle;
 	MPI_Comm    comm=MPI_COMM_WORLD;
diff --git a/examples/C/global-array-time/adios_globaltime_no_xml.c b/examples/C/global-array-time/adios_globaltime_no_xml.c
index a5e8633..fc0c343 100644
--- a/examples/C/global-array-time/adios_globaltime_no_xml.c
+++ b/examples/C/global-array-time/adios_globaltime_no_xml.c
@@ -30,9 +30,8 @@ int main (int argc, char ** argv)
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err, it;
+	int         it;
 	uint64_t    adios_groupsize, adios_totalsize;
-	int64_t     adios_handle;
 
 	MPI_Init (&argc, &argv);
 	MPI_Comm_rank (comm, &rank);
diff --git a/examples/C/global-array-time/adios_read_globaltime.c b/examples/C/global-array-time/adios_read_globaltime.c
index e5e7bd6..bcbbe97 100644
--- a/examples/C/global-array-time/adios_read_globaltime.c
+++ b/examples/C/global-array-time/adios_read_globaltime.c
@@ -16,7 +16,6 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i, j, k, token;
     MPI_Comm    comm = MPI_COMM_WORLD;
     MPI_Status  status;
@@ -71,7 +70,7 @@ int main (int argc, char ** argv)
         MPI_Recv (&token, 1, MPI_INT, rank-1, 0, comm, &status);
     }
 
-    printf("------------------------------------------------\n", rank);
+    printf("------------------------------------------------\n");
     printf("rank=%d: \n", rank);
     for (i = 0; i < 2; i++) {
         printf ("step %lld = [\n", step+i);   
diff --git a/examples/C/global-array-time/adios_read_globaltime_streaming.c b/examples/C/global-array-time/adios_read_globaltime_streaming.c
index 57515da..2c37869 100644
--- a/examples/C/global-array-time/adios_read_globaltime_streaming.c
+++ b/examples/C/global-array-time/adios_read_globaltime_streaming.c
@@ -19,8 +19,7 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, i, j, NX = 16;
+    int         rank, size, i, j;
     MPI_Comm    comm = MPI_COMM_WORLD;
     ADIOS_FILE * f;
     ADIOS_VARINFO * v;
@@ -29,9 +28,8 @@ int main (int argc, char ** argv)
     int retval = 0;
     float timeout_sec = 1.0; 
 
-    void * data = NULL, * data1 = NULL, * data2 = NULL;
-    uint64_t start[2], count[2], bytes_read = 0;
-    struct timeval t0, t1;
+    void * data = NULL;
+    uint64_t start[2], count[2];
 
     MPI_Init (&argc, &argv);
 
@@ -65,7 +63,7 @@ int main (int argc, char ** argv)
 
         printf ("ndim = %d\n",  v->ndim);
         //printf ("nsteps = %d\n",  v->nsteps);
-        printf ("dims[%lu][%lu]\n",  v->dims[0], v->dims[1]);
+        printf ("dims[%llu][%llu]\n",  v->dims[0], v->dims[1]);
 
         uint64_t slice_size = v->dims[0]/size;
         if (rank == size-1)
diff --git a/examples/C/global-array/Makefile.am b/examples/C/global-array/Makefile.am
index 38fdcaa..7f5ede9 100644
--- a/examples/C/global-array/Makefile.am
+++ b/examples/C/global-array/Makefile.am
@@ -6,7 +6,7 @@ AUTOMAKE_OPTIONS = no-dependencies
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
-noinst_PROGRAMS = adios_global adios_global_2files adios_read_gpp adios_read_global adios_read_writeblock adios_read_chunk adios_global_no_xml adios_read_global_no_xml no_xml_write_byid read_no_xml_write_byid
+noinst_PROGRAMS = adios_global adios_global_2files adios_read_gpp adios_read_global adios_read_writeblock adios_read_chunk adios_global_no_xml adios_read_global_no_xml no_xml_write_byid read_no_xml_write_byid adios_global_aggregate_by_color
 
 adios_global_SOURCES = adios_global.c
 adios_global_LDADD = $(top_builddir)/src/libadios.a 
@@ -36,6 +36,10 @@ adios_global_no_xml_SOURCES = adios_global_no_xml.c
 adios_global_no_xml_LDADD = $(top_builddir)/src/libadios.a 
 adios_global_no_xml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 adios_global_no_xml_LDADD += $(ADIOSLIB_LDADD)
+adios_global_aggregate_by_color_SOURCES = adios_global_aggregate_by_color.c
+adios_global_aggregate_by_color_LDADD = $(top_builddir)/src/libadios.a
+adios_global_aggregate_by_color_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_global_aggregate_by_color_LDADD += $(ADIOSLIB_LDADD)
 adios_read_global_no_xml_SOURCES = adios_read_global_no_xml.c
 adios_read_global_no_xml_LDADD = $(top_builddir)/src/libadiosread.a
 adios_read_global_no_xml_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
diff --git a/examples/C/global-array/Makefile.in b/examples/C/global-array/Makefile.in
index 5eab579..25847d1 100644
--- a/examples/C/global-array/Makefile.in
+++ b/examples/C/global-array/Makefile.in
@@ -38,7 +38,8 @@ noinst_PROGRAMS = adios_global$(EXEEXT) adios_global_2files$(EXEEXT) \
 	adios_read_gpp$(EXEEXT) adios_read_global$(EXEEXT) \
 	adios_read_writeblock$(EXEEXT) adios_read_chunk$(EXEEXT) \
 	adios_global_no_xml$(EXEEXT) adios_read_global_no_xml$(EXEEXT) \
-	no_xml_write_byid$(EXEEXT) read_no_xml_write_byid$(EXEEXT)
+	no_xml_write_byid$(EXEEXT) read_no_xml_write_byid$(EXEEXT) \
+	adios_global_aggregate_by_color$(EXEEXT)
 subdir = examples/C/global-array
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -53,7 +54,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -64,6 +67,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -93,6 +97,16 @@ adios_global_2files_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 adios_global_2files_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(adios_global_2files_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_global_aggregate_by_color_OBJECTS =  \
+	adios_global_aggregate_by_color.$(OBJEXT)
+adios_global_aggregate_by_color_OBJECTS =  \
+	$(am_adios_global_aggregate_by_color_OBJECTS)
+adios_global_aggregate_by_color_DEPENDENCIES =  \
+	$(top_builddir)/src/libadios.a $(am__DEPENDENCIES_1)
+adios_global_aggregate_by_color_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) \
+	$(adios_global_aggregate_by_color_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/libadios.a \
@@ -164,12 +178,14 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
 SOURCES = $(adios_global_SOURCES) $(adios_global_2files_SOURCES) \
+	$(adios_global_aggregate_by_color_SOURCES) \
 	$(adios_global_no_xml_SOURCES) $(adios_read_chunk_SOURCES) \
 	$(adios_read_global_SOURCES) \
 	$(adios_read_global_no_xml_SOURCES) $(adios_read_gpp_SOURCES) \
 	$(adios_read_writeblock_SOURCES) $(no_xml_write_byid_SOURCES) \
 	$(read_no_xml_write_byid_SOURCES)
 DIST_SOURCES = $(adios_global_SOURCES) $(adios_global_2files_SOURCES) \
+	$(adios_global_aggregate_by_color_SOURCES) \
 	$(adios_global_no_xml_SOURCES) $(adios_read_chunk_SOURCES) \
 	$(adios_read_global_SOURCES) \
 	$(adios_read_global_no_xml_SOURCES) $(adios_read_gpp_SOURCES) \
@@ -261,9 +277,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -330,6 +352,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -446,6 +472,10 @@ adios_global_no_xml_SOURCES = adios_global_no_xml.c
 adios_global_no_xml_LDADD = $(top_builddir)/src/libadios.a \
 	$(ADIOSLIB_LDADD)
 adios_global_no_xml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_global_aggregate_by_color_SOURCES = adios_global_aggregate_by_color.c
+adios_global_aggregate_by_color_LDADD =  \
+	$(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_global_aggregate_by_color_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 adios_read_global_no_xml_SOURCES = adios_read_global_no_xml.c
 adios_read_global_no_xml_LDADD = $(top_builddir)/src/libadiosread.a \
 	$(ADIOSREADLIB_LDADD)
@@ -509,6 +539,9 @@ adios_global$(EXEEXT): $(adios_global_OBJECTS) $(adios_global_DEPENDENCIES)
 adios_global_2files$(EXEEXT): $(adios_global_2files_OBJECTS) $(adios_global_2files_DEPENDENCIES) 
 	@rm -f adios_global_2files$(EXEEXT)
 	$(adios_global_2files_LINK) $(adios_global_2files_OBJECTS) $(adios_global_2files_LDADD) $(LIBS)
+adios_global_aggregate_by_color$(EXEEXT): $(adios_global_aggregate_by_color_OBJECTS) $(adios_global_aggregate_by_color_DEPENDENCIES) 
+	@rm -f adios_global_aggregate_by_color$(EXEEXT)
+	$(adios_global_aggregate_by_color_LINK) $(adios_global_aggregate_by_color_OBJECTS) $(adios_global_aggregate_by_color_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)
diff --git a/examples/C/global-array/adios_global.c b/examples/C/global-array/adios_global.c
index 59232de..6bf38b0 100644
--- a/examples/C/global-array/adios_global.c
+++ b/examples/C/global-array/adios_global.c
@@ -25,7 +25,6 @@ int main (int argc, char ** argv)
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
 	int64_t     adios_handle;
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/global-array/adios_global.xml
index cdc76e5..a3cfd4d 100644
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/global-array/adios_global.xml
@@ -5,7 +5,8 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" 
+            transform="identity"/>
     </global-bounds>
     <attribute name="temperature/description" 
                value="Global array written from 'size' processes" 
diff --git a/examples/C/global-array/adios_global_2files.c b/examples/C/global-array/adios_global_2files.c
index 8735973..275286d 100644
--- a/examples/C/global-array/adios_global_2files.c
+++ b/examples/C/global-array/adios_global_2files.c
@@ -13,10 +13,9 @@ int main (int argc, char ** argv)
 	char        filename [256];
 	int         rank;
 	int         NX = 10; 
-	double      t[NX], p[NX], s[NX];
+	double      t[NX];
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
 	int64_t     adios_handle;
 	MPI_Comm comm;
diff --git a/examples/C/global-array/adios_global_no_xml.c b/examples/C/global-array/adios_global_aggregate_by_color.c
similarity index 72%
copy from examples/C/global-array/adios_global_no_xml.c
copy to examples/C/global-array/adios_global_aggregate_by_color.c
index 2001460..34f5e10 100644
--- a/examples/C/global-array/adios_global_no_xml.c
+++ b/examples/C/global-array/adios_global_aggregate_by_color.c
@@ -32,22 +32,19 @@
 int main (int argc, char ** argv) 
 {
 	char        filename [256];
-	int         rank, size, i, block;
+	int         rank, size, i;
 	int         NX = 100, Global_bounds, Offsets; 
 	double      t[NX];
-        int         sub_blocks = 3;
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
-	int64_t     adios_handle;
 
 	MPI_Init (&argc, &argv);
 	MPI_Comm_rank (comm, &rank);
 	MPI_Comm_size (comm, &size);
 
-        Global_bounds = sub_blocks * NX * size;
+        Global_bounds = NX * size;
 
 	strcpy (filename, "adios_global_no_xml.bp");
 
@@ -69,35 +66,29 @@ int main (int argc, char ** argv)
 			,"", adios_integer
 			,0, 0, 0);
 
-        for (i=0;i<sub_blocks;i++) {
+        adios_define_var (m_adios_group, "Offsets"
+                         ,"", adios_integer
+                         ,0, 0, 0);
    
-           adios_define_var (m_adios_group, "Offsets"
-                        ,"", adios_integer
-                        ,0, 0, 0);
-   
-           adios_define_var (m_adios_group, "temperature"
+       adios_define_var (m_adios_group, "temperature"
                         ,"", adios_double
                         ,"NX", "Global_bounds", "Offsets");
-        }
    
         adios_open (&m_adios_file, "restart", filename, "w", comm);
 
-        adios_groupsize = sub_blocks * (4 + 4 + 4 + NX * 8);
+        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, "Global_bounds", (void *) &Global_bounds);
-/* now we will write the data for each sub block */
-        for (block=0;block<sub_blocks;block++) {
 
-           Offsets = rank * sub_blocks * NX + block*NX;
-           adios_write(m_adios_file, "Offsets", (void *) &Offsets);
+        Offsets = rank * NX;
+        adios_write(m_adios_file, "Offsets", (void *) &Offsets);
 
-           for (i = 0; i < NX; i++)
-               t[i] = Offsets + i;
+        for (i = 0; i < NX; i++)
+            t[i] = Offsets + i;
 
-           adios_write(m_adios_file, "temperature", t);
-        }
+        adios_write(m_adios_file, "temperature", t);
 
         adios_close (m_adios_file);
 
diff --git a/examples/C/global-array/adios_global_no_xml.c b/examples/C/global-array/adios_global_no_xml.c
index 2001460..4475d66 100644
--- a/examples/C/global-array/adios_global_no_xml.c
+++ b/examples/C/global-array/adios_global_no_xml.c
@@ -39,9 +39,7 @@ int main (int argc, char ** argv)
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
-	int64_t     adios_handle;
 
 	MPI_Init (&argc, &argv);
 	MPI_Comm_rank (comm, &rank);
@@ -75,9 +73,11 @@ int main (int argc, char ** argv)
                         ,"", adios_integer
                         ,0, 0, 0);
    
-           adios_define_var (m_adios_group, "temperature"
+           int64_t varid;
+           varid = adios_define_var (m_adios_group, "temperature"
                         ,"", adios_double
                         ,"NX", "Global_bounds", "Offsets");
+           adios_set_transform (varid, "none");
         }
    
         adios_open (&m_adios_file, "restart", filename, "w", comm);
diff --git a/examples/C/global-array/adios_read_chunk.c b/examples/C/global-array/adios_read_chunk.c
index 124f39a..4fc3055 100644
--- a/examples/C/global-array/adios_read_chunk.c
+++ b/examples/C/global-array/adios_read_chunk.c
@@ -25,14 +25,16 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, i, j, datasize, if_any;
+    int         rank, size, i, datasize;
+    //int j;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP_AGGREGATE;
-    ADIOS_SELECTION * sel1, * sel2;
-    ADIOS_VARCHUNK * chunk = 0;
+    ADIOS_SELECTION * sel1;
+    //ADIOS_SELECTION * sel2;
+    //ADIOS_VARCHUNK * chunk = 0;
     void * data = NULL;
-    uint64_t start[2], count[2], npoints, * points;
+    uint64_t start[2], count[2]; 
+    //uint64_t npoints, * points;
    
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
@@ -56,7 +58,7 @@ int main (int argc, char ** argv)
         for (i = 0; i < varinfo->ndim; i++)
         {
             datasize *= varinfo->dims[i];
-            printf ("%lu", varinfo->dims[i]);
+            printf ("%llu", varinfo->dims[i]);
             if (i != varinfo->ndim - 1)
             {
                 printf (",");
diff --git a/examples/C/global-array/adios_read_global.c b/examples/C/global-array/adios_read_global.c
index 31838ee..aba6eda 100644
--- a/examples/C/global-array/adios_read_global.c
+++ b/examples/C/global-array/adios_read_global.c
@@ -25,13 +25,12 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i, j;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel;
     void * data = NULL;
-    uint64_t start[2], count[2], bytes_read = 0;
+    uint64_t start[2], count[2];
 
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
diff --git a/examples/C/global-array/adios_read_global_no_xml.c b/examples/C/global-array/adios_read_global_no_xml.c
index 1c5acb0..463c98d 100644
--- a/examples/C/global-array/adios_read_global_no_xml.c
+++ b/examples/C/global-array/adios_read_global_no_xml.c
@@ -26,14 +26,13 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i, j, npl, token;
     MPI_Comm    comm = MPI_COMM_WORLD;
     MPI_Status  status;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel;
     void * data = NULL;
-    uint64_t start[1], count[1], bytes_read = 0;
+    uint64_t start[1], count[1];
 
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
@@ -77,7 +76,7 @@ int main (int argc, char ** argv)
     printf (" ======== Rank %d ========== \n", rank);
     npl = 10;
     for (i = 0; i < slice_size; i+=npl) {
-        printf ("[%4.4d]  ", rank*slice_size+i);
+        printf ("[%4.4lld]  ", rank*slice_size+i);
         for (j= 0; j < npl; j++) {
             printf (" %6.6g", * ((double *)data + i + j));
         }
diff --git a/examples/C/global-array/adios_read_gpp.c b/examples/C/global-array/adios_read_gpp.c
index 5e1de1c..98ebc07 100644
--- a/examples/C/global-array/adios_read_gpp.c
+++ b/examples/C/global-array/adios_read_gpp.c
@@ -21,11 +21,10 @@ int main (int argc, char ** argv)
 	char        filename [256];
 	int         rank, size, i;
 	int         NX = 4096; 
-	double      t[NX], t1, t2;
+	double      t[NX];
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	ADIOS_FILE *fp;
 	ADIOS_SELECTION *s;
 
diff --git a/examples/C/global-array/adios_read_writeblock.c b/examples/C/global-array/adios_read_writeblock.c
index e01ec71..4649eee 100644
--- a/examples/C/global-array/adios_read_writeblock.c
+++ b/examples/C/global-array/adios_read_writeblock.c
@@ -25,13 +25,11 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i, j, datasize;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel;
     void * data = NULL;
-    uint64_t start[2], count[2], bytes_read = 0;
    
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
@@ -57,12 +55,12 @@ int main (int argc, char ** argv)
             printf ("start=");
             for (j = 0; j < varinfo->ndim; j++)
             {
-                printf ("%lu ", varinfo->blockinfo[i].start[j]);
+                printf ("%llu ", varinfo->blockinfo[i].start[j]);
             }
             printf ("count=");
             for (j = 0; j < varinfo->ndim; j++)
             {
-                printf ("%lu ", varinfo->blockinfo[i].count[j]);
+                printf ("%llu ", varinfo->blockinfo[i].count[j]);
             }
             printf ("\n");
         }
diff --git a/examples/C/global-array/no_xml_write_byid.c b/examples/C/global-array/no_xml_write_byid.c
index 212123b..2b6cbf9 100644
--- a/examples/C/global-array/no_xml_write_byid.c
+++ b/examples/C/global-array/no_xml_write_byid.c
@@ -40,9 +40,7 @@ int main (int argc, char ** argv)
         char g_str[100], o_str[100], l_str[100];
 
 	/* ADIOS variables declarations for matching gwrite_temperature.ch */
-	int         adios_err;
 	uint64_t    adios_groupsize, adios_totalsize;
-	int64_t     adios_handle;
 
 	MPI_Init (&argc, &argv);
 	MPI_Comm_rank (comm, &rank);
@@ -72,6 +70,7 @@ int main (int argc, char ** argv)
                                           ,"", adios_double
                                           ,l_str, g_str, o_str
                                           );
+            adios_set_transform (var_ids[i], "identity");
         }
    
         adios_open (&m_adios_file, "restart", filename, "w", comm);
diff --git a/examples/C/global-array/read_no_xml_write_byid.c b/examples/C/global-array/read_no_xml_write_byid.c
index a1fd5d4..c62cd6a 100644
--- a/examples/C/global-array/read_no_xml_write_byid.c
+++ b/examples/C/global-array/read_no_xml_write_byid.c
@@ -26,14 +26,13 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
     int         rank, size, i, j, npl, token;
     MPI_Comm    comm = MPI_COMM_WORLD;
     MPI_Status  status;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel;
     void * data = NULL;
-    uint64_t start[1], count[1], bytes_read = 0;
+    uint64_t start[1], count[1];
 
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
@@ -77,7 +76,7 @@ int main (int argc, char ** argv)
     printf (" ======== Rank %d ========== \n", rank);
     npl = 10;
     for (i = 0; i < slice_size; i+=npl) {
-        printf ("[%4.4d]  ", rank*slice_size+i);
+        printf ("[%4.4lld]  ", rank*slice_size+i);
         for (j= 0; j < npl; j++) {
             printf (" %6.6g", * ((double *)data + i + j));
         }
diff --git a/examples/C/manual/2_adios_write.c b/examples/C/manual/2_adios_write.c
index e3f66d0..fbc73c1 100644
--- a/examples/C/manual/2_adios_write.c
+++ b/examples/C/manual/2_adios_write.c
@@ -40,7 +40,6 @@ int main (int argc, char ** argv)
     int         i;
     
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
     MPI_Comm    comm =  MPI_COMM_WORLD;
diff --git a/examples/C/manual/3_adios_read.c b/examples/C/manual/3_adios_read.c
index bfafcc0..0cd0873 100644
--- a/examples/C/manual/3_adios_read.c
+++ b/examples/C/manual/3_adios_read.c
@@ -14,6 +14,7 @@
  *
  */
 #include <stdio.h>
+#include <string.h>
 #include "mpi.h"
 #include "adios.h"
 int main (int argc, char ** argv) 
@@ -26,7 +27,6 @@ int main (int argc, char ** argv)
     int         i;
     
     /* ADIOS variables declarations for matching gread_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize, adios_buf_size;
     int64_t     adios_handle;
     MPI_Comm    comm =  MPI_COMM_WORLD;
diff --git a/examples/C/manual/4_adios_nfiles.c b/examples/C/manual/4_adios_nfiles.c
index ed9c297..6ef108d 100644
--- a/examples/C/manual/4_adios_nfiles.c
+++ b/examples/C/manual/4_adios_nfiles.c
@@ -25,7 +25,6 @@ int main (int argc, char ** argv)
     int         i;
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
     int         color, key;
diff --git a/examples/C/manual/Makefile.in b/examples/C/manual/Makefile.in
index f48f6cf..f614750 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/manual/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -206,9 +209,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -275,6 +284,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/read_all/Makefile.in b/examples/C/read_all/Makefile.in
index af0bfb3..38a5b4a 100644
--- a/examples/C/read_all/Makefile.in
+++ b/examples/C/read_all/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/read_all/read_all.c b/examples/C/read_all/read_all.c
index 3410c57..cb3b98e 100644
--- a/examples/C/read_all/read_all.c
+++ b/examples/C/read_all/read_all.c
@@ -20,10 +20,8 @@ const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx);
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, gidx, i, j, k,l;
+    int         i, j, k, l, t;
     MPI_Comm    comm_dummy = 0;  /* MPI_Comm is defined through adios_read.h */
-    enum ADIOS_DATATYPES attr_type;
     void      * data = NULL;
     uint64_t    start[] = {0,0,0,0,0,0,0,0,0,0};
     uint64_t    count[10], bytes_read = 0;
@@ -60,9 +58,12 @@ int main (int argc, char ** argv)
                 printf(" = %s\n", value_to_string(v->type, v->value, 0));
             } else {
                 /* Arrays have to be read in from the file */
-                printf("[%d",v->dims[0]);
+                if (v->nsteps > 1) {
+                    printf(" %d*",v->nsteps);
+                }
+                printf("[%lld",v->dims[0]);
                 for (j = 1; j < v->ndim; j++)
-                    printf(", %d",v->dims[j]);
+                    printf(", %lld",v->dims[j]);
                 //printf("] = \n");
                 
                 if (v->type == adios_integer)
@@ -82,41 +83,44 @@ int main (int argc, char ** argv)
                     for (j = 0; j < v->ndim; j++) 
                         count[j] = v->dims[j];   
 
-                    sel = adios_selection_boundingbox (v->ndim, start, count);
-                    adios_schedule_read_byid (f, sel, i, 0, 1, data);
-                    adios_perform_reads (f, 1);
-
-                    if (bytes_read < 0) {
-                        printf ("%s\n", adios_errmsg());
-                    } else if (bytes_read > 1024*1024) {
-                        printf ("Too big to print\n");
-                    } else if (v->ndim == 1) {
-                        printf ("        [");
-                        for (j = 0; j < v->dims[0]; j++) 
-                            printf("%s ", value_to_string(v->type, data, j));
-                        printf ("]\n");
-                    } else if (v->ndim == 2) {
-                        for (j = 0; j < v->dims[0]; j++) {
-                            printf ("        row %d: [", j);
-                            for (k = 0; k < v->dims[1]; k++) 
-                                printf("%s ", value_to_string(v->type, data, j*v->dims[1] + k));
+                    for (t=0; t<v->nsteps; t++) {
+                        sel = adios_selection_boundingbox (v->ndim, start, count);
+                        adios_schedule_read_byid (f, sel, i, t, 1, data);
+                        adios_perform_reads (f, 1);
+
+                        printf("      Step %d:\n", t);
+                        if (bytes_read < 0) {
+                            printf ("%s\n", adios_errmsg());
+                        } else if (bytes_read > 1024*1024) {
+                            printf ("Too big to print\n");
+                        } else if (v->ndim == 1) {
+                            printf ("        [");
+                            for (j = 0; j < v->dims[0]; j++) 
+                                printf("%s ", value_to_string(v->type, data, j));
                             printf ("]\n");
-                        }
-                    } else if (v->ndim == 3) {
-                        for (j = 0; j < v->dims[0]; j++) {
-                            printf ("      block %d: \n", j);
-                            for (k = 0; k < v->dims[1]; k++) {
-                                printf ("        row %d: [", k);
-                                for (l = 0; l < v->dims[2]; l++) {
-                                    // NCSU ALACRITY-ADIOS - Fixed bug, k*v->dims[1] changed to  k*v->dims[2]
-                                    printf("%s ", value_to_string(v->type, data, j*v->dims[1]*v->dims[2] + k*v->dims[2] + l));
-                                }
+                        } else if (v->ndim == 2) {
+                            for (j = 0; j < v->dims[0]; j++) {
+                                printf ("        row %d: [", j);
+                                for (k = 0; k < v->dims[1]; k++) 
+                                    printf("%s ", value_to_string(v->type, data, j*v->dims[1] + k));
                                 printf ("]\n");
                             }
-                            printf ("\n");
+                        } else if (v->ndim == 3) {
+                            for (j = 0; j < v->dims[0]; j++) {
+                                printf ("      block %d: \n", j);
+                                for (k = 0; k < v->dims[1]; k++) {
+                                    printf ("        row %d: [", k);
+                                    for (l = 0; l < v->dims[2]; l++) {
+                                        // NCSU ALACRITY-ADIOS - Fixed bug, k*v->dims[1] changed to  k*v->dims[2]
+                                        printf("%s ", value_to_string(v->type, data, j*v->dims[1]*v->dims[2] + k*v->dims[2] + l));
+                                    }
+                                    printf ("]\n");
+                                }
+                                printf ("\n");
+                            }
+                        } else {
+                            printf ("    cannot print arrays with >3 dimensions\n");
                         }
-                    } else {
-                        printf ("    cannot print arrays with >3 dimensions\n");
                     }
                     free (data);
                 }
@@ -209,6 +213,9 @@ const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx)
             sprintf (s, "(%lg, %lg)", 
                     ((double *) data)[2*idx], ((double *) data)[2*idx+1]);
             break;
+        
+        case adios_unknown:
+            break;
     }
 
     return s;
diff --git a/examples/C/read_all/read_all_v1.c b/examples/C/read_all/read_all_v1.c
index 3bcb19d..dc3fb66 100644
--- a/examples/C/read_all/read_all_v1.c
+++ b/examples/C/read_all/read_all_v1.c
@@ -20,10 +20,8 @@ const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx);
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, gidx, i, j, k,l;
+    int         gidx, i, j, k,l;
     MPI_Comm    comm_dummy = 0;  /* MPI_Comm is defined through adios_read.h */
-    enum ADIOS_DATATYPES attr_type;
     void      * data = NULL;
     uint64_t    start[] = {0,0,0,0,0,0,0,0,0,0};
     uint64_t    count[10], bytes_read = 0;
@@ -67,9 +65,9 @@ int main (int argc, char ** argv)
                     printf(" = %s\n", value_to_string(v->type, v->value, 0));
                 } else {
                     /* Arrays have to be read in from the file */
-                    printf("[%d",v->dims[0]);
+                    printf("[%lld",v->dims[0]);
                     for (j = 1; j < v->ndim; j++)
-                        printf(", %d",v->dims[j]);
+                        printf(", %lld",v->dims[j]);
                     //printf("] = \n");
                     if (v->type == adios_integer)
                         printf("] = min=%d  max=%d  timedim=%d\n", (*(int*)v->gmin), (*(int*)v->gmax), v->timedim);
@@ -214,6 +212,9 @@ const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx)
             sprintf (s, "(%lg, %lg)", 
                     ((double *) data)[2*idx], ((double *) data)[2*idx+1]);
             break;
+
+        case adios_unknown:
+            break;
     }
 
     return s;
diff --git a/examples/C/scalars/Makefile.in b/examples/C/scalars/Makefile.in
index 1ca8cb0..ca869cc 100644
--- a/examples/C/scalars/Makefile.in
+++ b/examples/C/scalars/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -199,9 +202,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -268,6 +277,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/scalars/scalars_read.c b/examples/C/scalars/scalars_read.c
index 9596526..9d7a30d 100644
--- a/examples/C/scalars/scalars_read.c
+++ b/examples/C/scalars/scalars_read.c
@@ -29,9 +29,7 @@ typedef struct double_complex
 int main (int argc, char ** argv) 
 {
     char        filename [256];
-    int         rank, size, i;
-    int         NX = 10; 
-    double      t[NX];
+    int         rank;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel1=NULL;
diff --git a/examples/C/scalars/scalars_write.c b/examples/C/scalars/scalars_write.c
index 3ee25d2..f9ea043 100644
--- a/examples/C/scalars/scalars_write.c
+++ b/examples/C/scalars/scalars_write.c
@@ -29,12 +29,9 @@ typedef struct double_complex
 int main (int argc, char ** argv) 
 {
     char        filename [256];
-    int         rank, size, i;
-    int         NX = 10; 
-    double      t[NX];
+    int         rank;
     MPI_Comm    comm = MPI_COMM_WORLD;
 
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
@@ -62,6 +59,7 @@ int main (int argc, char ** argv)
     v13.i = 11.0;
 
     MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
 
     strcpy (filename, "scalars.bp");
 
diff --git a/examples/C/schema/CMakeLists.txt b/examples/C/schema/CMakeLists.txt
index 496d1c4..665135b 100644
--- a/examples/C/schema/CMakeLists.txt
+++ b/examples/C/schema/CMakeLists.txt
@@ -18,6 +18,17 @@ target_link_libraries(tri2d adios ${ADIOSLIB_LDADD})
 add_executable(triangle2d triangle2d.c)
 target_link_libraries(triangle2d adios ${ADIOSLIB_LDADD})
 
+add_executable(uniform2d_noxml uniform2d_noxml.c)
+target_link_libraries(uniform2d_noxml adios ${ADIOSLIB_LDADD})
+
+add_executable(rectilinear2d_noxml rectilinear2d_noxml.c)
+target_link_libraries(rectilinear2d_noxml adios ${ADIOSLIB_LDADD})
+
+add_executable(structured2d_noxml structured2d_noxml.c)
+target_link_libraries(structured2d_noxml adios ${ADIOSLIB_LDADD})
+
+add_executable(tri2d_noxml tri2d_noxml.c)
+target_link_libraries(tri2d_noxml adios ${ADIOSLIB_LDADD})
 
 set (PROGS uniform2d rectilinear2d structured2d tri2d triangle2d)
 foreach (PROG ${PROGS} )
diff --git a/examples/C/schema/Makefile.am b/examples/C/schema/Makefile.am
index ad4fb5d..9cd3f38 100644
--- a/examples/C/schema/Makefile.am
+++ b/examples/C/schema/Makefile.am
@@ -6,7 +6,7 @@ AUTOMAKE_OPTIONS = no-dependencies
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
-noinst_PROGRAMS = uniform2d rectilinear2d structured2d tri2d triangle2d
+noinst_PROGRAMS = uniform2d rectilinear2d structured2d tri2d triangle2d uniform2d_noxml rectilinear2d_noxml structured2d_noxml tri2d_noxml
 
 uniform2d_LDADD = $(top_builddir)/src/libadios.a
 uniform2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
@@ -32,6 +32,22 @@ triangle2d_LDADD = $(top_builddir)/src/libadios.a
 triangle2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 triangle2d_LDADD += $(ADIOSLIB_LDADD)
 
+uniform2d_noxml_LDADD = $(top_builddir)/src/libadios.a
+uniform2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+uniform2d_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+rectilinear2d_noxml_LDADD = $(top_builddir)/src/libadios.a
+rectilinear2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+structured2d_noxml_LDADD = $(top_builddir)/src/libadios.a
+structured2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_noxml_LDADD += $(ADIOSLIB_LDADD)
+
+tri2d_noxml_LDADD = $(top_builddir)/src/libadios.a
+tri2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_noxml_LDADD += $(ADIOSLIB_LDADD)
+
 CLEANFILES = *.bp
 CC=$(MPICC)
 EXTRA_DIST = uniform2d.xml uniform2d.readme uniform2d.png \
diff --git a/examples/C/schema/Makefile.in b/examples/C/schema/Makefile.in
index 7e4ee13..7fb9c4f 100644
--- a/examples/C/schema/Makefile.in
+++ b/examples/C/schema/Makefile.in
@@ -35,7 +35,9 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = uniform2d$(EXEEXT) rectilinear2d$(EXEEXT) \
-	structured2d$(EXEEXT) tri2d$(EXEEXT) triangle2d$(EXEEXT)
+	structured2d$(EXEEXT) tri2d$(EXEEXT) triangle2d$(EXEEXT) \
+	uniform2d_noxml$(EXEEXT) rectilinear2d_noxml$(EXEEXT) \
+	structured2d_noxml$(EXEEXT) tri2d_noxml$(EXEEXT)
 subdir = examples/C/schema
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -50,7 +52,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +65,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -83,6 +88,13 @@ rectilinear2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 rectilinear2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(rectilinear2d_LDFLAGS) $(LDFLAGS) -o $@
+rectilinear2d_noxml_SOURCES = rectilinear2d_noxml.c
+rectilinear2d_noxml_OBJECTS = rectilinear2d_noxml.$(OBJEXT)
+rectilinear2d_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+rectilinear2d_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(rectilinear2d_noxml_LDFLAGS) $(LDFLAGS) -o $@
 am_structured2d_OBJECTS = structured2d.$(OBJEXT)
 structured2d_OBJECTS = $(am_structured2d_OBJECTS)
 structured2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -90,6 +102,13 @@ structured2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 structured2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(structured2d_LDFLAGS) $(LDFLAGS) -o $@
+structured2d_noxml_SOURCES = structured2d_noxml.c
+structured2d_noxml_OBJECTS = structured2d_noxml.$(OBJEXT)
+structured2d_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+structured2d_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(structured2d_noxml_LDFLAGS) $(LDFLAGS) -o $@
 am_tri2d_OBJECTS = tri2d.$(OBJEXT)
 tri2d_OBJECTS = $(am_tri2d_OBJECTS)
 tri2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -97,6 +116,13 @@ tri2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 tri2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(tri2d_LDFLAGS) \
 	$(LDFLAGS) -o $@
+tri2d_noxml_SOURCES = tri2d_noxml.c
+tri2d_noxml_OBJECTS = tri2d_noxml.$(OBJEXT)
+tri2d_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+tri2d_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(tri2d_noxml_LDFLAGS) $(LDFLAGS) -o $@
 am_triangle2d_OBJECTS = triangle2d.$(OBJEXT)
 triangle2d_OBJECTS = $(am_triangle2d_OBJECTS)
 triangle2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -111,6 +137,13 @@ uniform2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 uniform2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(uniform2d_LDFLAGS) $(LDFLAGS) -o $@
+uniform2d_noxml_SOURCES = uniform2d_noxml.c
+uniform2d_noxml_OBJECTS = uniform2d_noxml.$(OBJEXT)
+uniform2d_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+uniform2d_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(uniform2d_noxml_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -123,10 +156,14 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(rectilinear2d_SOURCES) $(structured2d_SOURCES) \
-	$(tri2d_SOURCES) $(triangle2d_SOURCES) uniform2d.c
-DIST_SOURCES = $(rectilinear2d_SOURCES) $(structured2d_SOURCES) \
-	$(tri2d_SOURCES) $(triangle2d_SOURCES) uniform2d.c
+SOURCES = $(rectilinear2d_SOURCES) rectilinear2d_noxml.c \
+	$(structured2d_SOURCES) structured2d_noxml.c $(tri2d_SOURCES) \
+	tri2d_noxml.c $(triangle2d_SOURCES) uniform2d.c \
+	uniform2d_noxml.c
+DIST_SOURCES = $(rectilinear2d_SOURCES) rectilinear2d_noxml.c \
+	$(structured2d_SOURCES) structured2d_noxml.c $(tri2d_SOURCES) \
+	tri2d_noxml.c $(triangle2d_SOURCES) uniform2d.c \
+	uniform2d_noxml.c
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -213,9 +250,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -282,6 +325,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -385,6 +432,17 @@ tri2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 triangle2d_SOURCES = triangle2d.c
 triangle2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 triangle2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+uniform2d_noxml_LDADD = $(top_builddir)/src/libadios.a \
+	$(ADIOSLIB_LDADD)
+uniform2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_noxml_LDADD = $(top_builddir)/src/libadios.a \
+	$(ADIOSLIB_LDADD)
+rectilinear2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_noxml_LDADD = $(top_builddir)/src/libadios.a \
+	$(ADIOSLIB_LDADD)
+structured2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+tri2d_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
 EXTRA_DIST = uniform2d.xml uniform2d.readme uniform2d.png \
 	rectilinear2d.xml rectilinear2d.readme rectilinear2d.png \
@@ -438,18 +496,30 @@ clean-noinstPROGRAMS:
 rectilinear2d$(EXEEXT): $(rectilinear2d_OBJECTS) $(rectilinear2d_DEPENDENCIES) 
 	@rm -f rectilinear2d$(EXEEXT)
 	$(rectilinear2d_LINK) $(rectilinear2d_OBJECTS) $(rectilinear2d_LDADD) $(LIBS)
+rectilinear2d_noxml$(EXEEXT): $(rectilinear2d_noxml_OBJECTS) $(rectilinear2d_noxml_DEPENDENCIES) 
+	@rm -f rectilinear2d_noxml$(EXEEXT)
+	$(rectilinear2d_noxml_LINK) $(rectilinear2d_noxml_OBJECTS) $(rectilinear2d_noxml_LDADD) $(LIBS)
 structured2d$(EXEEXT): $(structured2d_OBJECTS) $(structured2d_DEPENDENCIES) 
 	@rm -f structured2d$(EXEEXT)
 	$(structured2d_LINK) $(structured2d_OBJECTS) $(structured2d_LDADD) $(LIBS)
+structured2d_noxml$(EXEEXT): $(structured2d_noxml_OBJECTS) $(structured2d_noxml_DEPENDENCIES) 
+	@rm -f structured2d_noxml$(EXEEXT)
+	$(structured2d_noxml_LINK) $(structured2d_noxml_OBJECTS) $(structured2d_noxml_LDADD) $(LIBS)
 tri2d$(EXEEXT): $(tri2d_OBJECTS) $(tri2d_DEPENDENCIES) 
 	@rm -f tri2d$(EXEEXT)
 	$(tri2d_LINK) $(tri2d_OBJECTS) $(tri2d_LDADD) $(LIBS)
+tri2d_noxml$(EXEEXT): $(tri2d_noxml_OBJECTS) $(tri2d_noxml_DEPENDENCIES) 
+	@rm -f tri2d_noxml$(EXEEXT)
+	$(tri2d_noxml_LINK) $(tri2d_noxml_OBJECTS) $(tri2d_noxml_LDADD) $(LIBS)
 triangle2d$(EXEEXT): $(triangle2d_OBJECTS) $(triangle2d_DEPENDENCIES) 
 	@rm -f triangle2d$(EXEEXT)
 	$(triangle2d_LINK) $(triangle2d_OBJECTS) $(triangle2d_LDADD) $(LIBS)
 uniform2d$(EXEEXT): $(uniform2d_OBJECTS) $(uniform2d_DEPENDENCIES) 
 	@rm -f uniform2d$(EXEEXT)
 	$(uniform2d_LINK) $(uniform2d_OBJECTS) $(uniform2d_LDADD) $(LIBS)
+uniform2d_noxml$(EXEEXT): $(uniform2d_noxml_OBJECTS) $(uniform2d_noxml_DEPENDENCIES) 
+	@rm -f uniform2d_noxml$(EXEEXT)
+	$(uniform2d_noxml_LINK) $(uniform2d_noxml_OBJECTS) $(uniform2d_noxml_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/examples/C/schema/rectilinear2d.c b/examples/C/schema/rectilinear2d.c
index e25e204..165510e 100644
--- a/examples/C/schema/rectilinear2d.c
+++ b/examples/C/schema/rectilinear2d.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -35,8 +34,6 @@ void printUsage(char *prgname)
 
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
@@ -77,7 +74,6 @@ int main (int argc, char ** argv )
     int         i,j;
   
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/schema/rectilinear2d.readme b/examples/C/schema/rectilinear2d.readme
index eeef7b5..757d61c 100644
--- a/examples/C/schema/rectilinear2d.readme
+++ b/examples/C/schema/rectilinear2d.readme
@@ -22,6 +22,8 @@ data is data on the points (value = rank)
 1. Run the writer 
 =================
 $ mpirun -np 12 ./rectilinear2d 4 3
+or
+$ mpirun -np 12 ./rectilinear2d_noxml 4 3
 
 2. Check the output
 ===================
diff --git a/examples/C/schema/rectilinear2d.c b/examples/C/schema/rectilinear2d_noxml.c
similarity index 61%
copy from examples/C/schema/rectilinear2d.c
copy to examples/C/schema/rectilinear2d_noxml.c
index e25e204..8f7d732 100644
--- a/examples/C/schema/rectilinear2d.c
+++ b/examples/C/schema/rectilinear2d_noxml.c
@@ -5,17 +5,17 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-/* ADIOS C Example: write variables along with an unstructured mesh. 
+/* ADIOS C Example: write variables along with an rectilinear mesh. 
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include "mpi.h"
-#include "adios.h"
+#include "public/adios.h"
+#include "public/adios_types.h"
 
 //will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
 char   npx_str[256];       // # of procs in x dim (string value)
@@ -33,24 +33,23 @@ void printUsage(char *prgname)
         ,prgname);
 }
 
+
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
     }
 
     strncpy(npx_str, argv[1], sizeof(npx_str));
-    strncpy(npy_str, argv[2], sizeof(npy_str));  
+    strncpy(npy_str, argv[2], sizeof(npy_str));
 
     npx = atoi(npx_str);
     npy = atoi(npy_str);
 
     if (npx*npy != nproc) {
         printf ("ERROR: Product of decomposition numbers in X and Y dimension %d != number of processes %d\n", npx*npy, nproc);
-        printUsage (argv[0]);
+        printUsage(argv[0]);
         return 1;
     }
 
@@ -58,13 +57,12 @@ int processArgs(int argc, char ** argv)
 }
 
 
-
-int main (int argc, char ** argv ) 
+int main (int argc, char ** argv) 
 {
     MPI_Comm    comm = MPI_COMM_WORLD;
     int         rank;
     int         ndx, ndy;             // size of array per processor
-    double      *data;
+    double      * data;
 
     double      *X;                   //X coordinate
     double      *Y;                   //Y coordinate
@@ -75,9 +73,8 @@ int main (int argc, char ** argv )
     int         nx_global, ny_global; //global address
     int         posx, posy;           // position index in the array
     int         i,j;
-  
-    /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
+
+    int64_t     m_adios_group;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
@@ -88,7 +85,8 @@ int main (int argc, char ** argv )
     if (processArgs(argc, argv)) {
         return 1;
     }
-    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+
+    //will work with each core writing ndx = 65, ndy = 129, (65*4,129*3) global
     ndx = 65;
     ndy = 129;
 
@@ -107,22 +105,65 @@ int main (int argc, char ** argv )
         for( j = 0; j < ndy; j++)
             data[i*ndy + j] = 1.0*rank;
 
-    X = malloc (ndx * sizeof(double)); 
+    X = malloc (ndx * sizeof(double));
     for( i = 0; i < ndx; i++ )
         //X[i] = 0.1*i*i+ndx*posx; 
-        X[i] = 0.1*(i+offs_x)*(i+offs_x); 
+        X[i] = 0.1*(i+offs_x)*(i+offs_x);
 
     Y = malloc (ndy * sizeof(double));
     for( i = 0; i < ndy; i++ )
         //Y[i] = 0.1*i*i+ndx*posy;
         Y[i] = 0.1*(i+offs_y)*(i+offs_y);
-
-
-    adios_init ("rectilinear2d.xml", comm);
-    adios_open (&adios_handle, "rectilinear2d", "rectilinear2d.bp", "w", comm);
+   
+    char * schema_version = "1.1";
+    char * dimemsions = "nx_global,ny_global";
+ 
+	adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 50);
+
+    adios_declare_group (&m_adios_group, "rectilinear2d", "", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "", "");
+
+    adios_define_var (m_adios_group, "nx_global"
+			,"", adios_integer
+			,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_global"
+            ,"", adios_integer
+            ,0, 0, 0);
+    adios_define_var (m_adios_group, "nproc"
+                ,"", adios_integer                
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_x"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_y"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "nx_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "X"
+                    ,"", adios_double
+                    ,"nx_local", "nx_global", "offs_x");
+    adios_define_var (m_adios_group, "Y"
+                    ,"", adios_double
+                    ,"ny_local", "ny_global", "offs_y");
+    adios_define_var (m_adios_group, "data"
+                    ,"", adios_double
+                    ,"nx_local,ny_local", "nx_global,ny_global", "offs_x,offs_y");
+
+    adios_define_schema_version (m_adios_group, schema_version);
+    adios_define_mesh_rectilinear (dimemsions, "X,Y", "2", m_adios_group, "rectilinearmesh");
+    adios_define_mesh_timevarying ("no", m_adios_group, "rectilinearmesh");
+    adios_define_var_mesh (m_adios_group, "data", "rectilinearmesh");
+    adios_define_var_centering (m_adios_group, "data", "point");
+    adios_open (&adios_handle, "rectilinear2d", "rectilinear2d_noxml.bp", "w", comm);
 
     adios_groupsize = 7*sizeof(int) \
-	+ sizeof(double) * (nx_local*ny_local) \
+    + sizeof(double) * (nx_local*ny_local) \
     + sizeof(double) * (nx_local) \
     + sizeof(double) * (ny_local);
 
@@ -136,7 +177,7 @@ int main (int argc, char ** argv )
     adios_write (adios_handle, "ny_local", &ny_local);
     if( rank < npx ) {
         adios_write (adios_handle, "X", X);
-    }   
+    }
     //printf ("rank %d: check if to print Y, rank%%npx=%d  offs_y=%d\n", rank, rank%npx, offs_y);
     if( rank % npx == 0 )
     {
@@ -151,8 +192,9 @@ int main (int argc, char ** argv )
     free (data);
     free (X);
     free (Y);
-    adios_finalize (rank);
 
-    MPI_Finalize ();
-    return 0;
+	adios_finalize (rank);
+
+	MPI_Finalize ();
+	return 0;
 }
diff --git a/examples/C/schema/structured2d.c b/examples/C/schema/structured2d.c
index fe78a54..69fb687 100644
--- a/examples/C/schema/structured2d.c
+++ b/examples/C/schema/structured2d.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -35,8 +34,6 @@ void printUsage(char *prgname)
 
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
@@ -77,7 +74,6 @@ int main (int argc, char ** argv )
     int         i,j;
   
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/schema/structured2d.readme b/examples/C/schema/structured2d.readme
index c6b25fa..11ebbc1 100644
--- a/examples/C/schema/structured2d.readme
+++ b/examples/C/schema/structured2d.readme
@@ -22,7 +22,8 @@ data is data on the points (value = rank)
 1. Run the writer 
 =================
 $ mpirun -np 12 ./structured2d 4 3
-
+or
+$ mpirun -np 12 ./structured2d_noxml 4 3
 2. Check the output
 ===================
   integer  /nproc      scalar = 12 
diff --git a/examples/C/schema/structured2d.c b/examples/C/schema/structured2d_noxml.c
similarity index 62%
copy from examples/C/schema/structured2d.c
copy to examples/C/schema/structured2d_noxml.c
index fe78a54..cec5148 100644
--- a/examples/C/schema/structured2d.c
+++ b/examples/C/schema/structured2d_noxml.c
@@ -5,17 +5,17 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-/* ADIOS C Example: write variables along with an unstructured mesh. 
+/* ADIOS C Example: write variables along with an rectilinear mesh. 
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include "mpi.h"
-#include "adios.h"
+#include "public/adios.h"
+#include "public/adios_types.h"
 
 //will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
 char   npx_str[256];       // # of procs in x dim (string value)
@@ -33,17 +33,16 @@ void printUsage(char *prgname)
         ,prgname);
 }
 
+
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
     }
 
     strncpy(npx_str, argv[1], sizeof(npx_str));
-    strncpy(npy_str, argv[2], sizeof(npy_str));  
+    strncpy(npy_str, argv[2], sizeof(npy_str));
 
     npx = atoi(npx_str);
     npy = atoi(npy_str);
@@ -58,13 +57,12 @@ int processArgs(int argc, char ** argv)
 }
 
 
-
-int main (int argc, char ** argv ) 
+int main (int argc, char ** argv) 
 {
     MPI_Comm    comm = MPI_COMM_WORLD;
     int         rank;
     int         ndx, ndy;             // size of array per processor
-    double      *data;
+    double      * data;
 
     double      *X;                   //X coordinate
     double      *Y;                   //Y coordinate
@@ -75,9 +73,8 @@ int main (int argc, char ** argv )
     int         nx_global, ny_global; //global address
     int         posx, posy;           // position index in the array
     int         i,j;
-  
-    /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
+
+    int64_t     m_adios_group;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
@@ -88,7 +85,8 @@ int main (int argc, char ** argv )
     if (processArgs(argc, argv)) {
         return 1;
     }
-    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+
+    //will work with each core writing ndx = 65, ndy = 129, (65*4,129*3) global
     ndx = 65;
     ndy = 129;
 
@@ -107,7 +105,6 @@ int main (int argc, char ** argv )
         for( j = 0; j < ndy; j++)
             data[i*ndy + j] = 1.0*rank;
 
-
     X = malloc (ndx * ndy * sizeof(double));
     for( i = 0; i < ndx; i++ )
         for( j = 0; j < ndy; j++)
@@ -118,11 +115,57 @@ int main (int argc, char ** argv )
     for( i = 0; i < ndx; i++ )
         for( j = 0; j < ndy; j++)
             Y[i*ndy + j] = offs_y + ndy*j/ndy;
+  
+    char * schema_version = "1.1";
+    char * dimemsions = "nx_global,ny_global";
+ 
+	adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 50);
+
+    adios_declare_group (&m_adios_group, "structured2d", "", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "", "");
+
+    adios_define_var (m_adios_group, "nx_global"
+			,"", adios_integer
+			,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_global"
+            ,"", adios_integer
+            ,0, 0, 0);
+    adios_define_var (m_adios_group, "nproc"
+                ,"", adios_integer                
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_x"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_y"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "nx_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "X"
+                    ,"", adios_double
+                    ,"nx_local,ny_local", "nx_global,ny_global", "offs_x,offs_y");
+    adios_define_var (m_adios_group, "Y"
+                    ,"", adios_double
+                    ,"nx_local,ny_local", "nx_global,ny_global", "offs_x,offs_y");
+    adios_define_var (m_adios_group, "data"
+                    ,"", adios_double
+                    ,"nx_local,ny_local", "nx_global,ny_global", "offs_x,offs_y");
+
+    adios_define_schema_version (m_adios_group, schema_version);
+    adios_define_mesh_structured (dimemsions, "X,Y", "2", m_adios_group, "structuredmesh");
+    adios_define_mesh_timevarying ("no", m_adios_group, "structuredmesh");
+    adios_define_var_mesh (m_adios_group, "data", "structuredmesh");
+    adios_define_var_centering (m_adios_group, "data", "point");
+
+    adios_open (&adios_handle, "structured2d", "structured2d_noxml.bp", "w", comm);
 
-    adios_init ("structured2d.xml", comm);
-    adios_open (&adios_handle, "structured2d", "structured2d.bp", "w", comm);
     adios_groupsize = 7*sizeof(int) \
-	+ 3 * sizeof(double) * (nx_local*ny_local);
+    + 3*sizeof(double) * (nx_local*ny_local);
 
     adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
     adios_write (adios_handle, "nproc", &nproc);
@@ -143,8 +186,9 @@ int main (int argc, char ** argv )
     free (data);
     free (X);
     free (Y);
-    adios_finalize (rank);
 
-    MPI_Finalize ();
-    return 0;
+	adios_finalize (rank);
+
+	MPI_Finalize ();
+	return 0;
 }
diff --git a/examples/C/schema/tri2d.c b/examples/C/schema/tri2d.c
index d440238..a5b7948 100644
--- a/examples/C/schema/tri2d.c
+++ b/examples/C/schema/tri2d.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -35,8 +34,6 @@ void printUsage(char *prgname)
 
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
@@ -78,7 +75,6 @@ int main (int argc, char ** argv )
     int         i,j;
   
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/schema/tri2d.readme b/examples/C/schema/tri2d.readme
index 68df051..f5483e2 100644
--- a/examples/C/schema/tri2d.readme
+++ b/examples/C/schema/tri2d.readme
@@ -22,6 +22,8 @@ data is data on the points (value = rank)
 1. Run the writer 
 =================
 $ mpirun -np 12 ./tri2d 4 3
+or
+$ mpirun -np 12 ./tri2d_noxml 4 3
 
 2. Check the output
 ===================
diff --git a/examples/C/schema/tri2d.c b/examples/C/schema/tri2d_noxml.c
similarity index 70%
copy from examples/C/schema/tri2d.c
copy to examples/C/schema/tri2d_noxml.c
index d440238..361e434 100644
--- a/examples/C/schema/tri2d.c
+++ b/examples/C/schema/tri2d_noxml.c
@@ -5,17 +5,17 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-/* ADIOS C Example: write variables along with an unstructured mesh. 
+/* ADIOS C Example: write variables along with an rectilinear mesh. 
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include "mpi.h"
-#include "adios.h"
+#include "public/adios.h"
+#include "public/adios_types.h"
 
 //will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
 char   npx_str[256];       // # of procs in x dim (string value)
@@ -33,17 +33,16 @@ void printUsage(char *prgname)
         ,prgname);
 }
 
+
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
     }
 
     strncpy(npx_str, argv[1], sizeof(npx_str));
-    strncpy(npy_str, argv[2], sizeof(npy_str));  
+    strncpy(npy_str, argv[2], sizeof(npy_str));
 
     npx = atoi(npx_str);
     npy = atoi(npy_str);
@@ -58,8 +57,7 @@ int processArgs(int argc, char ** argv)
 }
 
 
-
-int main (int argc, char ** argv ) 
+int main (int argc, char ** argv) 
 {
     MPI_Comm    comm = MPI_COMM_WORLD;
     int         npoints, num_cells;
@@ -76,9 +74,8 @@ int main (int argc, char ** argv )
     int         nx_global, ny_global; //global address
     int         posx, posy;           // position index in the array
     int         i,j;
-  
-    /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
+
+    int64_t     m_adios_group;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
@@ -89,7 +86,8 @@ int main (int argc, char ** argv )
     if (processArgs(argc, argv)) {
         return 1;
     }
-    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+
+    //will work with each core writing ndx = 65, ndy = 129, (65*4,129*3) global
     ndx = 4;
     ndy = 3;
 
@@ -150,7 +148,7 @@ int main (int argc, char ** argv )
     int lc;
     int oc;
 
-    if( posx == npx-1 && posy < npy-1 )  
+    if( posx == npx-1 && posy < npy-1 )
     {
         lc = (ndx-1)*ndy*2;
         oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2;
@@ -168,17 +166,11 @@ int main (int argc, char ** argv )
                 {
                     cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+nx_global*ndy+(i+1)*ndy;
                     cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+(i+1)*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;
-/*                    if(rank == 3){
-                        printf("i = %d, j = %d\n", i, j);
-                        printf("op = %d, p = %d\n", op, p);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+p+ndy, 6*p+2, op+nx_global*ndy+(i+1)*ndy);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+nx_global*ndy+(i+1)*ndy, 6*p+5, op+nx_global*ndy+i*ndy);
-                    }*/
-                } 
+                }
             }
         }
     }
-    else if( posy == npy-1 && posx < npx-1 ) 
+    else if( posy == npy-1 && posx < npx-1 )
     {
         lc = ndx*(ndy-1)*2;
         oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2;
@@ -191,21 +183,11 @@ int main (int argc, char ** argv )
                 {
                     cells[6*p+0] = op+p1; cells[6*p+1] = op+p1+ndy; cells[6*p+2] = op+p1+ndy+1;
                     cells[6*p+3] = op+p1; cells[6*p+4] =op+p1+ndy+1; cells[6*p+5] = op+p1+1;
-/*                    if(rank == 8){
-                        printf("i = %d, j = %d\n", i, j);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+p+ndy, 6*p+2, op+p+ndy+1);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+p+ndy+1, 6*p+5, op+p+1);
-                    }*/
                 }
                 else   //extend in x direction only
                 {
                     cells[6*p+0] = op+p1; cells[6*p+1] = op+ndx*ndy+j; cells[6*p+2] = op+ndx*ndy+j+1;
                     cells[6*p+3] = op+p1; cells[6*p+4] = op+ndx*ndy+j+1; cells[6*p+5] = op+p1+1;
-/*                    if(rank == 8){
-                        printf("i = %d, j = %d\n", i, j);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+ndx*ndy+j, 6*p+2, op+ndx*ndy+j+1);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+ndx*ndy+j+1, 6*p+5, op+p+1);
-                    }*/
                 }
             }
     }
@@ -220,11 +202,6 @@ int main (int argc, char ** argv )
                 int p1 = i*ndy+j;
                 cells[6*p+0] = op+p1; cells[6*p+1] = op+p1+ndy; cells[6*p+2] = op+p1+ndy+1;
                 cells[6*p+3] = op+p1; cells[6*p+4] =op+p1+ndy+1; cells[6*p+5] = op+p1+1;
-/*                if(rank == 11){
-                        printf("i = %d, j = %d\n", i, j);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+ndx*ndy+j, 6*p+2, op+ndx*ndy+j+1);
-                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+ndx*ndy+j+1, 6*p+5, op+p+1);
-                    }*/
             }
     }
     else
@@ -248,7 +225,7 @@ int main (int argc, char ** argv )
                 else if( i<ndx-1 && j==ndy-1 )
                 {
                     cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+nx_global*ndy+(i+1)*ndy;
-                    cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+(i+1)*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;    
+                    cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+(i+1)*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;
                 }
                 else // inter corner point
                 {
@@ -259,14 +236,88 @@ int main (int argc, char ** argv )
     }
 
     for (i=0; i<lc; i++)
-        C[i] = 1.0*rank;
-//        C[i] = rank*lc+i;          //????????????????????
+        C[i] = 1.0*rank;    
+ 
+    char * schema_version = "1.1";
+    char * dimemsions = "nx_global,ny_global";
+ 
+	adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 50);
+
+    adios_declare_group (&m_adios_group, "tri2d", "", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "", "");
 
+    adios_define_var (m_adios_group, "nx_global"
+			,"", adios_integer
+			,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_global"
+            ,"", adios_integer
+            ,0, 0, 0);
+    adios_define_var (m_adios_group, "nproc"
+                ,"", adios_integer                
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "npoints"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "num_cells"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_x"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_y"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "nx_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "op"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "lp"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "oc"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "lc"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "points"
+                    ,"", adios_double
+                    ,"lp,2", "npoints,2", "op,0");
+    adios_define_var (m_adios_group, "cells"
+                    ,"", adios_integer
+                    ,"lc,3", "num_cells,3", "oc,0");
+    adios_define_var (m_adios_group, "N"
+                    ,"", adios_double
+                    ,"lp", "npoints", "op");
+    adios_define_var (m_adios_group, "C"
+                    ,"", adios_double
+                    ,"lc", "num_cells", "oc");
+
+    adios_define_attribute (m_adios_group, "description", "/nproc", adios_string, "Number of writers", "");
+    adios_define_attribute (m_adios_group, "description", "/npoints", adios_string, "Number of points", "");
+    adios_define_attribute (m_adios_group, "description", "/num_cells", adios_string, "Number of triangles", "");
+
+    adios_define_schema_version (m_adios_group, schema_version);
+    adios_define_mesh_unstructured ("points", "cells", "num_cells", "triangle", 0, "2", m_adios_group, "trimesh");
+    adios_define_mesh_timevarying ("no", m_adios_group, "trimesh");
+
+    adios_define_var_mesh (m_adios_group, "N", "trimesh");
+    adios_define_var_centering (m_adios_group, "N", "point");
+    adios_define_attribute (m_adios_group, "description", "/N", adios_string, "Node centered data", "");
+    adios_define_var_mesh (m_adios_group, "C", "trimesh");
+    adios_define_var_centering (m_adios_group, "C", "cell");
+    adios_define_attribute (m_adios_group, "description", "/C", adios_string, "Cell centered data", "");
+
+    adios_open (&adios_handle, "tri2d", "tri2d_noxml.bp", "w", comm);
 
-    adios_init ("tri2d.xml", comm);
-    adios_open (&adios_handle, "tri2d", "tri2d.bp", "w", comm);
     adios_groupsize = 13*sizeof(int) \
-	+ sizeof(double) * (lp) \
+    + sizeof(double) * (lp) \
     + sizeof(double) * (lc) \
     + sizeof(double) * (lp) * (2) \
     + sizeof(int) * (lc) * (3);
@@ -293,13 +344,14 @@ int main (int argc, char ** argv )
     adios_close (adios_handle);
 
     MPI_Barrier (comm);
+
     free (N);
     free (points);
     free (C);
     free (cells);
 
-//    adios_finalize (rank);
+	adios_finalize (rank);
 
-    MPI_Finalize ();
-    return 0;
+	MPI_Finalize ();
+	return 0;
 }
diff --git a/examples/C/schema/triangle2d.c b/examples/C/schema/triangle2d.c
index 385f853..cb4424e 100644
--- a/examples/C/schema/triangle2d.c
+++ b/examples/C/schema/triangle2d.c
@@ -18,11 +18,10 @@
 
 int main (int argc, char ** argv ) 
 {
-    int         rank, size, i, x, y;
+    int         rank, size, i, y;
     MPI_Comm    comm = MPI_COMM_WORLD;
 
     int         npoints, num_cells;
-    int         Nspace = 2;
     float       *points;
     int         *cells;
     double      *N; // node centered variable
@@ -30,7 +29,6 @@ int main (int argc, char ** argv )
 	
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/schema/uniform2d.c b/examples/C/schema/uniform2d.c
index 71324d2..e08981a 100644
--- a/examples/C/schema/uniform2d.c
+++ b/examples/C/schema/uniform2d.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -36,8 +35,6 @@ void printUsage(char *prgname)
 
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
@@ -80,7 +77,6 @@ int main (int argc, char ** argv )
     int         i,j;
   
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/schema/uniform2d.readme b/examples/C/schema/uniform2d.readme
index f22220c..0e15f50 100644
--- a/examples/C/schema/uniform2d.readme
+++ b/examples/C/schema/uniform2d.readme
@@ -19,6 +19,8 @@ data is data on the points (value = rank)
 1. Run the writer 
 =================
 $ mpirun -np 12 ./uniform2d 4 3
+or
+$ mpirun -np 12 ./uniform2d_noxml 4 3
 
 2. Check the output
 ===================
diff --git a/examples/C/schema/uniform2d.c b/examples/C/schema/uniform2d_noxml.c
similarity index 51%
copy from examples/C/schema/uniform2d.c
copy to examples/C/schema/uniform2d_noxml.c
index 71324d2..cade6ce 100644
--- a/examples/C/schema/uniform2d.c
+++ b/examples/C/schema/uniform2d_noxml.c
@@ -5,17 +5,17 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
-/* ADIOS C Example: write variables along with an unstructured mesh. 
+/* ADIOS C Example: write variables along with an uniform mesh. 
  */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include "mpi.h"
-#include "adios.h"
+#include "public/adios.h"
+#include "public/adios_types.h"
 
 //will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
 char   npx_str[256];       // # of procs in x dim (string value)
@@ -36,15 +36,13 @@ void printUsage(char *prgname)
 
 int processArgs(int argc, char ** argv)
 {
-    int i, j, nd, prod;
-    char *end;
     if (argc < 3) {
         printUsage (argv[0]);
         return 1;
     }
 
     strncpy(npx_str, argv[1], sizeof(npx_str));
-    strncpy(npy_str, argv[2], sizeof(npy_str));  
+    strncpy(npy_str, argv[2], sizeof(npy_str));
 
     npx = atoi(npx_str);
     npy = atoi(npy_str);
@@ -59,8 +57,7 @@ int processArgs(int argc, char ** argv)
 }
 
 
-
-int main (int argc, char ** argv ) 
+int main (int argc, char ** argv) 
 {
     MPI_Comm    comm = MPI_COMM_WORLD;
     int         rank;
@@ -78,9 +75,8 @@ int main (int argc, char ** argv )
     int         nx_global, ny_global; //global address
     int         posx, posy;           // position index in the array
     int         i,j;
-  
-    /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
+
+    int64_t     m_adios_group;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
@@ -106,16 +102,81 @@ int main (int argc, char ** argv )
     nx_global = npx * ndx;
     ny_global = npy * ndy;
 
+    char * schema_version = "1.1";
+    char * dimemsions = "nx_global,ny_global";
+    char * origin = "O1,O2";
+    char * spacing = "S1,S2";
+
     data = malloc (ndx * ndy * sizeof(double));
     for( i = 0; i < ndx; i++ )
         for( j = 0; j < ndy; j++)
             data[i*ndy + j] = 1.0*rank;
- 
-    adios_init ("uniform2d.xml", comm);
-    adios_open (&adios_handle, "uniform2d", "uniform2d.bp", "w", comm);
-
+    
+	adios_init_noxml (comm);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 50);
+
+    adios_declare_group (&m_adios_group, "uniform2d", "", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "", "");
+
+    adios_define_var (m_adios_group, "nx_global"
+			,"", adios_integer
+			,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_global"
+            ,"", adios_integer
+            ,0, 0, 0);
+    adios_define_var (m_adios_group, "nproc"
+                ,"", adios_integer                
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_x"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "offs_y"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "nx_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "ny_local"
+                ,"", adios_integer
+                ,0, 0, 0);
+    adios_define_var (m_adios_group, "O1"
+                    ,"", adios_integer
+                    ,0, 0, 0);
+    adios_define_var (m_adios_group, "O2"
+                    ,"", adios_integer
+                    ,0, 0, 0);
+    adios_define_var (m_adios_group, "S1"
+                    ,"", adios_integer
+                    ,0, 0, 0);
+    adios_define_var (m_adios_group, "S2"
+                    ,"", adios_integer
+                    ,0, 0, 0);
+    adios_define_var (m_adios_group, "data"
+                    ,"X/Y/Z", adios_double
+                    ,"nx_local,ny_local", "nx_global,ny_global", "offs_x,offs_y");
+
+    adios_define_schema_version (m_adios_group, schema_version);
+    adios_define_mesh_uniform (dimemsions, origin, spacing, 0, "2", m_adios_group, "uniformmesh");
+    adios_define_var_mesh (m_adios_group, "X/Y/Z/data", "uniformmesh");
+    adios_define_var_centering (m_adios_group, "X/Y/Z/data", "point");
+
+    //function test
+    adios_define_var_timesteps ("0,1,200",m_adios_group, "X/Y/Z/data");
+    adios_define_var_timescale ("0,0.01,10", m_adios_group, "X/Y/Z/data");
+    adios_define_var_timeseriesformat ("5", m_adios_group, "X/Y/Z/data");
+    adios_define_var_hyperslab ("0,1,32", m_adios_group, "X/Y/Z/data");
+
+//    adios_define_mesh_file (m_adios_group, "uniformmesh", "http://adios/xgc.mesh.bp");
+    adios_define_mesh_timevarying ("no", m_adios_group, "uniformmesh");
+    adios_define_mesh_group ("xgc.mesh", m_adios_group, "uniformmesh");
+    adios_define_mesh_timesteps ("0,1,200",m_adios_group, "uniformmesh");
+    adios_define_mesh_timescale ("0,0.01,10", m_adios_group, "uniformmesh");
+    adios_define_mesh_timeseriesformat ("5", m_adios_group, "uniformmesh");
+    //end of function test
+
+    adios_open (&adios_handle, "uniform2d", "uniform2d_noxml.bp", "w", comm);
     adios_groupsize = 7*sizeof(int) + 4*sizeof(double)\
-	+ sizeof(double) * (nx_local*ny_local) ;
+    + sizeof(double) * (nx_local*ny_local) ;
 
     adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
     adios_write (adios_handle, "nproc", &nproc);
@@ -129,15 +190,19 @@ int main (int argc, char ** argv )
     adios_write (adios_handle, "O2", &O2);
     adios_write (adios_handle, "S1", &S1);
     adios_write (adios_handle, "S2", &S2);
-    adios_write (adios_handle, "data", data);
+    adios_write (adios_handle, "X/Y/Z/data", data);
+
+//    adios_define_schema_version (m_adios_group, schema_version);
+//    adios_define_mesh_uniform (dimemsions, origin, spacing, "", m_adios_group, "uniformmesh");
 
     adios_close (adios_handle);
 
     MPI_Barrier (comm);
 
     free (data);
-    adios_finalize (rank);
 
-    MPI_Finalize ();
-    return 0;
+	adios_finalize (rank);
+
+	MPI_Finalize ();
+	return 0;
 }
diff --git a/examples/C/stat/Makefile.in b/examples/C/stat/Makefile.in
index b9701ac..d426644 100644
--- a/examples/C/stat/Makefile.in
+++ b/examples/C/stat/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/stat/stat_read.c b/examples/C/stat/stat_read.c
index dd949e2..e24961a 100644
--- a/examples/C/stat/stat_read.c
+++ b/examples/C/stat/stat_read.c
@@ -16,13 +16,10 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, i, j, k;
+    int         rank, size, i, j;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
 
-    uint64_t start[3], count[3], bytes_read = 0;
-
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
     MPI_Comm_size (comm, &size);
diff --git a/examples/C/stat/stat_write.c b/examples/C/stat/stat_write.c
index 1ad2d8b..efbd892 100644
--- a/examples/C/stat/stat_write.c
+++ b/examples/C/stat/stat_write.c
@@ -25,7 +25,6 @@ int main (int argc, char ** argv)
     struct double_complex c[NX];
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
     MPI_Comm    comm=MPI_COMM_WORLD;
diff --git a/examples/C/transforms/Makefile.in b/examples/C/transforms/Makefile.in
index 1754e03..f3bad0c 100644
--- a/examples/C/transforms/Makefile.in
+++ b/examples/C/transforms/Makefile.in
@@ -51,7 +51,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -62,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -223,9 +226,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -292,6 +301,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/C/transforms/adios_global.c b/examples/C/transforms/adios_global.c
index c4b7030..519d232 100644
--- a/examples/C/transforms/adios_global.c
+++ b/examples/C/transforms/adios_global.c
@@ -25,7 +25,6 @@ int main (int argc, char ** argv)
     MPI_Comm    comm = MPI_COMM_WORLD;
 
     /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/C/transforms/adios_read_all_3D.c b/examples/C/transforms/adios_read_all_3D.c
index 197faf0..90b3a58 100644
--- a/examples/C/transforms/adios_read_all_3D.c
+++ b/examples/C/transforms/adios_read_all_3D.c
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <time.h>
 #include "mpi.h"
 #include "adios_read.h"
 #include <stdint.h>
@@ -54,7 +55,7 @@ void read_points (char filename [], char varname [], uint32_t npoints)
 
     assert (varinfo);
 
-    uint32_t                nblocks = varinfo->sum_nblocks;
+    //uint32_t                nblocks = varinfo->sum_nblocks;
     uint32_t                i       = 0;
     uint32_t                j       = 0;
     uint32_t                t       = 0;
@@ -128,7 +129,7 @@ void read_bounding_box (char filename [], char varname [], uint64_t counts [], u
     assert (varinfo);
     adios_inq_var_blockinfo (f, varinfo);
 
-    uint32_t                nblocks = varinfo->sum_nblocks;
+    //uint32_t                nblocks = varinfo->sum_nblocks;
    
     uint32_t                i       = 0;
     uint32_t                j       = 0;
@@ -143,9 +144,9 @@ void read_bounding_box (char filename [], char varname [], uint64_t counts [], u
     // This code should only work for 3D data
     // assert (varinfo->ndim == 3);
 
-    printf ("%lu dimensions for %s are %s: ", ndim, filename, varname);
+    printf ("%u dimensions for %s are %s: ", ndim, filename, varname);
     for (i = 0; i < varinfo->ndim; i ++) {
-        printf ("%d ", varinfo->dims [i]);        
+        printf ("%lld ", varinfo->dims [i]);        
     }
     printf ("\n");
     printf ("Timesteps: %d\n", f->last_step + 1);
@@ -162,7 +163,7 @@ void read_bounding_box (char filename [], char varname [], uint64_t counts [], u
         npoints *= counts [j];
     }
 
-    printf ("npoints: %d\n", npoints);
+    printf ("npoints: %lld\n", npoints);
 
     data    = (double *) malloc (npoints * sizeof (double));
     starts  = (uint64_t *) malloc (varinfo->ndim * sizeof (uint64_t));
@@ -203,14 +204,14 @@ void read_bounding_box (char filename [], char varname [], uint64_t counts [], u
             starts [2] = 28;
             
             for (j = 0; j < ndim; j ++) {
-                printf ("%lu ", starts [j]);
+                printf ("%llu ", starts [j]);
             }
             printf ("\n");
 
             printf ("Counts: ");
             starts [0] = 0;
             for (j = 0; j < ndim; j ++) {
-                printf ("%lu ", counts [j]);
+                printf ("%llu ", counts [j]);
             }
             printf ("\n");
         #endif
diff --git a/examples/C/transforms/adios_read_points.c b/examples/C/transforms/adios_read_points.c
index a216261..84dfcbc 100644
--- a/examples/C/transforms/adios_read_points.c
+++ b/examples/C/transforms/adios_read_points.c
@@ -22,14 +22,12 @@
 
 int main (int argc, char ** argv)
 {
-    char        filename [256];
-    int         i, j, datasize, if_any, ndim;
+    int         i, datasize,  ndim;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
-    ADIOS_SELECTION * sel1, * sel2;
-    ADIOS_VARCHUNK * chunk = 0;
+    ADIOS_SELECTION * sel1;
     double * data = NULL;
-    uint64_t start[2], count[2], npoints, * points;
+    uint64_t npoints, * points;
 
     MPI_Init (&argc, &argv);
 #ifdef WITH_NCSU_TIMER
diff --git a/examples/C/transforms/adios_read_subv.c b/examples/C/transforms/adios_read_subv.c
index 74f3c48..cdd2b81 100644
--- a/examples/C/transforms/adios_read_subv.c
+++ b/examples/C/transforms/adios_read_subv.c
@@ -22,14 +22,12 @@
 
 int main (int argc, char ** argv)
 {
-    char        filename [256];
-    int         i, j, datasize, if_any;
+    int         i, j, datasize;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
-    ADIOS_SELECTION * sel1, * sel2;
-    ADIOS_VARCHUNK * chunk = 0;
+    ADIOS_SELECTION * sel1;
     double * data = NULL;
-    uint64_t start[2], count[2], npoints, * points;
+    uint64_t start[2], count[2];
 
     MPI_Init (&argc, &argv);
 #ifdef WITH_NCSU_TIMER
diff --git a/examples/C/transforms/adios_read_wb_subpg.c b/examples/C/transforms/adios_read_wb_subpg.c
index 86e2fc1..bba924a 100644
--- a/examples/C/transforms/adios_read_wb_subpg.c
+++ b/examples/C/transforms/adios_read_wb_subpg.c
@@ -22,14 +22,11 @@
 
 int main (int argc, char ** argv)
 {
-    char        filename [256];
-    int         i, j, datasize, if_any, ndim;
+    int         i, datasize, ndim;
     MPI_Comm    comm = MPI_COMM_WORLD;
     enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
-    ADIOS_SELECTION * wbsel, * sel2;
-    ADIOS_VARCHUNK * chunk = 0;
+    ADIOS_SELECTION * wbsel;
     double * data = NULL;
-    uint64_t start[2], count[2], npoints, * points;
 
     MPI_Init (&argc, &argv);
 #ifdef WITH_NCSU_TIMER
@@ -43,12 +40,10 @@ int main (int argc, char ** argv)
     adios_inq_var_blockinfo(f, varinfo);
     if (varinfo)
     {
-        int nranks;
-
         ndim = varinfo->ndim;
         assert(ndim == 2);
 
-        nranks = varinfo->dims[0];
+        //int nranks = varinfo->dims[0];
         assert(varinfo->dims[1] == 10);
 
         assert(varinfo->nsteps >= 1);
diff --git a/examples/C/transforms/adios_write_all_3D.c b/examples/C/transforms/adios_write_all_3D.c
index ebdf3ac..605ec02 100644
--- a/examples/C/transforms/adios_write_all_3D.c
+++ b/examples/C/transforms/adios_write_all_3D.c
@@ -14,6 +14,7 @@
 */
 #include <stdio.h>
 #include <string.h>
+#include <sys/types.h>
 #include "mpi.h"
 #include "adios.h"
 #include <stdint.h>
@@ -48,7 +49,6 @@ void adios_write_pg (char transform [], char input_dir [], uint8_t nvars, char *
     char        varfile [nvars][256];
     FILE        *fp [nvars];
 
-    int         adios_err;
     uint64_t    adios_groupsize, adios_totalsize;
     int64_t     adios_handle;
 
diff --git a/examples/Fortran/Makefile.in b/examples/Fortran/Makefile.in
index 50931d5..65b736d 100644
--- a/examples/Fortran/Makefile.in
+++ b/examples/Fortran/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/Fortran/arrays/Makefile.in b/examples/Fortran/arrays/Makefile.in
index 78cb9d1..0c0497d 100644
--- a/examples/Fortran/arrays/Makefile.in
+++ b/examples/Fortran/arrays/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -186,9 +189,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -255,6 +264,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/Fortran/global-array-time/Makefile.in b/examples/Fortran/global-array-time/Makefile.in
index e1d57b9..84ff018 100644
--- a/examples/Fortran/global-array-time/Makefile.in
+++ b/examples/Fortran/global-array-time/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -179,9 +182,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -248,6 +257,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/Fortran/global-array/Makefile.in b/examples/Fortran/global-array/Makefile.in
index a7ce745..501381f 100644
--- a/examples/Fortran/global-array/Makefile.in
+++ b/examples/Fortran/global-array/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -196,9 +199,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -265,6 +274,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/Fortran/global-array/no_xml_write_byid.F90 b/examples/Fortran/global-array/no_xml_write_byid.F90
index 9bfa9b6..23dcc03 100644
--- a/examples/Fortran/global-array/no_xml_write_byid.F90
+++ b/examples/Fortran/global-array/no_xml_write_byid.F90
@@ -53,6 +53,8 @@ program no_xml_write_byid
                           ,"", 6 &
                           ,local, global, offset, var_id1)
 
+    call adios_set_transform (var_id1, "identity", adios_err)
+
 
     write (offset, "(I3)") O + NX
 
@@ -61,6 +63,8 @@ program no_xml_write_byid
                           ,"", 6 &
                           ,local, global, offset, var_id2)
 
+    call adios_set_transform (var_id2, "identity", adios_err)
+
     call adios_open (adios_handle, "restart", filename, "w", comm, adios_err)
 
     adios_groupsize =  NX * 8 &
diff --git a/examples/Fortran/scalars/Makefile.in b/examples/Fortran/scalars/Makefile.in
index 163b0f7..e0767f6 100644
--- a/examples/Fortran/scalars/Makefile.in
+++ b/examples/Fortran/scalars/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -186,9 +189,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -255,6 +264,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 03baa51..f32a25c 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/examples/coupling/job b/examples/coupling/job
index b69bd0d..4cf7ca6 100755
--- a/examples/coupling/job
+++ b/examples/coupling/job
@@ -6,6 +6,10 @@
 ## On jaguarpf, you need size=48 (4 nodes * 12cores for 4 apruns)
 
 #cd $PBS_O_WORKDIR
+if [ `hostname | cut -c 1-4` == "sith" ]; then
+    source /etc/profile.d/modules.sh
+    module load szip
+fi
 
 # Number of writers (WPX*WPY = WRITEPROC)
 WRITEPROC=16
@@ -46,9 +50,7 @@ if [ "x$METHOD" == "xDATASPACES" ]; then
     # Prepare config file for DataSpaces
     echo "## Config file for DataSpaces
 ndim = 3
-dimx = 1000
-dimy = 1000
-dimz = 1000
+dims = 1000,1000,1000
 max_versions = 10
 " > dataspaces.conf
 
diff --git a/examples/coupling/job1 b/examples/coupling/job1
index cdb40ae..4fd3ba6 100755
--- a/examples/coupling/job1
+++ b/examples/coupling/job1
@@ -6,6 +6,8 @@
 ## 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
diff --git a/examples/staging/stage_write/genarray_stream.F90 b/examples/staging/stage_write/genarray_stream.F90
index 5592e82..494ea6f 100644
--- a/examples/staging/stage_write/genarray_stream.F90
+++ b/examples/staging/stage_write/genarray_stream.F90
@@ -70,8 +70,9 @@ program genarray
     ! Have to split and create a 'world' communicator for genarray only
     color = 1
     !print *,"call MPI_split "
-    !call MPI_Comm_split (MPI_COMM_WORLD, color, wrank, app_comm, ierr)
-    call MPI_Comm_dup (MPI_COMM_WORLD, app_comm, ierr)
+    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) "
@@ -110,7 +111,7 @@ program genarray
     ! Terminate
     call MPI_Barrier (app_comm, ierr)
     call adios_finalize (rank, ierr)
-    call MPI_Barrier (MPI_COMM_WORLD, ierr)
+    !call MPI_Barrier (MPI_COMM_WORLD, ierr)
     print *,"Writer calls MPI_Finalize"
     call MPI_Finalize (ierr)
     print *,"Exit writer code "
diff --git a/examples/staging/stage_write/genarray_stream.xml b/examples/staging/stage_write/genarray_stream.xml
index 981c0b0..b99aeea 100644
--- a/examples/staging/stage_write/genarray_stream.xml
+++ b/examples/staging/stage_write/genarray_stream.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <adios-config host-language="Fortran">
-  <adios-group name="genarray" coordination-communicator="group_comm" time-index="steps">
+  <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"/>
@@ -27,23 +27,23 @@
     <global-bounds dimensions="/dimensions/gndx,/dimensions/gndy,/dimensions/gndz" 
                    offsets="/aux/offx,/aux/offy,/aux/offz">
         <var name="var1" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
-             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             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,steps"/>
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz"/>
     </global-bounds>
     <attribute name="description" path="/var/double_xyz"
                value="3D array with 3D decomposition"/>
@@ -51,7 +51,7 @@
 
   </adios-group>
 
-  <method group="genarray" method="DATASPACES">verbose=3</method>
+  <method group="genarray" method="FLEXPATH">verbose=3</method>
 
   <buffer size-MB="20" allocate-time="now"/>
 
diff --git a/examples/staging/stage_write/job b/examples/staging/stage_write/job
index 121d9d9..a4600b1 100755
--- a/examples/staging/stage_write/job
+++ b/examples/staging/stage_write/job
@@ -6,11 +6,18 @@
 #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
 
-#RUNCMD="mpirun -np"
-RUNCMD="aprun -n"
-SERVER=./dataspaces_server
+if [ `hostname | cut -c 1-4` == "sith" ]; then
+    source /etc/profile.d/modules.sh
+    module load szip
+    #module load dataspaces/1.3.0
+    DATASPACES_DIR=/ccs/proj/e2e/dataspaces/sith/pgi
+fi
+
+RUNCMD="mpirun -np"
+#RUNCMD="aprun -n"
+SERVER=$DATASPACES_DIR/bin/dataspaces_server
 
 WRITEPROC=1
 STAGINGPROC=1
@@ -24,9 +31,7 @@ rm staged.bp genarray.bp
 # Prepare config file for DataSpaces
 echo "## Config file for DataSpaces
 ndim = 3
-dimx = 128
-dimy = 32768
-dimz = 128
+dims = 16,32,64
 max_versions = 10
 #max_readers =" $READPROC " 
 #lock_type = 2
@@ -51,15 +56,15 @@ done < conf
 
 echo "-- DataSpaces IDs: P2TNID = $P2TNID   P2TPID = $P2TPID"
 
-# Start GENARRAY
-echo "-- Start GENARRAY on $WRITEPROC PEs"
-$RUNCMD $WRITEPROC ./genarray_stream genarray.bp $WRITEPROC 1 1 16 32 64 5 10 >& log.genarray &
-
 # Start STAGE_WRITE
 echo "-- Start STAGE_WRITE on $READPROC PEs"
-$RUNCMD $READPROC ./stage_write genarray.bp staged.bp DATASPACES \"\" MPI \"\" $READPROC 1 1 >& log.stage_write &
+$RUNCMD $READPROC ./stage_write genarray.bp staged.bp DATASPACES "" MPI "" $READPROC 1 1 >& log.stage_write &
+
+# Start GENARRAY
+echo "-- Start GENARRAY on $WRITEPROC PEs"
+$RUNCMD $WRITEPROC ./genarray_stream 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/job.32
index 0cccdf4..7b05671 100755
--- a/examples/staging/stage_write/job.32
+++ b/examples/staging/stage_write/job.32
@@ -23,9 +23,7 @@ rm staged.bp genarray.bp
 # Prepare config file for DataSpaces
 echo "## Config file for DataSpaces
 ndim = 3
-dimx = 512
-dimy = 512
-dimz = 512
+dims = 512,512,512
 max_versions = 10
 #max_readers =" $READPROC " 
 #lock_type = 2
@@ -56,7 +54,7 @@ mpirun -np $WRITEPROC ./genarray_stream genarray.bp $WRITEPROC 1 1 16 32 64 5 10
 
 # Start STAGE_WRITE
 echo "-- Start STAGE_WRITE on $READPROC PEs"
-mpirun -np $READPROC ./stage_write genarray.bp staged.bp DATASPACES \"\" MPI \"\" $READPROC 1 1 >& log.stage_write &
+mpirun -np $READPROC ./stage_write genarray.bp staged.bp DATASPACES "enable_collective_read_meta;verbose=4" MPI "" $READPROC 1 1 >& log.stage_write &
 
 echo "-- Wait until all applications exit. Run ./check.sh to see status"
 wait
diff --git a/examples/staging/stage_write/make.settings b/examples/staging/stage_write/make.settings
index 3b26f8b..49710f0 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/pnorbert/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 0f24fc8..c07f04b 100644
--- a/examples/staging/stage_write/stage_write.c
+++ b/examples/staging/stage_write/stage_write.c
@@ -40,7 +40,7 @@ enum ADIOS_READ_METHOD read_method;
 static const int max_read_buffer_size  = 1024*1024*1024;
 static const int max_write_buffer_size = 1024*1024*1024;
 
-static int timeout_sec = 30; // will stop if no data found for this time (-1: never stop)
+static int timeout_sec = 300; // will stop if no data found for this time (-1: never stop)
 
 
 // Global variables
@@ -162,7 +162,14 @@ int main (int argc, char ** argv)
     int         retval = 0;
 
     MPI_Init (&argc, &argv);
-    comm = MPI_COMM_WORLD;
+    //comm = MPI_COMM_WORLD;
+    //MPI_Comm_rank (comm, &rank);
+    //MPI_Comm_size (comm, &numproc);
+    MPI_Comm_rank (MPI_COMM_WORLD, &rank);
+    MPI_Comm_size (MPI_COMM_WORLD, &numproc);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Comm_split(MPI_COMM_WORLD, 2, rank, &comm);	//color=2
     MPI_Comm_rank (comm, &rank);
     MPI_Comm_size (comm, &numproc);
 
@@ -178,12 +185,7 @@ int main (int argc, char ** argv)
     print0("Write method parameters = \"%s\"\n", wmethodparams);
     
 
-    err = adios_read_init_method(read_method, comm, 
-                                 "max_chunk_size=100; "
-                                 "app_id =32767; \n"
-                                 "verbose= 3;"
-                                 "poll_interval  =  100;"
-                                );
+    err = adios_read_init_method(read_method, comm, rmethodparams);
 
     if (!err) {
         print0 ("%s\n", adios_errmsg());
@@ -261,6 +263,7 @@ int main (int argc, char ** argv)
 
     adios_read_finalize_method (read_method);
     adios_finalize (rank);
+
     MPI_Finalize ();
 
     return retval;
@@ -301,7 +304,8 @@ int process_metadata(int step)
 
     varinfo = (VarInfo *) malloc (sizeof(VarInfo) * f->nvars);
     if (!varinfo) {
-        print("ERROR: rank %d cannot allocate %lu bytes\n", rank, sizeof(VarInfo)*f->nvars);
+        print("ERROR: rank %d cannot allocate %llu bytes\n", 
+                rank, (uint64_t)(sizeof(VarInfo)*f->nvars));
         return 1;
     }
 
diff --git a/examples/staging/stage_write/writer_adios b/examples/staging/stage_write/writer_adios
new file mode 120000
index 0000000..ee50da8
--- /dev/null
+++ b/examples/staging/stage_write/writer_adios
@@ -0,0 +1 @@
+/ccs/proj/e2e/pnorbert/ADIOS/ADIOS/tests/performance/simple_write/writer_adios
\ No newline at end of file
diff --git a/runconf b/runconf
index 1250bbc..7a12ec7 100755
--- a/runconf
+++ b/runconf
@@ -52,8 +52,9 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     PAR_NC_DIR=$NETCDF_DIR
     PAR_NC_CLIB=$NETCDF_CLIB
     module unload netcdf
-    module load szip
+    #module load szip
     module load bzip2
+    module load dataspaces/1.4.0
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
@@ -61,19 +62,16 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         export CC=pgcc
         export CXX=pgCC
         export FC=pgf90
-        WITHDART="--with-dataspaces=/ccs/proj/e2e/dataspaces/sith/$TARGET"
         WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "gnu" ]; then
         export CC=gcc
         export CXX=g++
         export FC=gfortran
-        WITHDART="--with-dataspaces=/ccs/proj/e2e/dataspaces/sith/$TARGET"
         WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "intel" ]; then
         export CC=icc
         export CXX=icpc
         export FC=ifort
-        WITHDART=""
         WITHFLEX=""
     else
         echo "TARGET must be pgi or gnu or intel"
@@ -83,9 +81,10 @@ 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 \
+        --config-cache \
         --enable-dependency-tracking \
         --enable-research-transports \
-        --with-lustre=/usr/lib64 \
+        --with-lustre \
         --with-mxml=$MXMLDIR \
         --with-hdf5=${SEQ_HDF5_DIR} \
         --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
@@ -96,12 +95,14 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         --with-nc4par=${PAR_NC_DIR} \
         --with-nc4par-libs="${PAR_NC_CLIB}" \
         --with-zlib=/lib64 \
-        --with-szip=$SZIP_DIR \
         --with-bzip2=$BZIP2_DIR \
-        $WITHDART \
+        --with-dataspaces=$DATASPACES_DIR \
         $WITHFLEX \
         --with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
-        --with-isobar=/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-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
         #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
         #--enable-shared --disable-static
@@ -253,13 +254,14 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
 
 elif [ `hostname | cut -c 1-5` == "titan" ]; then
 
-    BUILD_STAGING=false
+    BUILD_STAGING=true
+    TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
     if [ $BUILD_STAGING == "false" ]; then
     
         ################
         # Titan #
         ################
-        TARGET=pgi
+        #TARGET=pgi
         echo "Configure on TITAN (XK7) for $TARGET env."
         export CC=cc
         #export CFLAGS="-Wall -g" 
@@ -280,18 +282,19 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         module load PrgEnv-$TARGET
         #module unload intel
         #module load intel/13.1.3.192
-        module swap xtpe-interlagos xtpe-istanbul
+        module swap craype-interlagos craype-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 -O0" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
-            --enable-dependency-tracking
+        CFLAGS="-g -fPIC -O0" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/xk6.$TARGET \
+            --enable-dependency-tracking \
+            --with-lustre
+            #--with-fgr=/ccs/proj/e2e/qliu/tap \
             #--with-hdf5=/opt/cray/hdf5/1.8.7/pgi/109 \
             #--with-phdf5=/opt/cray/hdf5-parallel/1.8.7/pgi/109 \
-#            --with-lustre=/opt/xt-lustre-ss/2.2_1.6.5/usr
 #            --with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.$TARGET
 #            --enable-research-transports \
 #            --with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
@@ -306,7 +309,7 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         ##########################
         # Titan + staging #
         ##########################
-        TARGET=pgi
+        #TARGET=pgi
         echo "Configure on TITAN (XK7) including staging methods for $TARGET env."
         export CC=cc
         export FC=ftn
@@ -325,22 +328,23 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #module unload papi
         #module unload xtpe-quadcore
         module load PrgEnv-$TARGET
-        module swap xtpe-interlagos xtpe-istanbul
-        #module load dataspaces/1.0.0
+        module swap craype-interlagos craype-istanbul
+        module swap cray-libsci
+        module load dataspaces/1.4.0
         unset EXTRA_LIBS
         unset LDFLAGS
         if [ "$TARGET" == "pgi" ]; then
             #module swap pgi pgi/11.8.0
             # NSSI needs -pgcpplibs flag 
             export LDFLAGS="-pgcpplibs" 
-            DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
+            #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
+            WITHFLEX=""
         elif [ "$TARGET" == "gnu" ]; then
-            # NSSI needs libstdc++
-            export EXTRA_LIBS="/opt/gcc/4.7.2/snos/lib64/libstdc++.a"
+            # NSSI/FLEXPATH needs libstdc++
+            export EXTRA_LIBS="${GCC_PATH}/snos/lib64/libstdc++.a"
+            WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/titan/$TARGET"
             #module swap gcc gcc/4.4.4
-            DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
-        else
-            unset DATASPACES_DIR
+            #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
         fi
      
         # NOTE hdf5-parallel module does not work with C++ compiler
@@ -354,14 +358,18 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #export FC=mpif90
         export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DDART_DO_VERSIONING" 
         export CFLAGS="-fPIC -g -O0" 
-        #${SRCDIR}/configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
-        ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/titan.$TARGET \
+        ${SRCDIR}/configure --prefix=/ccs/proj/e2e/$USER/ADIOS/xk6.$TARGET \
         --enable-dependency-tracking \
         --with-cray-pmi=/opt/cray/pmi/default \
         --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
         --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
         --with-dataspaces=$DATASPACES_DIR \
-        --with-dimes=$DATASPACES_DIR 
+        --with-dimes=$DATASPACES_DIR \
+        $WITHFLEX \
+        --with-lustre
+
+        #--with-fgr=/ccs/proj/e2e/qliu/tap \
+        #--with-glib=/ccs/proj/e2e/qliu/glib \
         #--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 \
@@ -414,7 +422,7 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
       fi
       module load mxml
       module load pmi
-      CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/chester.$TARGET \
+      CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/eos.$TARGET \
           --enable-dependency-tracking \
           --with-cray-pmi=/opt/cray/pmi/default \
           --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
@@ -445,24 +453,23 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       module unload papi
       module unload pmi
       module load PrgEnv-$TARGET
-      #module load dataspaces/1.0.0
+      module swap cray-libsci
+      module swap craype-interlagos craype-istanbul
+      module load dataspaces/1.4.0
+      unset FLEXPATH
       if [ "$TARGET" == "pgi" ]; then
-          module swap pgi pgi/11.8.0
           # NSSI needs -pgcpplibs flag 
           export LDFLAGS="-pgcpplibs" 
           unset EXTRA_LIBS 
-          #WITHDART="--with-dataspaces=$DATASPACES_DIR"
-          WITHDART="--with-dataspaces=/ccs/proj/e2e/dataspaces/chester/pgi --with-dimes=/ccs/proj/e2e/dataspaces/chester/pgi"
       elif [ "$TARGET" == "gnu" ]; then
           # NSSI needs libstdc++
           unset LDFLAGS 
           export EXTRA_LIBS="/opt/gcc/4.7.1/snos/lib64/libstdc++.a"
+          export FLEXPATH="--with-flexpath=/ccs/proj/e2e/chaos/titan/gnu"
           #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
@@ -476,7 +483,10 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
           --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-dataspaces=$DATASPACES_DIR \
+          --with-dimes=$DATASPACES_DIR \
+          $FLEXPATH \
+          --without-infiniband 
 #            --with-lustre=/opt/xt-lustre-ss/2.2_1.6.5/usr \
 #            --with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.$TARGET \
 #            --enable-research-transports \
@@ -971,12 +981,12 @@ elif [ `hostname | cut -c 1-4` == "qliu" ]; then
         #--with-hdf5=/home/thkorde/local \
         #--with-netcdf=/home/thkorde/local
 
-elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
+elif [ `hostname | cut -c 1-5` == "adios" ]; then
 
     #######################
-    # Esimmon Virtual Box #
+    # ADIOS Virtual Box #
     #######################
-    echo "Configure on ESIMMON VirtualBox."
+    echo "Configure on ADIOS VirtualBox."
     export MPICC=mpicc
     export MPICXX=mpicxx
     export MPIFC=mpif90
@@ -984,17 +994,20 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     export CXX=g++
     export FC=gfortran
 
-    #export CFLAGS="-g -O0 -fPIC" 
+    export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
     ${SRCDIR}/configure --prefix=/opt/adios/1.6 \
         --enable-dependency-tracking \
         --with-mxml=/opt/mxml \
-        --with-hdf5=/opt/hdf5 \
-        --with-phdf5=/opt/phdf5 \
-        --with-netcdf=/opt/netcdf3 \
-        --with-nc4par=/opt/nc4par \
-        --with-zlib=/usr \
+        --with-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
 
+
 else
     echo "Could not determine what machine is this."
     echo "This script is for configuring adios on the authors' machines."
diff --git a/scripts/FindADIOS.cmake b/scripts/FindADIOS.cmake
new file mode 100644
index 0000000..690269c
--- /dev/null
+++ b/scripts/FindADIOS.cmake
@@ -0,0 +1,238 @@
+# - Find ADIOS library, routines for scientific, parallel IO
+#   https://www.olcf.ornl.gov/center-projects/adios/
+#
+# Use this module by invoking find_package with the form:
+#   find_package(ADIOS
+#     [version] [EXACT]     # Minimum or EXACT version, e.g. 1.6.0
+#     [REQUIRED]            # Fail with an error if ADIOS or a required
+#                           #   component is not found
+#     [QUIET]               # ...
+#     [COMPONENTS <...>]    # Compiled in components: fortran, readonly, 
+                            # sequential (all are case insentative) 
+#   )
+#
+# Module that finds the includes and libraries for a working ADIOS install.
+# This module invokes the `adios_config` script that should be installed with
+# the other ADIOS tools.
+#
+# To provide a hint to the module where to find the ADIOS installation,
+# set the ADIOS_ROOT environment variable.
+#
+# If this variable is not set, make sure that at least the according `bin/`
+# directory of ADIOS is in your PATH environment variable.
+#
+# Set the following CMake variables BEFORE calling find_packages to
+# influence this module:
+#   ADIOS_USE_STATIC_LIBS - Set to ON to force the use of static
+#                           libraries.  Default: OFF
+#
+# This module will define the following variables:
+#   ADIOS_INCLUDE_DIRS    - Include directories for the ADIOS headers.
+#   ADIOS_LIBRARIES       - ADIOS libraries.
+#   ADIOS_FOUND           - TRUE if FindADIOS found a working install
+#   ADIOS_VERSION         - Version in format Major.Minor.Patch
+#
+# Not used for now:
+#   ADIOS_DEFINITIONS     - Compiler definitions you should add with
+#                           add_definitions(${ADIOS_DEFINITIONS})
+#
+# Example to find ADIOS (default)
+# find_package(ADIOS)
+# if(ADIOS_FOUND)
+#   include_directories(${ADIOS_INCLUDE_DIRS})
+#   add_executable(foo foo.c)
+#   target_link_libraries(foo ${ADIOS_LIBRARIES})
+# endif()
+
+# Example to find ADIOS using component
+# find_package(ADIOS COMPONENTS fortran)
+# if(ADIOS_FOUND)
+#   include_directories(${ADIOS_INCLUDE_DIRS})
+#   add_executable(foo foo.c)
+#   target_link_libraries(foo ${ADIOS_LIBRARIES})
+# endif()
+###############################################################################
+#Copyright (c) 2014, Axel Huebl and Felix Schmitt from http://picongpu.hzdr.de
+#All rights reserved.
+
+#Redistribution and use in source and binary forms, with or without
+#modification, are permitted provided that the following conditions are met:
+
+#1. Redistributions of source code must retain the above copyright notice, this
+#list of conditions and the following disclaimer.
+
+#2. Redistributions in binary form must reproduce the above copyright notice,
+#this list of conditions and the following disclaimer in the documentation
+#and/or other materials provided with the distribution.
+
+#3. Neither the name of the copyright holder nor the names of its contributors
+#may be used to endorse or promote products derived from this software without
+#specific prior written permission.
+
+#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+###############################################################################
+
+
+###############################################################################
+# Required cmake version
+###############################################################################
+
+cmake_minimum_required(VERSION 2.8.5)
+
+
+###############################################################################
+# ADIOS
+###############################################################################
+# get flags for adios_config, -l is the default
+#-f for fortran, -r for readonly, -s for sequential (nompi)
+set(OPTLIST "-l")
+if(ADIOS_FIND_COMPONENTS)
+    foreach(COMP ${ADIOS_FIND_COMPONENTS})
+        string(TOLOWER ${COMP} comp)
+        if(comp STREQUAL "fortran")
+            set(OPTLIST ${OPTLIST} f)
+        elseif(comp STREQUAL "readonly")
+            set(OPTLIST ${OPTLIST} r)
+        elseif(comp STREQUAL "sequential")
+            set(OPTLIST ${OPTLIST} s)
+        else()
+            message("ADIOS component ${COMP} is not supported. Please use fortran, readonly, or sequential")
+        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)
+set(ADIOS_FOUND TRUE)
+
+
+# find `adios_config` program #################################################
+#   check the ADIOS_ROOT hint and the normal PATH
+find_file(ADIOS_CONFIG
+    NAME adios_config
+    PATHS $ENV{ADIOS_ROOT}/bin $ENV{ADIOS_DIR}/bin $ENV{INSTALL_PREFIX}/bin $ENV{PATH})
+
+if(ADIOS_CONFIG)
+    message(STATUS "Found 'adios_config': ${ADIOS_CONFIG}")
+else(ADIOS_CONFIG)
+    set(ADIOS_FOUND FALSE)
+    message(STATUS "Can NOT find 'adios_config' - set ADIOS_ROOT, ADIOS_DIR or INSTALL_PREFIX, or check your PATH")
+endif(ADIOS_CONFIG)
+
+# check `adios_config` program ################################################
+if(ADIOS_FOUND)
+    execute_process(COMMAND ${ADIOS_CONFIG} ${OPTLIST}
+                    OUTPUT_VARIABLE ADIOS_LINKFLAGS
+                    RESULT_VARIABLE ADIOS_CONFIG_RETURN
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if(NOT ADIOS_CONFIG_RETURN EQUAL 0)
+        set(ADIOS_FOUND FALSE)
+        message(STATUS "Can NOT execute 'adios_config' - check file permissions")
+    endif()
+
+    # find ADIOS_ROOT_DIR
+    execute_process(COMMAND ${ADIOS_CONFIG} -d
+                    OUTPUT_VARIABLE ADIOS_ROOT_DIR
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if(NOT IS_DIRECTORY "${ADIOS_ROOT_DIR}")
+        set(ADIOS_FOUND FALSE)
+        message(STATUS "The directory provided by 'adios_config -d' does not exist: ${ADIOS_ROOT_DIR}")
+    endif()
+endif(ADIOS_FOUND)
+
+# option: use only static libs ################################################
+if(ADIOS_USE_STATIC_LIBS)
+    # carfully: we have to restore the original path in the end
+    set(_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+endif()
+
+
+# we found something in ADIOS_ROOT_DIR and adios_config works #################
+if(ADIOS_FOUND)
+    # ADIOS headers
+    list(APPEND ADIOS_INCLUDE_DIRS ${ADIOS_ROOT_DIR}/include)
+
+    # check for compiled in dependencies
+    message(STATUS "ADIOS linker flags (unparsed): ${ADIOS_LINKFLAGS}")
+
+    # find all library paths -L
+    #   note: this can cause trouble if some libs are specified twice from
+    #         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}")
+    foreach(_LIBDIR ${_ADIOS_LIBDIRS})
+        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
+
+    #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}")
+    foreach(_LIB ${_ADIOS_LIBS})
+        string(REPLACE "-l" "" _LIB ${_LIB})
+
+        # find static lib: absolute path in -L then default
+        find_library(_LIB_DIR NAMES ${_LIB} PATHS ${ADIOS_LIBRARY_DIRS})
+
+        # found?
+        if(_LIB_DIR)
+            message(STATUS "Found ${_LIB} in ${_LIB_DIR}")
+            list(APPEND ADIOS_LIBRARIES "${_LIB_DIR}")
+        else(_LIB_DIR)
+            set(ADIOS_FOUND FALSE)
+            message(STATUS "ADIOS: Could NOT find library '${_LIB}'")
+        endif(_LIB_DIR)
+
+        # clean cached var
+        unset(_LIB_DIR CACHE)
+        unset(_LIB_DIR)
+    endforeach()
+
+    #add libraries which are already using cmake format
+    string(REGEX MATCHALL "/([A-Za-z_0-9/\\.-]+)\\.([a|so]+)" _ADIOS_LIBS_SUB "${ADIOS_LINKFLAGS}")
+    list(APPEND ADIOS_LIBRARIES "${_ADIOS_LIBS_SUB}")
+
+    # add the version string
+    execute_process(COMMAND ${ADIOS_CONFIG} -v
+                    OUTPUT_VARIABLE ADIOS_VERSION
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    
+endif(ADIOS_FOUND)
+
+# unset checked variables if not found
+if(NOT ADIOS_FOUND)
+    unset(ADIOS_INCLUDE_DIRS)
+    unset(ADIOS_LIBRARIES)
+endif(NOT ADIOS_FOUND)
+
+
+# restore CMAKE_FIND_LIBRARY_SUFFIXES if manipulated by this module ###########
+if(ADIOS_USE_STATIC_LIBS)
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ${_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+endif()
+
+
+###############################################################################
+# FindPackage Options
+###############################################################################
+
+# handles the REQUIRED, QUIET and version-related arguments for find_package
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ADIOS
+    REQUIRED_VARS ADIOS_LIBRARIES ADIOS_INCLUDE_DIRS
+    VERSION_VAR ADIOS_VERSION
+)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2ee45ca..4ad0d0c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -41,7 +41,7 @@ set (transforms_read_HDRS core/transforms/adios_transforms_transinfo.h
                        core/transforms/adios_transforms_hooks_read.h 
                        core/transforms/adios_transforms_reqgroup.h 
                        core/transforms/adios_transforms_datablock.h
-		               core/transforms/adios_patchdata.h)
+                       core/transforms/adios_patchdata.h)
 
 set (transforms_write_HDRS  core/transforms/adios_transforms_write.h 
                         core/transforms/adios_transforms_hooks_write.h 
@@ -62,14 +62,13 @@ 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_szip_read.c 
-               			  transforms/adios_transform_bzip2_read.c 
-               			  transforms/adios_transform_template_read.c 
-               			  transforms/adios_transform_identity_read.c 
-               			  transforms/adios_transform_zlib_read.c 
+                          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 
                           core/adios_selection_util.c 
                           ${transforms_read_method_SOURCES})
 
@@ -78,19 +77,18 @@ set (transforms_write_SOURCES ${transforms_write_HDRS}
                            core/transforms/adios_transforms_hooks_write.c 
                            core/transforms/adios_transforms_util.c 
                            core/transforms/adios_transforms_specparse.c 
-               			   transforms/adios_transform_alacrity_write.c
-               			   transforms/adios_transform_aplod_write.c
-               			   transforms/adios_transform_bzip2_write.c
-               			   transforms/adios_transform_identity_write.c
-               			   transforms/adios_transform_isobar_write.c
-               			   transforms/adios_transform_szip_write.c
-               			   transforms/adios_transform_template_write.c
-               			   transforms/adios_transform_zlib_write.c
+                           transforms/adios_transform_alacrity_write.c
+                           transforms/adios_transform_aplod_write.c
+                           transforms/adios_transform_bzip2_write.c
+                           transforms/adios_transform_identity_write.c
+                           transforms/adios_transform_isobar_write.c
+                           transforms/adios_transform_szip_write.c
+                           transforms/adios_transform_zlib_write.c
                            ${transforms_write_method_SOURCES})
 
 #start adios.a and adios_nompi.a
 if(BUILD_WRITE)
-  set(libadios_a_SOURCES core/adios.c 
+    set(libadios_a_SOURCES core/adios.c 
                      core/common_adios.c
                      core/adios_internals.c
                      core/adios_internals_mxml.c 
@@ -125,11 +123,11 @@ if(BUILD_WRITE)
                      write/adios_posix1.c
                      write/adios_var_merge.c)
 
-  if(HAVE_BGQ)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_mpi_bgq.c)
-  endif()
+    if(HAVE_BGQ)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_mpi_bgq.c)
+    endif()
 
-  set(libadios_nompi_a_SOURCES core/adios.c 
+    set(libadios_nompi_a_SOURCES core/adios.c 
                      core/common_adios.c 
                      core/adios_internals.c 
                      core/adios_internals_mxml.c 
@@ -161,13 +159,13 @@ if(BUILD_WRITE)
                      write/adios_posix1.c)
 
 #start adiosf.a and adiosf_v1.a
-  if(BUILD_FORTRAN)
-    set(FortranLibSources core/adiosf.c 
+    if(BUILD_FORTRAN)
+        set(FortranLibSources core/adiosf.c 
                        core/common_adios.c 
                        core/adios_internals.c 
                        core/adios_internals_mxml.c
                        ${transforms_common_SOURCES} 
-        		       ${transforms_read_SOURCES} 
+                       ${transforms_read_SOURCES} 
                        ${transforms_write_SOURCES} 
                        core/buffer.c 
                        core/adios_bp_v1.c  
@@ -190,112 +188,113 @@ if(BUILD_WRITE)
                        write/adios_posix.c 
                        write/adios_posix1.c)
 
-    set(FortranLibMPISources write/adios_mpi.c
+        set(FortranLibMPISources write/adios_mpi.c
                          write/adios_mpi_lustre.c
-	                 write/adios_mpi_amr.c
+                         write/adios_mpi_amr.c
                          write/adios_var_merge.c)
-    if(HAVE_BGQ)
-      set(FortranLibMPISources ${FortranLibMPISources} write/adios_mpi_bgq.c)
-    endif(HAVE_BGQ)
-    set(FortranLibSEQSources core/mpidummy.c)
-  endif(BUILD_FORTRAN)
-
-  set(libadios_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
-  set(libadios_a_CFLAGS "${ADIOSLIB_CFLAGS}")
-  set(libadios_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}") 
-  set(libadios_nompi_a_CFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_SEQ_CFLAGS}")
-  set(libadiosf_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
-  set(libadiosf_a_CFLAGS "${ADIOSLIB_CFLAGS}")
-  set(libadiosf_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}")
-  set(libadiosf_nompi_a_CFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_SEQ_CFLAGS}")
-
-  if(HAVE_DATASPACES)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
-    set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
-    if(BUILD_FORTRAN)  
-      set(FortranLibSources ${FortranLibSources} write/adios_dataspaces.c read/read_dataspaces.c)
-    endif(BUILD_FORTRAN) 
-  endif(HAVE_DATASPACES)
-
-  if(HAVE_DIMES)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
-    set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
-    if(BUILD_FORTRAN)  
-      set(FortranLibSources ${FortranLibSources} write/adios_dimes.c read/read_dimes.c)
-    endif(BUILD_FORTRAN)
-  endif(HAVE_DIMES)
-
-  if(HAVE_DATATAP)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_datatap.c read/read_datatap.c)
-    set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_datatap.c read/read_datatap.c)
-    if(BUILD_FORTRAN)
-      set(FortranLibSources ${FortranLibSources} write/adios_datatap.c read/read_datatap.c)
+        if(HAVE_BGQ)
+            set(FortranLibMPISources ${FortranLibMPISources} write/adios_mpi_bgq.c)
+        endif(HAVE_BGQ)
+        set(FortranLibSEQSources core/mpidummy.c)
     endif(BUILD_FORTRAN)
-  endif(HAVE_DATATAP)
-
-  if(HAVE_PHDF5)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_phdf5.c)
-    set(PHDF5_FLAGS "${PHDF5_FLAGS} ${MACRODEFFLAG}PHDF5 ${MACRODEFFLAG}H5_USE_16_API")
-    set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${PHDF5_FLAGS}")
-    if(BUILD_FORTRAN)
-      set(FortranLibMPISources ${FortranLibMPISources} write/adios_phdf5.c)
-      set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${PHDF5_FLAGS}")
-    endif(BUILD_FORTRAN) 
-  endif(HAVE_PHDF5)
 
-  if(HAVE_NC4PAR)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_nc4.c)
-    if(BUILD_FORTRAN)
-      set(FortranLibMPISources ${FortranLibMPISources} write/adios_nc4.c)
-    endif(BUILD_FORTRAN)
-  endif(HAVE_NC4PAR)
-
-  if(HAVE_FLEXPATH)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_flexpath.c read/read_flexpath.c)
-    if(BUILD_FORTRAN)
-      set(FortranLibSources ${FortranLibSources} write/adios_flexpath.c read/read_flexpath.c)
-    endif(BUILD_FORTRAN)
-  endif(HAVE_FLEXPATH)
-
-  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)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} ${dist_libadios_a_SOURCES} ${nodist_libadios_a_SOURCES})
-    set(libadios_a_SOURCES ${libadios_a_SOURCES} nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c)
-    set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
-    if(BUILD_FORTRAN)
-      set(nodist_libadiosf_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
-      set(dist_libadiosf_a_SOURCES nssi/adios_nssi_args.x)
-      set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES} ${nodist_libadiosf_a_SOURCES} ${dist_libadiosf_a_SOURCES})
-      set(FortranLibSources ${FortranLibSources} nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c)
-      set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
-    endif(BUILD_FORTRAN)
+    set(libadios_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
+    set(libadios_a_CFLAGS "${ADIOSLIB_CFLAGS}")
+    set(libadios_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}") 
+    set(libadios_nompi_a_CFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_SEQ_CFLAGS}")
+    set(libadiosf_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
+    set(libadiosf_a_CFLAGS "${ADIOSLIB_CFLAGS}")
+    set(libadiosf_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}")
+    set(libadiosf_nompi_a_CFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_SEQ_CFLAGS}")
+
+    if(HAVE_DATASPACES)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
+        set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
+        if(BUILD_FORTRAN)  
+            set(FortranLibSources ${FortranLibSources} write/adios_dataspaces.c read/read_dataspaces.c)
+        endif(BUILD_FORTRAN) 
+    endif(HAVE_DATASPACES)
+
+    if(HAVE_DIMES)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
+        set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
+        if(BUILD_FORTRAN)  
+            set(FortranLibSources ${FortranLibSources} write/adios_dimes.c read/read_dimes.c)
+        endif(BUILD_FORTRAN)
+    endif(HAVE_DIMES)
+
+    if(HAVE_DATATAP)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_datatap.c read/read_datatap.c)
+        set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_datatap.c read/read_datatap.c)
+        if(BUILD_FORTRAN)
+            set(FortranLibSources ${FortranLibSources} write/adios_datatap.c read/read_datatap.c)
+        endif(BUILD_FORTRAN)
+    endif(HAVE_DATATAP)
+
+    if(HAVE_PHDF5)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_phdf5.c)
+        set(PHDF5_FLAGS "${PHDF5_FLAGS} ${MACRODEFFLAG}PHDF5 ${MACRODEFFLAG}H5_USE_16_API")
+        set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${PHDF5_FLAGS}")
+        if(BUILD_FORTRAN)
+            set(FortranLibMPISources ${FortranLibMPISources} write/adios_phdf5.c)
+            set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${PHDF5_FLAGS}")
+        endif(BUILD_FORTRAN) 
+    endif(HAVE_PHDF5)
+
+    if(HAVE_NC4PAR)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_nc4.c)
+        if(BUILD_FORTRAN)
+            set(FortranLibMPISources ${FortranLibMPISources} write/adios_nc4.c)
+        endif(BUILD_FORTRAN)
+    endif(HAVE_NC4PAR)
+
+    if(HAVE_FLEXPATH)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_flexpath.c read/read_flexpath.c)
+        set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_flexpath.c read/read_flexpath.c)
+        if(BUILD_FORTRAN)
+            set(FortranLibSources ${FortranLibSources} write/adios_flexpath.c read/read_flexpath.c)
+        endif(BUILD_FORTRAN)
+    endif(HAVE_FLEXPATH)
+
+    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)
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} ${dist_libadios_a_SOURCES} ${nodist_libadios_a_SOURCES})
+        set(libadios_a_SOURCES ${libadios_a_SOURCES} nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c)
+        set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
+        if(BUILD_FORTRAN)
+            set(nodist_libadiosf_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
+            set(dist_libadiosf_a_SOURCES nssi/adios_nssi_args.x)
+            set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES} ${nodist_libadiosf_a_SOURCES} ${dist_libadiosf_a_SOURCES})
+            set(FortranLibSources ${FortranLibSources} nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c)
+            set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
+        endif(BUILD_FORTRAN)
 
 #adios_nssi_config.c: adios_nssi_args.c
 #use include_directories(${PROJECT_BINARY_DIR}/src) to let adios_nssi_config.c
 #find the header needed
 
-    add_custom_command (
-	OUTPUT adios_nssi_args.h
-	COMMAND rm -f $@
-	COMMAND rpcgen -h ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x >> $@
-        DEPENDS ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x ${PROJECT_SOURCE_DIR}/src/CMakeLists.txt
-        )
-
-    add_custom_command (
-        OUTPUT adios_nssi_args.c
-        COMMAND rm -f adios_nssi_args.c
-	COMMAND rpcgen -c ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x | grep -v "include \"\.\." > adios_nssi_args.c
-        DEPENDS ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.h
-        )
+        add_custom_command (
+            OUTPUT adios_nssi_args.h
+            COMMAND rm -f $@
+            COMMAND rpcgen -h ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x >> $@
+            DEPENDS ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x ${PROJECT_SOURCE_DIR}/src/CMakeLists.txt
+            )
+
+        add_custom_command (
+            OUTPUT adios_nssi_args.c
+            COMMAND rm -f adios_nssi_args.c
+            COMMAND rpcgen -c ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x | grep -v "include \"\.\." > adios_nssi_args.c
+            DEPENDS ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.h
+            )
     
-  set(CLEANFILES ${CLEANFILES} adios_nssi_args.c adios_nssi_args.h)
+        set(CLEANFILES ${CLEANFILES} adios_nssi_args.c adios_nssi_args.h)
 
-  endif(HAVE_NSSI)
+    endif(HAVE_NSSI)
 
 
-  if(RESEARCH_TRANSPORTS)
-#    set(libadios_a_SOURCES ${libadios_a_SOURCES}
+    if(RESEARCH_TRANSPORTS)
+#        set(libadios_a_SOURCES ${libadios_a_SOURCES}
 #                      write/adios_mpi_stagger.c 
 #                      write/adios_mpi_aggregate.c 
 #                      write/adios_provenance.c 
@@ -303,8 +302,8 @@ if(BUILD_WRITE)
 #                      write/adios_mpi_stripe.c 
 #                      write/adios_mpi_amr1.c 
 #                      write/adios_adaptive.c)
-    if(BUILD_FORTRAN)
-#      set(FortranLibMPISources ${FortranLibMPISources}
+        if(BUILD_FORTRAN)
+#            set(FortranLibMPISources ${FortranLibMPISources}
 #                          write/adios_mpi_stagger.c
 #                          write/adios_mpi_aggregate.c
 #                          write/adios_provenance.c
@@ -312,94 +311,94 @@ if(BUILD_WRITE)
 #                          write/adios_mpi_stripe.c 
 #                          write/adios_mpi_amr1.c 
 #                          write/adios_adaptive.c)
-    endif(BUILD_FORTRAN)
-  else(RESEARCH_TRANSPORTS)
-    set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
-    set(libadios_nompi_a_CPPFLAGS "${libadios_nompi_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
-    set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
-    set(libadiosf_nompi_a_CPPFLAGS "${libadiosf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
-  endif(RESEARCH_TRANSPORTS)
+        endif(BUILD_FORTRAN)
+    else(RESEARCH_TRANSPORTS)
+        set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
+        set(libadios_nompi_a_CPPFLAGS "${libadios_nompi_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
+        set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
+        set(libadiosf_nompi_a_CPPFLAGS "${libadiosf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
+    endif(RESEARCH_TRANSPORTS)
 
 # add library adios and adios_nompi
-  add_library(adios STATIC ${libadios_a_SOURCES})
-  add_library(adios_nompi STATIC ${libadios_nompi_a_SOURCES})
-  set_target_properties(adios PROPERTIES COMPILE_FLAGS "${libadios_a_CPPFLAGS} ${libadios_a_CFLAGS}")
-  set_target_properties(adios_nompi PROPERTIES COMPILE_FLAGS "${libadios_nompi_a_CPPFLAGS} ${libadios_nompi_a_CFLAGS}")
-#  message(STATUS "${libadios_a_CPPFLAGS}")
-#  message(STATUS "${libadios_a_CFLAGS}")
+    add_library(adios STATIC ${libadios_a_SOURCES})
+    add_library(adios_nompi STATIC ${libadios_nompi_a_SOURCES})
+    set_target_properties(adios PROPERTIES COMPILE_FLAGS "${libadios_a_CPPFLAGS} ${libadios_a_CFLAGS}")
+    set_target_properties(adios_nompi PROPERTIES COMPILE_FLAGS "${libadios_nompi_a_CPPFLAGS} ${libadios_nompi_a_CFLAGS}")
+#   message(STATUS "${libadios_a_CPPFLAGS}")
+#   message(STATUS "${libadios_a_CFLAGS}")
 
 # Build four different Fortran libraries, for the two read APIs
 # and their sequential versions
-  if(BUILD_FORTRAN)
-    set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES} ${FortranLibSources} ${FortranLibMPISources} core/adiosf_read.c)
-    set(libadiosf_v1_a_SOURCES ${FortranLibSources} ${FortranLibMPISources} core/adiosf_read_v1.c)
-    set(libadiosf_nompi_a_SOURCES ${FortranLibSources} ${FortranLibSEQSources} core/adiosf_read.c)
-    set(libadiosf_nompi_v1_a_SOURCES ${FortranLibSources} ${FortranLibSEQSources} core/adiosf_read_v1.c)
-    set(libadiosf_v1_a_CPPFLAGS "${libadiosf_a_CPPFLAGS}")
-    set(libadiosf_v1_a_CFLAGS "${libadiosf_a_CFLAGS}")
-    set(libadiosf_nompi_v1_a_CPPFLAGS "${libadiosf_nompi_a_CPPFLAGS}")
-    set(libadiosf_nompi_v1_a_CFLAGS "${libadiosf_nompi_a_CFLAGS}")
-
-    set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES}
+    if(BUILD_FORTRAN)
+        set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES} ${FortranLibSources} ${FortranLibMPISources} core/adiosf_read.c)
+        set(libadiosf_v1_a_SOURCES ${FortranLibSources} ${FortranLibMPISources} core/adiosf_read_v1.c)
+        set(libadiosf_nompi_a_SOURCES ${FortranLibSources} ${FortranLibSEQSources} core/adiosf_read.c)
+        set(libadiosf_nompi_v1_a_SOURCES ${FortranLibSources} ${FortranLibSEQSources} core/adiosf_read_v1.c)
+        set(libadiosf_v1_a_CPPFLAGS "${libadiosf_a_CPPFLAGS}")
+        set(libadiosf_v1_a_CFLAGS "${libadiosf_a_CFLAGS}")
+        set(libadiosf_nompi_v1_a_CPPFLAGS "${libadiosf_nompi_a_CPPFLAGS}")
+        set(libadiosf_nompi_v1_a_CFLAGS "${libadiosf_nompi_a_CFLAGS}")
+
+        set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES}
                          core/adiosf_defs_mod.f90
                          core/adiosf_write_mod.f90 
                          core/adiosf_read_mod.f90)
    
-    set(libadiosf_nompi_a_SOURCES ${libadiosf_nompi_a_SOURCES}
+        set(libadiosf_nompi_a_SOURCES ${libadiosf_nompi_a_SOURCES}
                               core/adiosf_defs_mod.f90
                               core/adiosf_write_mod.f90
                               core/adiosf_read_mod.f90)
 
-    set(libadiosf_v1_a_SOURCES ${libadiosf_v1_a_SOURCES} 
+        set(libadiosf_v1_a_SOURCES ${libadiosf_v1_a_SOURCES} 
                          core/adiosf_defs_mod.f90
                          core/adiosf_write_mod.f90)
 
-    set(libadiosf_nompi_v1_a_SOURCES ${libadiosf_nompi_v1_a_SOURCES}
+        set(libadiosf_nompi_v1_a_SOURCES ${libadiosf_nompi_v1_a_SOURCES}
                                   core/adiosf_defs_mod.f90
                                   core/adiosf_write_mod.f90)
 
-    set(nodist_include_HEADERS ${nodist_include_HEADERS} adios_write_mod.mod)
-    set(CLEANFILES ${CLEANFILES} adios_write_mod.mod)
-
-#    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
-#	)
-#    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 ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod
-#	)
-
-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
-)
-
-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
-)
-#    file(COPY ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
+        set(nodist_include_HEADERS ${nodist_include_HEADERS} adios_write_mod.mod)
+        set(CLEANFILES ${CLEANFILES} adios_write_mod.mod)
+
+#       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
+#           )
+#       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 ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod
+#           )
+
+        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
+        )
 
-    #include_directories(${nodist_include_HEADERS})
-#    install(FILES ${nodist_include_HEADERS} DESTINATION ${includedir})
-    install(FILES ${PROJECT_BINARY_DIR}/src/adios_write_mod.mod ${PROJECT_BINARY_DIR}/src/adios_defs_mod.mod DESTINATION ${includedir})
-#add library adiosf and adiosf_v1
-    add_library(adiosf STATIC ${libadiosf_a_SOURCES})
-    add_library(adiosf_v1 STATIC ${libadiosf_v1_a_SOURCES}) 
-    add_library(adiosf_nompi STATIC ${libadiosf_nompi_a_SOURCES})
-    add_library(adiosf_nompi_v1 STATIC ${libadiosf_nompi_v1_a_SOURCES})
-    set_target_properties(adiosf PROPERTIES COMPILE_FLAGS "${libadiosf_a_CPPFLAGS} ${libadiosf_a_CFLAGS}")
-    set_target_properties(adiosf_v1 PROPERTIES COMPILE_FLAGS "${libadiosf_v1_a_CPPFLAGS} ${libadiosf_v1_a_CFLAGS}")
-    set_target_properties(adiosf_nompi PROPERTIES COMPILE_FLAGS "${libadiosf_nompi_a_CPPFLAGS} ${libadiosf_nompi_a_CFLAGS}")
-    set_target_properties(adiosf_nompi_v1 PROPERTIES COMPILE_FLAGS "${libadiosf_nompi_v1_a_CPPFLAGS} ${libadiosf_nompi_v1_a_CFLAGS}")
-#    message(STATUS "${libadiosf_a_CPPFLAGS}")
-#    message(STATUS "${libadiosf_a_CFLAGS}")
-  endif(BUILD_FORTRAN)
+        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
+        )
+#       file(COPY ${CMAKE_CURRENT_BINARY_DIR}/adios_write_mod.mod DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
+
+        ##include_directories(${nodist_include_HEADERS})
+#       install(FILES ${nodist_include_HEADERS} DESTINATION ${includedir})
+        install(FILES ${PROJECT_BINARY_DIR}/src/adios_write_mod.mod ${PROJECT_BINARY_DIR}/src/adios_defs_mod.mod DESTINATION ${includedir})
+        ##add library adiosf and adiosf_v1
+        add_library(adiosf STATIC ${libadiosf_a_SOURCES})
+        add_library(adiosf_v1 STATIC ${libadiosf_v1_a_SOURCES}) 
+        add_library(adiosf_nompi STATIC ${libadiosf_nompi_a_SOURCES})
+        add_library(adiosf_nompi_v1 STATIC ${libadiosf_nompi_v1_a_SOURCES})
+        set_target_properties(adiosf PROPERTIES COMPILE_FLAGS "${libadiosf_a_CPPFLAGS} ${libadiosf_a_CFLAGS}")
+        set_target_properties(adiosf_v1 PROPERTIES COMPILE_FLAGS "${libadiosf_v1_a_CPPFLAGS} ${libadiosf_v1_a_CFLAGS}")
+        set_target_properties(adiosf_nompi PROPERTIES COMPILE_FLAGS "${libadiosf_nompi_a_CPPFLAGS} ${libadiosf_nompi_a_CFLAGS}")
+        set_target_properties(adiosf_nompi_v1 PROPERTIES COMPILE_FLAGS "${libadiosf_nompi_v1_a_CPPFLAGS} ${libadiosf_nompi_v1_a_CFLAGS}")
+#       message(STATUS "${libadiosf_a_CPPFLAGS}")
+#       message(STATUS "${libadiosf_a_CFLAGS}")
+    endif(BUILD_FORTRAN)
 
 endif(BUILD_WRITE)
  
@@ -414,6 +413,7 @@ set(include_HEADERS ${include_HEADERS} public/adios.h
                    public/adios_read_v1.h 
                    public/adios_read_v1_defs.h 
                    public/adios_read_v2.h 
+                   public/adios_read_v2_fwd.h 
                    public/adios_selection.h
                    public/adios_schema.h) 
 
@@ -437,33 +437,33 @@ set(libadiosread_a_SOURCES core/adios_bp_v1.c
                       read/read_bp_staged1.c)
 
 if(HAVE_DMALLOC)
-  set(libadiosread_a_CPPFLAGS "${libadiosread_a_CPPFLAGS} ${MACRODEFFLAG}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)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_dataspaces.c)
 endif(HAVE_DATASPACES)
 
 if(HAVE_DIMES)
-  set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_dimes.c)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_dimes.c)
 endif(HAVE_DIMES)
 
 if(HAVE_DATATAP)
-  set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_datatap.c)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_datatap.c)
 endif(HAVE_DATATAP)
 
 if(HAVE_FLEXPATH)
-  set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_flexpath.c)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} read/read_flexpath.c)
 endif(HAVE_FLEXPATH)
 
 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)
-  set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} ${dist_libadiosread_a_SOURCES} ${nodist_libadiosread_a_SOURCES})
-  set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} nssi/adios_nssi_config.c read/read_nssi.c)
-  set(libadiosread_a_CPPFLAGS "${libadiosread_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
-  set(libadiosread_a_CFLAGS "${libadiosread_a_CFLAGS} ${ADIOSLIB_CFLAGS}")
+    set(dist_libadiosread_a_SOURCES nssi/adios_nssi_args.x)
+    set(nodist_libadiosread_a_SOURCES adios_nssi_args.c adios_nssi_args.h)
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} ${dist_libadiosread_a_SOURCES} ${nodist_libadiosread_a_SOURCES})
+    set(libadiosread_a_SOURCES ${libadiosread_a_SOURCES} nssi/adios_nssi_config.c read/read_nssi.c)
+    set(libadiosread_a_CPPFLAGS "${libadiosread_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
+    set(libadiosread_a_CFLAGS "${libadiosread_a_CFLAGS} ${ADIOSLIB_CFLAGS}")
 endif(HAVE_NSSI)
 
 set(libadiosread_a_CPPFLAGS "${libadiosread_a_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
@@ -476,7 +476,7 @@ set_target_properties(adiosread PROPERTIES COMPILE_FLAGS "${libadiosread_a_CPPFL
 
 #start libadiosreadf.a libadiosreadf_v1.a
 if(BUILD_FORTRAN)
-  set(FortranReadLibSource core/adios_bp_v1.c 
+    set(FortranReadLibSource core/adios_bp_v1.c 
                       core/adios_endianness.c 
                       core/bp_utils.c 
                       core/futils.c 
@@ -492,73 +492,73 @@ if(BUILD_FORTRAN)
                       read/read_bp.c 
                       read/read_bp_staged.c 
                       read/read_bp_staged1.c)
-  if(HAVE_DATASPACES)
-    set(FortranReadLibSource ${FortranReadLibSource} read/read_dataspaces.c)
-  endif(HAVE_DATASPACES)
+    if(HAVE_DATASPACES)
+        set(FortranReadLibSource ${FortranReadLibSource} read/read_dataspaces.c)
+    endif(HAVE_DATASPACES)
 
-  if(HAVE_DIMES)
-    set(FortranReadLibSource ${FortranReadLibSource} read/read_dimes.c)
-  endif(HAVE_DIMES)
+    if(HAVE_DIMES)
+        set(FortranReadLibSource ${FortranReadLibSource} read/read_dimes.c)
+    endif(HAVE_DIMES)
 
-  if(HAVE_DATATAP)
-    set(FortranReadLibSource ${FortranReadLibSource} read/read_datatap.c)
-  endif(HAVE_DATATAP)
+    if(HAVE_DATATAP)
+        set(FortranReadLibSource ${FortranReadLibSource} read/read_datatap.c)
+    endif(HAVE_DATATAP)
 
-  if(HAVE_FLEXPATH)
-    set(FortranReadLibSource ${FortranReadLibSource} read/read_flexpath.c)
-  endif(HAVE_FLEXPATH)
+    if(HAVE_FLEXPATH)
+        set(FortranReadLibSource ${FortranReadLibSource} read/read_flexpath.c)
+    endif(HAVE_FLEXPATH)
   
-  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)
-    set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES} ${dist_libadiosreadf_a_SOURCES} ${nodist_libadiosreadf_a_SOURCES})
-    set(FortranReadLibSource ${FortranReadLibSource} nssi/adios_nssi_config.c read/read_nssi.c)
-    set(libadiosreadf_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
-    set(libadiosreadf_a_CFLAGS "${libadiosreadf_a_CFLAGS} ${ADIOSLIB_CFLAGS}")
-  endif(HAVE_NSSI)
-
-  set(libadiosreadf_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
-  set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES} ${FortranReadLibSource} core/adiosf_read.c)
-  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)
+    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)
+        set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES} ${dist_libadiosreadf_a_SOURCES} ${nodist_libadiosreadf_a_SOURCES})
+        set(FortranReadLibSource ${FortranReadLibSource} nssi/adios_nssi_config.c read/read_nssi.c)
+        set(libadiosreadf_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
+        set(libadiosreadf_a_CFLAGS "${libadiosreadf_a_CFLAGS} ${ADIOSLIB_CFLAGS}")
+    endif(HAVE_NSSI)
+
+    set(libadiosreadf_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
+    set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES} ${FortranReadLibSource} core/adiosf_read.c)
+    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)
   
-  ADD_CUSTOM_COMMAND(
+    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(
+    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(
+    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(
+        )
+    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
         )
-#  file(COPY ${CMAKE_CURRENT_BINARY_DIR}/adios_defs_mod.mod DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
+#   file(COPY ${CMAKE_CURRENT_BINARY_DIR}/adios_defs_mod.mod DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
 #add library adiosreadf and adiosreadf_v1
-  #include_directories(${nodist_include_HEADERS})
+    #include_directories(${nodist_include_HEADERS})
 #  install(FILES ${nodist_include_HEADERS} DESTINATION ${includedir})
-  install(FILES ${PROJECT_BINARY_DIR}/src/adios_read_mod.mod DESTINATION ${includedir})
-  add_library(adiosreadf ${libadiosreadf_a_SOURCES})
-  set_target_properties(adiosreadf PROPERTIES COMPILE_FLAGS "${libadiosreadf_a_CPPFLAGS} ${libadiosreadf_a_CFLAGS}")
+    install(FILES ${PROJECT_BINARY_DIR}/src/adios_read_mod.mod DESTINATION ${includedir})
+    add_library(adiosreadf ${libadiosreadf_a_SOURCES})
+    set_target_properties(adiosreadf PROPERTIES COMPILE_FLAGS "${libadiosreadf_a_CPPFLAGS} ${libadiosreadf_a_CFLAGS}")
   
 #  message(STATUS "${nodist_include_HEADERS}")
 #  message(STATUS "${libadiosreadf_v1_a_SOURCES}")
-  add_library(adiosreadf_v1 ${libadiosreadf_v1_a_SOURCES})
-  set_target_properties(adiosreadf_v1 PROPERTIES COMPILE_FLAGS "${libadiosreadf_v1_a_CPPFLAGS} ${libadiosreadf_v1_a_CFLAGS}")
+    add_library(adiosreadf_v1 ${libadiosreadf_v1_a_SOURCES})
+    set_target_properties(adiosreadf_v1 PROPERTIES COMPILE_FLAGS "${libadiosreadf_v1_a_CPPFLAGS} ${libadiosreadf_v1_a_CFLAGS}")
 
 endif(BUILD_FORTRAN)
 
@@ -586,31 +586,31 @@ set(libadiosread_nompi_a_SOURCES core/mpidummy.c
                       read/read_bp.c)
 
 if(HAVE_DMALLOC)
-  set(libadiosread_nompi_a_CPPFLAGS "${libadiosread_nompi_a_CPPFLAGS} ${MACRODEFFLAG}DMALLOC")
+    set(libadiosread_nompi_a_CPPFLAGS "${libadiosread_nompi_a_CPPFLAGS} ${MACRODEFFLAG}DMALLOC")
 endif(HAVE_DMALLOC)
 
 if(HAVE_DATASPACES)
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_dataspaces.c)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_dataspaces.c)
 endif(HAVE_DATASPACES)
 
 if(HAVE_DIMES)
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_dimes.c)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_dimes.c)
 endif(HAVE_DIMES)
 
 if(HAVE_DATATAP)
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_datatap.c)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_datatap.c)
 endif(HAVE_DATATAP)
 
 if(HAVE_FLEXPATH)
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_flexpath.c)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} read/read_flexpath.c)
 endif(HAVE_FLEXPATH)
 
 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)
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} ${dist_libadiosread_nompi_a_SOURCES} ${nodist_libadiosread_nompi_a_SOURCES})
-  set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} nssi/adios_nssi_config.c read/read_nssi.c)
-  set(libadiosread_nompi_a_CPPFLAGS "${libadiosread_nompi_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NA")
+    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)
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} ${dist_libadiosread_nompi_a_SOURCES} ${nodist_libadiosread_nompi_a_SOURCES})
+    set(libadiosread_nompi_a_SOURCES ${libadiosread_nompi_a_SOURCES} nssi/adios_nssi_config.c read/read_nssi.c)
+    set(libadiosread_nompi_a_CPPFLAGS "${libadiosread_nompi_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NA")
 endif(HAVE_NSSI)
 
 set(libadiosread_nompi_a_CPPFLAGS "${libadiosread_nompi_a_CPPFLAGS} ${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
@@ -622,7 +622,7 @@ set_target_properties(adiosread_nompi PROPERTIES COMPILE_FLAGS "${libadiosread_n
 
 #start libadiosreadf_nompi.a libadiosreadf_nompi_v1.a
 if(BUILD_FORTRAN)
-  set(FortranReadSeqLibSource core/mpidummy.c
+    set(FortranReadSeqLibSource core/mpidummy.c
                           core/adios_bp_v1.c 
                           core/adios_endianness.c 
                           core/bp_utils.c 
@@ -635,46 +635,46 @@ if(BUILD_FORTRAN)
                           core/globals.c 
                           core/adios_read_hooks.c 
                           core/util.c 
-            			  core/qhashtbl.c 
+                          core/qhashtbl.c 
                           read/read_bp.c)
-  if(HAVE_DATASPACES)
-    set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dataspaces.c)
-  endif(HAVE_DATASPACES)
-
-  if(HAVE_DIMES)
-    set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dimes.c)
-  endif(HAVE_DIMES)
-
-  if(HAVE_DATATAP)
-    set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_datatap.c)
-  endif(HAVE_DATATAP)
-
-  if(HAVE_FLEXPATH)
-    set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_flexpath.c)
-  endif(HAVE_FLEXPATH)
-
-  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)
-    set(libadiosreadf_nompi_a_SOURCES ${libadiosreadf_nompi_a_SOURCES} ${dist_libadiosreadf_nompi_a_SOURCES} ${nodist_libadiosreadf_nompi_a_SOURCES})
-    set(FortranReadSeqLibSource ${FortranReadSeqLibSource} nssi/adios_nssi_config.c read/read_nssi.c)
-    set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
-    set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
-    set(libadiosreadf_nompi_a_CFLAGS "${ADIOSLIB_CFLAGS}")
-  endif(HAVE_NSSI)
-
-  set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
-  set(libadiosreadf_nompi_a_SOURCES ${libadiosreadf_nompi_a_SOURCES} ${FortranReadSeqLibSource} core/adiosf_read.c)
-  set(libadiosreadf_nompi_v1_a_SOURCES ${FortranReadSeqLibSource} core/adiosf_read_v1.c)
-  set(libadiosreadf_nompi_v1_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS}")
-  set(libadiosreadf_nompi_v1_a_CFLAGS "${libadiosreadf_nompi_a_CFLAGS}")
+    if(HAVE_DATASPACES)
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dataspaces.c)
+    endif(HAVE_DATASPACES)
+
+    if(HAVE_DIMES)
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dimes.c)
+    endif(HAVE_DIMES)
+
+    if(HAVE_DATATAP)
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_datatap.c)
+    endif(HAVE_DATATAP)
+
+    if(HAVE_FLEXPATH)
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_flexpath.c)
+    endif(HAVE_FLEXPATH)
+
+    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)
+        set(libadiosreadf_nompi_a_SOURCES ${libadiosreadf_nompi_a_SOURCES} ${dist_libadiosreadf_nompi_a_SOURCES} ${nodist_libadiosreadf_nompi_a_SOURCES})
+        set(FortranReadSeqLibSource ${FortranReadSeqLibSource} nssi/adios_nssi_config.c read/read_nssi.c)
+        set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
+        set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
+        set(libadiosreadf_nompi_a_CFLAGS "${ADIOSLIB_CFLAGS}")
+    endif(HAVE_NSSI)
+
+    set(libadiosreadf_nompi_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS}")
+    set(libadiosreadf_nompi_a_SOURCES ${libadiosreadf_nompi_a_SOURCES} ${FortranReadSeqLibSource} core/adiosf_read.c)
+    set(libadiosreadf_nompi_v1_a_SOURCES ${FortranReadSeqLibSource} core/adiosf_read_v1.c)
+    set(libadiosreadf_nompi_v1_a_CPPFLAGS "${libadiosreadf_nompi_a_CPPFLAGS}")
+    set(libadiosreadf_nompi_v1_a_CFLAGS "${libadiosreadf_nompi_a_CFLAGS}")
 
 #add library adiosreadf_nompi and adiosreadf_nompi_v1
-  add_library(adiosreadf_nompi ${libadiosreadf_nompi_a_SOURCES})
-  set_target_properties(adiosreadf_nompi  PROPERTIES COMPILE_FLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${libadiosreadf_nompi_a_CFLAGS}")
+    add_library(adiosreadf_nompi ${libadiosreadf_nompi_a_SOURCES})
+    set_target_properties(adiosreadf_nompi  PROPERTIES COMPILE_FLAGS "${libadiosreadf_nompi_a_CPPFLAGS} ${libadiosreadf_nompi_a_CFLAGS}")
 
-  add_library(adiosreadf_nompi_v1 ${libadiosreadf_nompi_v1_a_SOURCES})
-  set_target_properties(adiosreadf_nompi_v1 PROPERTIES COMPILE_FLAGS "${libadiosreadf_nompi_v1_a_CPPFLAGS} ${libadiosreadf_nompi_v1_a_CFLAGS}")
+    add_library(adiosreadf_nompi_v1 ${libadiosreadf_nompi_v1_a_SOURCES})
+    set_target_properties(adiosreadf_nompi_v1 PROPERTIES COMPILE_FLAGS "${libadiosreadf_nompi_v1_a_CPPFLAGS} ${libadiosreadf_nompi_v1_a_CFLAGS}")
 
 endif(BUILD_FORTRAN)
 
@@ -690,13 +690,17 @@ set(libadios_internal_nompi_a_SOURCES core/mpidummy.c
                                     core/buffer.c 
                                     core/adios_error.c 
                                     core/adios_logger.c 
-                                    core/adios_internals_mxml.c 
                                     core/adios_timing.c 
                                     core/util.c 
-	                			    core/qhashtbl.c 
+                                    core/qhashtbl.c 
                                     core/futils.c 
                                     core/adios_transport_hooks.c)
 
+if(BUILD_WRITE)
+    set(libadios_internal_nompi_a_SOURCES ${libadios_internal_nompi_a_SOURCES}
+            core/adios_internals_mxml.c)
+endif(BUILD_WRITE)
+
 set(libadios_internal_nompi_a_CPPFLAGS "${MACRODEFFLAG}_INTERNAL ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_INT_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
 
 add_library(adios_internal_nompi ${libadios_internal_nompi_a_SOURCES})
@@ -706,18 +710,18 @@ 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
-	DESTINATION ${libdir})
+        ${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
+        DESTINATION ${libdir})
 
 
 #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 682456d..f1ccd0f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -263,6 +263,7 @@ endif
 
 if HAVE_FLEXPATH
 libadios_a_SOURCES += write/adios_flexpath.c  read/read_flexpath.c
+libadios_nompi_a_SOURCES += write/adios_flexpath.c  read/read_flexpath.c
 if BUILD_FORTRAN
 FortranLibSources += write/adios_flexpath.c read/read_flexpath.c
 endif
@@ -376,6 +377,7 @@ include_HEADERS += public/adios.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
 
@@ -585,12 +587,14 @@ libadios_internal_nompi_a_SOURCES = core/mpidummy.c \
                                     core/buffer.c \
                                     core/adios_error.c \
                                     core/adios_logger.c \
-                                    core/adios_internals_mxml.c \
                                     core/adios_timing.c \
                                     core/util.c \
                                     core/qhashtbl.c \
                                     core/futils.c \
                                     core/adios_transport_hooks.c 
+if BUILD_WRITE
+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)
diff --git a/src/Makefile.in b/src/Makefile.in
index febfc87..16ed292 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -62,12 +62,13 @@ DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
 @BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_20 = write/adios_nc4.c 
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_21 = write/adios_nc4.c 
 @BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_22 = write/adios_flexpath.c  read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_23 = write/adios_flexpath.c read/read_flexpath.c
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_24 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_25 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_26 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_27 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_28 = adios_nssi_args.c adios_nssi_args.h
+ 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
 
 #libadios_a_SOURCES += write/adios_mpi_stagger.c \
 #                      write/adios_mpi_aggregate.c \
@@ -83,63 +84,64 @@ 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_29 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 @BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_30 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 @BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_31 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 @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
 
 #nodist_libadiosreadf_a_SOURCES += adios_write.mod
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_33 = adios_write_mod.mod 
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_34 = adios_write_mod.mod
- at HAVE_DATASPACES_TRUE@am__append_35 = read/read_dataspaces.c
- at HAVE_DIMES_TRUE@am__append_36 = read/read_dimes.c
- at HAVE_DATATAP_TRUE@am__append_37 = read/read_datatap.c
- at HAVE_FLEXPATH_TRUE@am__append_38 = read/read_flexpath.c
- at HAVE_NSSI_TRUE@am__append_39 = nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_NSSI_TRUE@am__append_40 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ 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
 #libadiosread_a_CPPFLAGS += $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_CPPFLAGS) # $(MACRODEFFLAG)USE_TIMERS
- at HAVE_NSSI_TRUE@am__append_41 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_42 = libadiosreadf.a libadiosreadf_v1.a
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_43 = read/read_dataspaces.c
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_44 = read/read_dimes.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_45 = read/read_datatap.c
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_46 = read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_47 = nssi/adios_nssi_config.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_48 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_49 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_50 = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
+ 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)
 
 #nodist_libadiosreadf_a_SOURCES += adios_read_mod.mod
- at BUILD_FORTRAN_TRUE@am__append_51 = adios_read_mod.mod adios_defs_mod.mod
 @BUILD_FORTRAN_TRUE at am__append_52 = adios_read_mod.mod adios_defs_mod.mod
- at HAVE_DATASPACES_TRUE@am__append_53 = read/read_dataspaces.c
- at HAVE_DIMES_TRUE@am__append_54 = read/read_dimes.c
- at HAVE_DATATAP_TRUE@am__append_55 = read/read_datatap.c
- at HAVE_FLEXPATH_TRUE@am__append_56 = read/read_flexpath.c
- at HAVE_NSSI_TRUE@am__append_57 = nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_NSSI_TRUE@am__append_58 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at HAVE_NSSI_TRUE@am__append_59 = $(ADIOSLIB_CFLAGS) 
+ 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) 
 
 # 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_60 = libadiosreadf_nompi.a libadiosreadf_nompi_v1.a
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__append_61 = read/read_dataspaces.c
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__append_62 = read/read_dimes.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__append_63 = read/read_datatap.c
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__append_64 = read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_65 = nssi/adios_nssi_config.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__append_66 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL \
+ 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 \
 @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_67 = $(ADIOSLIB_CFLAGS) 
- at BUILD_FORTRAN_TRUE@am__append_68 = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS)
+ 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 
 #Note: $(MACRODEFFLAG)NOMPI chokes IBM's bgxlf compiler but it can pass $(MACRODEFFLAG)_NOMPI. 
- at HAVE_DMALLOC_TRUE@am__append_69 = $(MACRODEFFLAG)DMALLOC 
- at HAVE_DMALLOC_TRUE@am__append_70 = $(MACRODEFFLAG)DMALLOC 
+ at HAVE_DMALLOC_TRUE@am__append_71 = $(MACRODEFFLAG)DMALLOC 
+ at HAVE_DMALLOC_TRUE@am__append_72 = $(MACRODEFFLAG)DMALLOC 
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -153,7 +155,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -164,6 +168,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -360,6 +365,38 @@ libadios_a_OBJECTS = $(am_libadios_a_OBJECTS) \
 	$(dist_libadios_a_OBJECTS) $(nodist_libadios_a_OBJECTS)
 libadios_internal_nompi_a_AR = $(AR) $(ARFLAGS)
 libadios_internal_nompi_a_LIBADD =
+am__libadios_internal_nompi_a_SOURCES_DIST = core/mpidummy.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/bp_utils.c \
+	core/adios_internals.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_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) \
 	libadios_internal_nompi_a-adios_transforms_common.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_transforms_hooks.$(OBJEXT) \
@@ -378,6 +415,7 @@ am__objects_17 = $(am__objects_1) \
 	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_libadios_internal_nompi_a_OBJECTS =  \
 	libadios_internal_nompi_a-mpidummy.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_bp_v1.$(OBJEXT) \
@@ -388,12 +426,12 @@ am_libadios_internal_nompi_a_OBJECTS =  \
 	libadios_internal_nompi_a-buffer.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_error.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_logger.$(OBJEXT) \
-	libadios_internal_nompi_a-adios_internals_mxml.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_timing.$(OBJEXT) \
 	libadios_internal_nompi_a-util.$(OBJEXT) \
 	libadios_internal_nompi_a-qhashtbl.$(OBJEXT) \
 	libadios_internal_nompi_a-futils.$(OBJEXT) \
-	libadios_internal_nompi_a-adios_transport_hooks.$(OBJEXT)
+	libadios_internal_nompi_a-adios_transport_hooks.$(OBJEXT) \
+	$(am__objects_18)
 libadios_internal_nompi_a_OBJECTS =  \
 	$(am_libadios_internal_nompi_a_OBJECTS)
 libadios_nompi_a_AR = $(AR) $(ARFLAGS)
@@ -457,13 +495,14 @@ am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.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
-am__objects_18 = $(am__objects_1) \
+	read/read_datatap.c write/adios_flexpath.c \
+	read/read_flexpath.c
+am__objects_19 = $(am__objects_1) \
 	libadios_nompi_a-adios_transforms_common.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_hooks.$(OBJEXT) \
 	libadios_nompi_a-adios_copyspec.$(OBJEXT) \
 	libadios_nompi_a-adios_subvolume.$(OBJEXT)
-am__objects_19 =  \
+am__objects_20 =  \
 	libadios_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -471,15 +510,15 @@ am__objects_19 =  \
 	libadios_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_20 = $(am__objects_1) \
+am__objects_21 = $(am__objects_1) \
 	libadios_nompi_a-adios_transforms_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_datablock.$(OBJEXT) \
 	libadios_nompi_a-adios_patchdata.$(OBJEXT) \
 	libadios_nompi_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_19)
-am__objects_21 =  \
+	$(am__objects_20)
+am__objects_22 =  \
 	libadios_nompi_a-adios_transform_identity_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -487,25 +526,27 @@ am__objects_21 =  \
 	libadios_nompi_a-adios_transform_isobar_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_aplod_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transform_alacrity_write.$(OBJEXT)
-am__objects_22 = $(am__objects_1) \
+am__objects_23 = $(am__objects_1) \
 	libadios_nompi_a-adios_transforms_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_hooks_write.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_util.$(OBJEXT) \
 	libadios_nompi_a-adios_transforms_specparse.$(OBJEXT) \
-	$(am__objects_21)
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_23 = libadios_nompi_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_22)
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_24 = 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_24 = libadios_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_25 = 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_25 = libadios_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_26 = 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@	libadios_nompi_a-read_flexpath.$(OBJEXT)
 @BUILD_WRITE_TRUE at am_libadios_nompi_a_OBJECTS =  \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-common_adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_internals.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_internals_mxml.$(OBJEXT) \
- at BUILD_WRITE_TRUE@	$(am__objects_18) $(am__objects_20) \
- at BUILD_WRITE_TRUE@	$(am__objects_22) \
+ at BUILD_WRITE_TRUE@	$(am__objects_19) $(am__objects_21) \
+ at BUILD_WRITE_TRUE@	$(am__objects_23) \
 @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) \
@@ -529,8 +570,8 @@ am__objects_22 = $(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_23) $(am__objects_24) \
- at BUILD_WRITE_TRUE@	$(am__objects_25)
+ at BUILD_WRITE_TRUE@	$(am__objects_24) $(am__objects_25) \
+ at BUILD_WRITE_TRUE@	$(am__objects_26) $(am__objects_27)
 libadios_nompi_a_OBJECTS = $(am_libadios_nompi_a_OBJECTS)
 libadiosf_a_AR = $(AR) $(ARFLAGS)
 libadiosf_a_LIBADD =
@@ -600,57 +641,57 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.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_26 = $(am__objects_1) \
+am__objects_28 = $(am__objects_1) \
 	libadiosf_a-adios_transforms_common.$(OBJEXT) \
 	libadiosf_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosf_a-adios_copyspec.$(OBJEXT) \
 	libadiosf_a-adios_subvolume.$(OBJEXT)
-am__objects_27 = libadiosf_a-adios_transform_identity_read.$(OBJEXT) \
+am__objects_29 = libadiosf_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_bzip2_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_szip_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosf_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_28 = $(am__objects_1) \
+am__objects_30 = $(am__objects_1) \
 	libadiosf_a-adios_transforms_read.$(OBJEXT) \
 	libadiosf_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosf_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosf_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosf_a-adios_patchdata.$(OBJEXT) \
-	libadiosf_a-adios_selection_util.$(OBJEXT) $(am__objects_27)
-am__objects_29 = libadiosf_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_a-adios_selection_util.$(OBJEXT) $(am__objects_29)
+am__objects_31 = libadiosf_a-adios_transform_identity_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_bzip2_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_szip_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_isobar_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_aplod_write.$(OBJEXT) \
 	libadiosf_a-adios_transform_alacrity_write.$(OBJEXT)
-am__objects_30 = $(am__objects_1) \
+am__objects_32 = $(am__objects_1) \
 	libadiosf_a-adios_transforms_write.$(OBJEXT) \
 	libadiosf_a-adios_transforms_hooks_write.$(OBJEXT) \
 	libadiosf_a-adios_transforms_util.$(OBJEXT) \
 	libadiosf_a-adios_transforms_specparse.$(OBJEXT) \
-	$(am__objects_29)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_31 = libadiosf_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_31)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_33 = 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_32 = libadiosf_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_34 = 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_33 = libadiosf_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_35 = 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_34 = libadiosf_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_36 = 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_35 = libadiosf_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_37 = 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_36 = libadiosf_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_38 = libadiosf_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_internals_mxml.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_26) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_28) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_30) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_32) \
 @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) \
@@ -671,24 +712,24 @@ am__objects_30 = $(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_31) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_32) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_33) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_34) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_35)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_37 = libadiosf_a-adios_mpi_bgq.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_38 = libadiosf_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_39 = libadiosf_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_40 = libadiosf_a-adios_mpi.$(OBJEXT) \
+ 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) \
 @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_37) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_38) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_39)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_36) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_39) \
 @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 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) \
 @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) \
@@ -763,12 +804,12 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	core/mpidummy.c core/adiosf_read.c core/adiosf_defs_mod.f90 \
 	core/adiosf_write_mod.f90 core/adiosf_read_mod.f90
-am__objects_41 = $(am__objects_1) \
+am__objects_43 = $(am__objects_1) \
 	libadiosf_nompi_a-adios_transforms_common.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosf_nompi_a-adios_copyspec.$(OBJEXT) \
 	libadiosf_nompi_a-adios_subvolume.$(OBJEXT)
-am__objects_42 =  \
+am__objects_44 =  \
 	libadiosf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -776,15 +817,15 @@ am__objects_42 =  \
 	libadiosf_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_43 = $(am__objects_1) \
+am__objects_45 = $(am__objects_1) \
 	libadiosf_nompi_a-adios_transforms_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosf_nompi_a-adios_patchdata.$(OBJEXT) \
 	libadiosf_nompi_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_42)
-am__objects_44 =  \
+	$(am__objects_44)
+am__objects_46 =  \
 	libadiosf_nompi_a-adios_transform_identity_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -792,31 +833,31 @@ am__objects_44 =  \
 	libadiosf_nompi_a-adios_transform_isobar_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_aplod_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transform_alacrity_write.$(OBJEXT)
-am__objects_45 = $(am__objects_1) \
+am__objects_47 = $(am__objects_1) \
 	libadiosf_nompi_a-adios_transforms_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_hooks_write.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_util.$(OBJEXT) \
 	libadiosf_nompi_a-adios_transforms_specparse.$(OBJEXT) \
-	$(am__objects_44)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_46 = libadiosf_nompi_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_46)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_48 = 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_47 = libadiosf_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_49 = 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_48 = libadiosf_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_50 = 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_49 = libadiosf_nompi_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_51 = 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_50 = libadiosf_nompi_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_52 = 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_51 = libadiosf_nompi_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_53 = libadiosf_nompi_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_internals_mxml.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_41) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_43) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_45) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_47) \
 @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) \
@@ -837,15 +878,15 @@ am__objects_45 = $(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_46) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_47) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_48) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_49) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_50)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_52 = libadiosf_nompi_a-mpidummy.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_nompi_a_OBJECTS =  \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_50) \
 @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@	$(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 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) \
 @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) \
@@ -916,12 +957,12 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	core/mpidummy.c core/adiosf_read_v1.c core/adiosf_defs_mod.f90 \
 	core/adiosf_write_mod.f90
-am__objects_53 = $(am__objects_1) \
+am__objects_55 = $(am__objects_1) \
 	libadiosf_nompi_v1_a-adios_transforms_common.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_copyspec.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_subvolume.$(OBJEXT)
-am__objects_54 =  \
+am__objects_56 =  \
 	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) \
@@ -929,15 +970,15 @@ am__objects_54 =  \
 	libadiosf_nompi_v1_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_55 = $(am__objects_1) \
+am__objects_57 = $(am__objects_1) \
 	libadiosf_nompi_v1_a-adios_transforms_read.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_patchdata.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_54)
-am__objects_56 =  \
+	$(am__objects_56)
+am__objects_58 =  \
 	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) \
@@ -945,31 +986,31 @@ am__objects_56 =  \
 	libadiosf_nompi_v1_a-adios_transform_isobar_write.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transform_aplod_write.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transform_alacrity_write.$(OBJEXT)
-am__objects_57 = $(am__objects_1) \
+am__objects_59 = $(am__objects_1) \
 	libadiosf_nompi_v1_a-adios_transforms_write.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_hooks_write.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_util.$(OBJEXT) \
 	libadiosf_nompi_v1_a-adios_transforms_specparse.$(OBJEXT) \
-	$(am__objects_56)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_58 = libadiosf_nompi_v1_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_58)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_60 = 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_59 = libadiosf_nompi_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_61 = 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_60 = libadiosf_nompi_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_62 = 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_61 = libadiosf_nompi_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_63 = 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_62 = libadiosf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_64 = 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_63 = libadiosf_nompi_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_65 = libadiosf_nompi_v1_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_internals_mxml.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_53) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_55) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_57) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_59) \
 @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) \
@@ -990,15 +1031,15 @@ am__objects_57 = $(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_58) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_59) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_60) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_61) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_62)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_64 = libadiosf_nompi_v1_a-mpidummy.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_nompi_v1_a_OBJECTS =  \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_62) \
 @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_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 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) \
 @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)
@@ -1071,12 +1112,12 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.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_65 = $(am__objects_1) \
+am__objects_67 = $(am__objects_1) \
 	libadiosf_v1_a-adios_transforms_common.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosf_v1_a-adios_copyspec.$(OBJEXT) \
 	libadiosf_v1_a-adios_subvolume.$(OBJEXT)
-am__objects_66 =  \
+am__objects_68 =  \
 	libadiosf_v1_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1084,15 +1125,15 @@ am__objects_66 =  \
 	libadiosf_v1_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_67 = $(am__objects_1) \
+am__objects_69 = $(am__objects_1) \
 	libadiosf_v1_a-adios_transforms_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosf_v1_a-adios_patchdata.$(OBJEXT) \
 	libadiosf_v1_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_66)
-am__objects_68 =  \
+	$(am__objects_68)
+am__objects_70 =  \
 	libadiosf_v1_a-adios_transform_identity_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_zlib_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_bzip2_write.$(OBJEXT) \
@@ -1100,31 +1141,31 @@ am__objects_68 =  \
 	libadiosf_v1_a-adios_transform_isobar_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_aplod_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transform_alacrity_write.$(OBJEXT)
-am__objects_69 = $(am__objects_1) \
+am__objects_71 = $(am__objects_1) \
 	libadiosf_v1_a-adios_transforms_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_hooks_write.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_util.$(OBJEXT) \
 	libadiosf_v1_a-adios_transforms_specparse.$(OBJEXT) \
-	$(am__objects_68)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_70 = libadiosf_v1_a-adios_dataspaces.$(OBJEXT) \
+	$(am__objects_70)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_72 = 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_71 = libadiosf_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_73 = 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_72 = libadiosf_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_74 = 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_73 = libadiosf_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_75 = 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_74 = libadiosf_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_76 = 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_75 = libadiosf_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_77 = libadiosf_v1_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_internals_mxml.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_65) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_67) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_69) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_71) \
 @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) \
@@ -1145,24 +1186,24 @@ am__objects_69 = $(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_70) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_71) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_72) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_73) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_74)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_76 = libadiosf_v1_a-adios_mpi_bgq.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_77 = libadiosf_v1_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_78 = libadiosf_v1_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_79 = libadiosf_v1_a-adios_mpi.$(OBJEXT) \
+ 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) \
 @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_76) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_77) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_78)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_75) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_78) \
 @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 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) \
 @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)
@@ -1208,12 +1249,12 @@ am__libadiosread_a_SOURCES_DIST = core/adios_bp_v1.c \
 	read/read_bp_staged1.c read/read_dataspaces.c \
 	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c
-am__objects_80 = $(am__objects_1) \
+am__objects_82 = $(am__objects_1) \
 	libadiosread_a-adios_transforms_common.$(OBJEXT) \
 	libadiosread_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosread_a-adios_copyspec.$(OBJEXT) \
 	libadiosread_a-adios_subvolume.$(OBJEXT)
-am__objects_81 =  \
+am__objects_83 =  \
 	libadiosread_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1221,21 +1262,21 @@ am__objects_81 =  \
 	libadiosread_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosread_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_82 = $(am__objects_1) \
+am__objects_84 = $(am__objects_1) \
 	libadiosread_a-adios_transforms_read.$(OBJEXT) \
 	libadiosread_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosread_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosread_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosread_a-adios_patchdata.$(OBJEXT) \
 	libadiosread_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_81)
- at HAVE_DATASPACES_TRUE@am__objects_83 = libadiosread_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_84 = libadiosread_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_85 =  \
+	$(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 =  \
 @HAVE_DATATAP_TRUE@	libadiosread_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_86 =  \
+ at HAVE_FLEXPATH_TRUE@am__objects_88 =  \
 @HAVE_FLEXPATH_TRUE@	libadiosread_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_87 =  \
+ at HAVE_NSSI_TRUE@am__objects_89 =  \
 @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) \
@@ -1245,17 +1286,17 @@ am_libadiosread_a_OBJECTS = libadiosread_a-adios_bp_v1.$(OBJEXT) \
 	libadiosread_a-adios_error.$(OBJEXT) \
 	libadiosread_a-adios_read.$(OBJEXT) \
 	libadiosread_a-adios_read_v1.$(OBJEXT) \
-	libadiosread_a-common_read.$(OBJEXT) $(am__objects_80) \
-	$(am__objects_82) libadiosread_a-globals.$(OBJEXT) \
+	libadiosread_a-common_read.$(OBJEXT) $(am__objects_82) \
+	$(am__objects_84) 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_83) \
-	$(am__objects_84) $(am__objects_85) $(am__objects_86) \
-	$(am__objects_87)
+	libadiosread_a-read_bp_staged1.$(OBJEXT) $(am__objects_85) \
+	$(am__objects_86) $(am__objects_87) $(am__objects_88) \
+	$(am__objects_89)
 am__dist_libadiosread_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosread_a_OBJECTS =
 @HAVE_NSSI_TRUE at nodist_libadiosread_a_OBJECTS =  \
@@ -1303,12 +1344,12 @@ am__libadiosread_nompi_a_SOURCES_DIST = core/mpidummy.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_88 = $(am__objects_1) \
+am__objects_90 = $(am__objects_1) \
 	libadiosread_nompi_a-adios_transforms_common.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosread_nompi_a-adios_copyspec.$(OBJEXT) \
 	libadiosread_nompi_a-adios_subvolume.$(OBJEXT)
-am__objects_89 =  \
+am__objects_91 =  \
 	libadiosread_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1316,20 +1357,20 @@ am__objects_89 =  \
 	libadiosread_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_90 = $(am__objects_1) \
+am__objects_92 = $(am__objects_1) \
 	libadiosread_nompi_a-adios_transforms_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosread_nompi_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosread_nompi_a-adios_patchdata.$(OBJEXT) \
 	libadiosread_nompi_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_89)
- at HAVE_DATASPACES_TRUE@am__objects_91 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_92 =  \
+	$(am__objects_91)
+ at HAVE_DATASPACES_TRUE@am__objects_93 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
+ at HAVE_DIMES_TRUE@am__objects_94 =  \
 @HAVE_DIMES_TRUE@	libadiosread_nompi_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_93 = libadiosread_nompi_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_94 = libadiosread_nompi_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_95 = libadiosread_nompi_a-adios_nssi_config.$(OBJEXT) \
+ 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) \
 @HAVE_NSSI_TRUE@	libadiosread_nompi_a-read_nssi.$(OBJEXT)
 am_libadiosread_nompi_a_OBJECTS =  \
 	libadiosread_nompi_a-mpidummy.$(OBJEXT) \
@@ -1340,16 +1381,16 @@ am_libadiosread_nompi_a_OBJECTS =  \
 	libadiosread_nompi_a-adios_error.$(OBJEXT) \
 	libadiosread_nompi_a-adios_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_read_v1.$(OBJEXT) \
-	libadiosread_nompi_a-common_read.$(OBJEXT) $(am__objects_88) \
-	$(am__objects_90) libadiosread_nompi_a-adios_logger.$(OBJEXT) \
+	libadiosread_nompi_a-common_read.$(OBJEXT) $(am__objects_90) \
+	$(am__objects_92) 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_91) \
-	$(am__objects_92) $(am__objects_93) $(am__objects_94) \
-	$(am__objects_95)
+	libadiosread_nompi_a-read_bp.$(OBJEXT) $(am__objects_93) \
+	$(am__objects_94) $(am__objects_95) $(am__objects_96) \
+	$(am__objects_97)
 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)
@@ -1397,12 +1438,12 @@ am__libadiosreadf_a_SOURCES_DIST = core/adios_bp_v1.c \
 	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c core/adiosf_read.c \
 	core/adiosf_defs_mod.f90 core/adiosf_read_mod.f90
-am__objects_96 = $(am__objects_1) \
+am__objects_98 = $(am__objects_1) \
 	libadiosreadf_a-adios_transforms_common.$(OBJEXT) \
 	libadiosreadf_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosreadf_a-adios_copyspec.$(OBJEXT) \
 	libadiosreadf_a-adios_subvolume.$(OBJEXT)
-am__objects_97 =  \
+am__objects_99 =  \
 	libadiosreadf_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1410,28 +1451,28 @@ am__objects_97 =  \
 	libadiosreadf_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_98 = $(am__objects_1) \
+am__objects_100 = $(am__objects_1) \
 	libadiosreadf_a-adios_transforms_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosreadf_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosreadf_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosreadf_a-adios_patchdata.$(OBJEXT) \
 	libadiosreadf_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_97)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_99 = libadiosreadf_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_100 = libadiosreadf_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_101 = libadiosreadf_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_102 = libadiosreadf_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_103 = libadiosreadf_a-adios_nssi_config.$(OBJEXT) \
+	$(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) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_104 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_106 =  \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_endianness.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-futils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-common_read.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_96) $(am__objects_98) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_98) $(am__objects_100) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_logger.$(OBJEXT) \
@@ -1440,10 +1481,10 @@ am__objects_98 = $(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_99) $(am__objects_100) \
 @BUILD_FORTRAN_TRUE@	$(am__objects_101) $(am__objects_102) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_103)
- at BUILD_FORTRAN_TRUE@am_libadiosreadf_a_OBJECTS = $(am__objects_104) \
+ 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) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adiosf_read.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	adiosf_read_mod.$(OBJEXT)
@@ -1493,12 +1534,12 @@ am__libadiosreadf_nompi_a_SOURCES_DIST = core/mpidummy.c \
 	read/read_bp.c read/read_dataspaces.c read/read_dimes.c \
 	read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c core/adiosf_read.c
-am__objects_105 = $(am__objects_1) \
+am__objects_107 = $(am__objects_1) \
 	libadiosreadf_nompi_a-adios_transforms_common.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_copyspec.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_subvolume.$(OBJEXT)
-am__objects_106 =  \
+am__objects_108 =  \
 	libadiosreadf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1506,21 +1547,21 @@ am__objects_106 =  \
 	libadiosreadf_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_107 = $(am__objects_1) \
+am__objects_109 = $(am__objects_1) \
 	libadiosreadf_nompi_a-adios_transforms_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_patchdata.$(OBJEXT) \
 	libadiosreadf_nompi_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_106)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_108 = libadiosreadf_nompi_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_109 = libadiosreadf_nompi_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_110 = libadiosreadf_nompi_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_111 = libadiosreadf_nompi_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_112 = libadiosreadf_nompi_a-adios_nssi_config.$(OBJEXT) \
+	$(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) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_nompi_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_113 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_115 =  \
 @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) \
@@ -1529,17 +1570,17 @@ am__objects_107 = $(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_105) $(am__objects_107) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_107) $(am__objects_109) \
 @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_108) $(am__objects_109) \
 @BUILD_FORTRAN_TRUE@	$(am__objects_110) $(am__objects_111) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_112)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_112) $(am__objects_113) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_114)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_113) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_115) \
 @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 =
@@ -1588,33 +1629,33 @@ am__libadiosreadf_nompi_v1_a_SOURCES_DIST = core/mpidummy.c \
 	read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
-am__objects_114 = $(am__objects_1) \
+am__objects_116 = $(am__objects_1) \
 	libadiosreadf_nompi_v1_a-adios_transforms_common.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_copyspec.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_subvolume.$(OBJEXT)
-am__objects_115 = libadiosreadf_nompi_v1_a-adios_transform_identity_read.$(OBJEXT) \
+am__objects_117 = libadiosreadf_nompi_v1_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_szip_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_116 = $(am__objects_1) \
+am__objects_118 = $(am__objects_1) \
 	libadiosreadf_nompi_v1_a-adios_transforms_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_patchdata.$(OBJEXT) \
 	libadiosreadf_nompi_v1_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_115)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_117 = libadiosreadf_nompi_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_118 = libadiosreadf_nompi_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_119 = libadiosreadf_nompi_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_120 = libadiosreadf_nompi_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_121 = libadiosreadf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+	$(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) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_nompi_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_122 = libadiosreadf_nompi_v1_a-mpidummy.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@am__objects_124 = 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) \
@@ -1622,17 +1663,17 @@ am__objects_116 = $(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_114) $(am__objects_116) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_116) $(am__objects_118) \
 @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_117) $(am__objects_118) \
 @BUILD_FORTRAN_TRUE@	$(am__objects_119) $(am__objects_120) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_121)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_121) $(am__objects_122) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_123)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_122) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_124) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adiosf_read_v1.$(OBJEXT)
 libadiosreadf_nompi_v1_a_OBJECTS =  \
 	$(am_libadiosreadf_nompi_v1_a_OBJECTS)
@@ -1677,12 +1718,12 @@ am__libadiosreadf_v1_a_SOURCES_DIST = core/adios_bp_v1.c \
 	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
-am__objects_123 = $(am__objects_1) \
+am__objects_125 = $(am__objects_1) \
 	libadiosreadf_v1_a-adios_transforms_common.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transforms_hooks.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_copyspec.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_subvolume.$(OBJEXT)
-am__objects_124 =  \
+am__objects_126 =  \
 	libadiosreadf_v1_a-adios_transform_identity_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
@@ -1690,28 +1731,28 @@ am__objects_124 =  \
 	libadiosreadf_v1_a-adios_transform_isobar_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_aplod_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transform_alacrity_read.$(OBJEXT)
-am__objects_125 = $(am__objects_1) \
+am__objects_127 = $(am__objects_1) \
 	libadiosreadf_v1_a-adios_transforms_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_transforms_datablock.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_patchdata.$(OBJEXT) \
 	libadiosreadf_v1_a-adios_selection_util.$(OBJEXT) \
-	$(am__objects_124)
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_126 = libadiosreadf_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_127 = libadiosreadf_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_128 = libadiosreadf_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_129 = libadiosreadf_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_130 = libadiosreadf_v1_a-adios_nssi_config.$(OBJEXT) \
+	$(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) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_131 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_133 =  \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_endianness.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-futils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-common_read.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_123) $(am__objects_125) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_125) $(am__objects_127) \
 @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) \
@@ -1720,11 +1761,11 @@ am__objects_125 = $(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_126) $(am__objects_127) \
 @BUILD_FORTRAN_TRUE@	$(am__objects_128) $(am__objects_129) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_130)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_130) $(am__objects_131) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_132)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_131) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_133) \
 @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) \
@@ -1801,7 +1842,7 @@ SOURCES = $(libadios_a_SOURCES) $(dist_libadios_a_SOURCES) \
 	$(nssi_staging_server_SOURCES)
 DIST_SOURCES = $(am__libadios_a_SOURCES_DIST) \
 	$(am__dist_libadios_a_SOURCES_DIST) \
-	$(libadios_internal_nompi_a_SOURCES) \
+	$(am__libadios_internal_nompi_a_SOURCES_DIST) \
 	$(am__libadios_nompi_a_SOURCES_DIST) \
 	$(am__libadiosf_a_SOURCES_DIST) \
 	$(am__dist_libadiosf_a_SOURCES_DIST) \
@@ -1911,9 +1952,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -1980,6 +2027,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@ $(am__append_16)
@@ -2083,26 +2134,27 @@ 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_28) $(am__append_34) $(am__append_52)
+CLEANFILES = $(am__append_29) $(am__append_35) $(am__append_53)
 include_HEADERS = public/adios.h public/adios_types.h \
 	public/adios_read.h public/adios_error.h public/adios_mpi.h \
 	public/mpidummy.h public/adios_read_v1.h \
 	public/adios_read_v1_defs.h public/adios_read_v2.h \
-	public/adios_selection.h public/adios_schema.h
-nodist_include_HEADERS = $(am__append_33) $(am__append_51)
+	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_42) libadiosread_nompi.a $(am__append_60)
-libadiosread_a_CPPFLAGS = $(am__append_40) $(ADIOSLIB_EXTRA_CPPFLAGS) \
-	$(ADIOSREADLIB_CPPFLAGS) $(am__append_69)
-libadiosreadf_a_CPPFLAGS = $(am__append_48) $(am__append_50)
-libadiosread_nompi_a_CPPFLAGS = $(am__append_58) $(MACRODEFFLAG)_NOMPI \
+	$(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 \
 	$(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) \
-	$(am__append_70)
-libadiosreadf_nompi_a_CPPFLAGS = $(am__append_66) $(am__append_68)
-libadiosread_a_CFLAGS = $(am__append_41)
-libadiosreadf_a_CFLAGS = $(am__append_49)
-libadiosread_nompi_a_CFLAGS = $(am__append_59)
-libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
+	$(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)
 
 # Identity plugin:
 
@@ -2202,7 +2254,7 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_WRITE_TRUE@	$(am__append_3) $(am__append_6) \
 @BUILD_WRITE_TRUE@	$(am__append_9) $(am__append_12) \
 @BUILD_WRITE_TRUE@	$(am__append_15) $(am__append_20) \
- at BUILD_WRITE_TRUE@	$(am__append_22) $(am__append_24)
+ at BUILD_WRITE_TRUE@	$(am__append_22) $(am__append_25)
 @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 \
@@ -2221,7 +2273,7 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_WRITE_TRUE@	read/read_bp_staged.c read/read_bp_staged1.c \
 @BUILD_WRITE_TRUE@	write/adios_posix.c write/adios_posix1.c \
 @BUILD_WRITE_TRUE@	$(am__append_7) $(am__append_10) \
- at BUILD_WRITE_TRUE@	$(am__append_13)
+ at BUILD_WRITE_TRUE@	$(am__append_13) $(am__append_23)
 @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 \
@@ -2253,8 +2305,8 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @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_23) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_26)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_24) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_27)
 @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 \
@@ -2266,19 +2318,19 @@ transforms_write_SOURCES = $(transforms_write_HDRS) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at FortranLibSEQSources = core/mpidummy.c
 @BUILD_WRITE_TRUE at libadios_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_17) \
- at BUILD_WRITE_TRUE@	$(am__append_25) $(am__append_29)
+ at BUILD_WRITE_TRUE@	$(am__append_26) $(am__append_30)
 @BUILD_WRITE_TRUE at libadios_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
 @BUILD_WRITE_TRUE at libadios_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_30)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_31)
 @BUILD_WRITE_TRUE at libadios_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
 @BUILD_WRITE_TRUE at libadiosf_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_19) \
- at BUILD_WRITE_TRUE@	$(am__append_27) $(am__append_31)
+ at BUILD_WRITE_TRUE@	$(am__append_28) $(am__append_32)
 @BUILD_WRITE_TRUE at libadiosf_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
 @BUILD_WRITE_TRUE at libadiosf_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_32)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_33)
 @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
@@ -2323,9 +2375,9 @@ libadiosread_a_SOURCES = core/adios_bp_v1.c core/adios_endianness.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_35) \
-	$(am__append_36) $(am__append_37) $(am__append_38) \
-	$(am__append_39)
+	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)
 @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 \
@@ -2338,9 +2390,9 @@ libadiosread_a_SOURCES = core/adios_bp_v1.c core/adios_endianness.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_43) \
- at BUILD_FORTRAN_TRUE@	$(am__append_44) $(am__append_45) \
- at BUILD_FORTRAN_TRUE@	$(am__append_46) $(am__append_47)
+ 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)
 @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) \
@@ -2356,9 +2408,9 @@ libadiosread_nompi_a_SOURCES = core/mpidummy.c core/adios_bp_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_53) \
-	$(am__append_54) $(am__append_55) $(am__append_56) \
-	$(am__append_57)
+	core/qhashtbl.c read/read_bp.c $(am__append_54) \
+	$(am__append_55) $(am__append_56) $(am__append_57) \
+	$(am__append_58)
 @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 \
@@ -2370,9 +2422,9 @@ libadiosread_nompi_a_SOURCES = core/mpidummy.c core/adios_bp_v1.c \
 @BUILD_FORTRAN_TRUE@	$(transforms_read_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_61) $(am__append_62) \
- at BUILD_FORTRAN_TRUE@	$(am__append_63) $(am__append_64) \
- at BUILD_FORTRAN_TRUE@	$(am__append_65)
+ 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)
 @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
@@ -2380,23 +2432,12 @@ libadiosread_nompi_a_SOURCES = core/mpidummy.c core/adios_bp_v1.c \
 @BUILD_FORTRAN_TRUE at libadiosreadf_nompi_v1_a_CPPFLAGS = $(libadiosreadf_nompi_a_CPPFLAGS)
 @BUILD_FORTRAN_TRUE at libadiosreadf_nompi_v1_a_CFLAGS = $(libadiosreadf_nompi_a_CFLAGS)
 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_internals_mxml.c \
-                                    core/adios_timing.c \
-                                    core/util.c \
-                                    core/qhashtbl.c \
-                                    core/futils.c \
-                                    core/adios_transport_hooks.c 
-
+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)
 
 #bin_PROGRAMS+=adios_flags
@@ -3197,12 +3238,6 @@ libadios_internal_nompi_a-adios_logger.o: core/adios_logger.c
 libadios_internal_nompi_a-adios_logger.obj: core/adios_logger.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_logger.obj `if test -f 'core/adios_logger.c'; then $(CYGPATH_W) 'core/adios_logger.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_logger.c'; fi`
 
-libadios_internal_nompi_a-adios_internals_mxml.o: core/adios_internals_mxml.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_internals_mxml.o `test -f 'core/adios_internals_mxml.c' || echo '$(srcdir)/'`core/adios_internals_mxml.c
-
-libadios_internal_nompi_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
-
 libadios_internal_nompi_a-adios_timing.o: core/adios_timing.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_timing.o `test -f 'core/adios_timing.c' || echo '$(srcdir)/'`core/adios_timing.c
 
@@ -3233,6 +3268,12 @@ libadios_internal_nompi_a-adios_transport_hooks.o: core/adios_transport_hooks.c
 libadios_internal_nompi_a-adios_transport_hooks.obj: core/adios_transport_hooks.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transport_hooks.obj `if test -f 'core/adios_transport_hooks.c'; then $(CYGPATH_W) 'core/adios_transport_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_transport_hooks.c'; fi`
 
+libadios_internal_nompi_a-adios_internals_mxml.o: core/adios_internals_mxml.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_internals_mxml.o `test -f 'core/adios_internals_mxml.c' || echo '$(srcdir)/'`core/adios_internals_mxml.c
+
+libadios_internal_nompi_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
+
 libadios_nompi_a-adios.o: core/adios.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios.o `test -f 'core/adios.c' || echo '$(srcdir)/'`core/adios.c
 
@@ -3599,6 +3640,18 @@ libadios_nompi_a-read_datatap.o: read/read_datatap.c
 libadios_nompi_a-read_datatap.obj: read/read_datatap.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-read_datatap.obj `if test -f 'read/read_datatap.c'; then $(CYGPATH_W) 'read/read_datatap.c'; else $(CYGPATH_W) '$(srcdir)/read/read_datatap.c'; fi`
 
+libadios_nompi_a-adios_flexpath.o: write/adios_flexpath.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_flexpath.o `test -f 'write/adios_flexpath.c' || echo '$(srcdir)/'`write/adios_flexpath.c
+
+libadios_nompi_a-adios_flexpath.obj: write/adios_flexpath.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_flexpath.obj `if test -f 'write/adios_flexpath.c'; then $(CYGPATH_W) 'write/adios_flexpath.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_flexpath.c'; fi`
+
+libadios_nompi_a-read_flexpath.o: 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.o `test -f 'read/read_flexpath.c' || echo '$(srcdir)/'`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`
+
 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
 
diff --git a/src/core/adios.c b/src/core/adios.c
index b6d469f..61b594d 100644
--- a/src/core/adios.c
+++ b/src/core/adios.c
@@ -24,6 +24,7 @@
 #include "core/adios_internals_mxml.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_logger.h"
+#include "core/adios_timing.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -378,11 +379,20 @@ int64_t adios_define_var (int64_t group_id, const char * name
                                    ,type
                                    ,dimensions
                                    ,global_dimensions, local_offsets
-                                   ,NULL // NCSU ALACRITY-ADIOS
                                    );
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// adios_common_set_transform is in adios_internals.c
+// set the transform method for the selected variable (default is "none")
+int adios_set_transform (int64_t var_id, const char *transform_type_str)
+{
+    adios_errno = err_no_error;
+    return adios_common_set_transform (var_id, transform_type_str);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
 
 // adios_common_define_attribute is in adios_internals.c
 
@@ -418,3 +428,142 @@ void adios_timing_write_xml (int64_t fd_p, const char* filename)
     adios_timing_write_xml_common (fd_p, filename);
 }
 
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_schema_version (int64_t group_id, char * schema_version)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_schema_version (g, schema_version);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_mesh (int64_t group_id, const char * varname, const char * meshname)
+{
+    return adios_common_define_var_mesh ( group_id, varname, meshname, ""); 
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_centering (int64_t group_id, const char * varname, const char * centering)
+{
+    return adios_common_define_var_centering (group_id, varname, centering, "");
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_file (int64_t group_id, char * name, char * file)
+{
+    return  adios_common_define_mesh_file (group_id, name, file);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_timesteps (const char * timesteps, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_var_timesteps (timesteps, g, name, "");
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_timescale (const char * timescale, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_var_timescale (timescale, g, name, "");
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_timeseriesformat (const char * timeseries, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_var_timeseriesformat (timeseries, g, name, "");
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_var_hyperslab ( const char * hyperslab, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_var_hyperslab (hyperslab, g, name, ""); 
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_timevarying (const char * timevarying, int64_t group_id, const char * name)
+{
+    return adios_common_define_mesh_timeVarying (timevarying, group_id, name);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_timesteps (const char * timesteps, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_timeSteps (timesteps, g, name);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_timescale (const char * timescale, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_timeScale (timescale, g, name);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_timeseriesformat (const char * timeseries, int64_t group_id, const char * name)
+{
+    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_timeSeriesFormat (timeseries, g, name);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_group (const char * group, int64_t group_id, const char * name)
+{
+    return adios_common_define_mesh_group (group_id, name, group);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_uniform (char * dimensions,
+                               char * origin,
+                               char * spacing,
+                               char * maximum,
+                               char * nspace,
+                               int64_t group_id,
+                               const char * name
+                              )
+{
+//    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_uniform (dimensions, origin, spacing, maximum, nspace, name, group_id);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_rectilinear (char * dimensions,
+                                   char * coordinates,
+                                   char * nspace,
+                                   int64_t group_id,
+                                   const char * name
+                                  )
+{
+//    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_rectilinear (dimensions, coordinates, nspace, name, group_id);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_structured (char * dimensions,
+                                  char * points,
+                                  char * nspace,
+                                  int64_t group_id,
+                                  const char * name
+                                 )
+{
+//    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_structured (dimensions, nspace, points, name, group_id);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+int adios_define_mesh_unstructured (char * points,
+                                    char * data,
+                                    char * count,
+                                    char * cell_type,
+                                    char * npoints,
+                                    char * nspace,
+                                    int64_t group_id,
+                                    const char * name
+                                   )
+{
+//    struct adios_group_struct * g = (struct adios_group_struct *) group_id;
+    return adios_common_define_mesh_unstructured (points, data, count, cell_type, nspace, npoints, name, group_id);
+}
+
diff --git a/src/core/adios_bp_v1.c b/src/core/adios_bp_v1.c
index ed4c904..332eed2 100644
--- a/src/core/adios_bp_v1.c
+++ b/src/core/adios_bp_v1.c
@@ -21,6 +21,7 @@
 #include "core/adios_endianness.h"
 #include "core/adios_logger.h"
 #include "public/adios_error.h"
+#include "transforms/adios_transforms_write.h"
 
 #if defined(__APPLE__)
 #    define O_LARGEFILE 0
@@ -153,11 +154,7 @@ int adios_parse_index_offsets_v1 (struct adios_bp_buffer_struct_v1 * b)
     }
 
     uint64_t attrs_end = b->file_size - 28;
-    int i;
-
-    char * t;
 
-    t = b->buff + b->offset;
     b->pg_index_offset = *(uint64_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
         swap_64(b->pg_index_offset);
@@ -170,11 +167,9 @@ int adios_parse_index_offsets_v1 (struct adios_bp_buffer_struct_v1 * b)
         swap_64(b->vars_index_offset);
     }
 
-    t = b->buff + b->offset;
     b->offset += 8;
 
     b->attrs_index_offset = *(uint64_t *) (b->buff + b->offset);
-    t = b->buff + b->offset;
     if(b->change_endianness == adios_flag_yes) {
         swap_64(b->attrs_index_offset);
     }
@@ -310,14 +305,15 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
     log_debug ("%s: hashtbl=%p size=%d\n", __func__,
                hashtbl_vars, (hashtbl_vars ? hashtbl_vars->size(hashtbl_vars) : 0));
 
-    uint16_t vars_count;
+    /* BP Format v1: vars_count and attrs_count was 16bit, now it's 32 bit */
+    uint32_t vars_count;
     uint64_t vars_length;
 
-    vars_count = *(uint16_t *) (b->buff + b->offset);
+    vars_count = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(vars_count);
+        swap_32(vars_count);
     }
-    b->offset += 2;
+    b->offset += 4;
 
     vars_length = *(uint64_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
@@ -340,7 +336,6 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
         uint32_t var_entry_length;
         uint16_t len;
         uint64_t characteristics_sets_count;
-        uint64_t type_size;
 
         var_entry_length = *(uint32_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -348,11 +343,12 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
         }
         b->offset += 4;
 
-        (*root)->id = *(uint16_t *) (b->buff + b->offset);
+        /* BP Format v1: varid/attrid was 16bit, now it's 32 bit */
+        (*root)->id = *(uint32_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
-            swap_16((*root)->id);
+            swap_32((*root)->id);
         }
-        b->offset += 2;
+        b->offset += 4;
 
         len = *(uint16_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -387,7 +383,6 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
         flag = *(b->buff + b->offset);
         (*root)->type = (enum ADIOS_DATATYPES) flag;
         b->offset += 1;
-        type_size = adios_get_type_size ((*root)->type, "");
 
         characteristics_sets_count = *(uint64_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -558,6 +553,8 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                                 (*root)->characteristics [j].stats[0][adios_statistic_max].data = data;
                                 (*root)->characteristics [j].bitmap |= (1 << adios_statistic_max);
                                 break;
+                            default:
+                                break;
                         }
                         break;
                     }
@@ -669,7 +666,6 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_offset:
                     {
-                        uint64_t size = adios_get_type_size ((*root)->type, "");
                         (*root)->characteristics [j].offset =
                                             *(uint64_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
@@ -682,7 +678,6 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_payload_offset:
                     {
-                        uint64_t size = adios_get_type_size ((*root)->type, "");
                         (*root)->characteristics [j].payload_offset =
                                             *(uint64_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
@@ -754,6 +749,12 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                         adios_transform_deserialize_transform_characteristic(&(*root)->characteristics[j].transform, b);
                         break;
                     }
+
+                    case adios_characteristic_var_id:
+                    {
+                        // this cannot happen, only attributes have variable references
+                        break;
+                    }
                 }
                 item++;
             }
@@ -797,14 +798,15 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
     root = attrs_root;
 
-    uint16_t attrs_count;
+    /* BP Format v1: vars_count and attrs_count was 16bit, now it's 32 bit */
+    uint32_t attrs_count;
     uint64_t attrs_length;
 
-    attrs_count = *(uint16_t *) (b->buff + b->offset);
+    attrs_count = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(attrs_count);
+        swap_32(attrs_count);
     }
-    b->offset += 2;
+    b->offset += 4;
 
     attrs_length = *(uint64_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
@@ -827,7 +829,6 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
         uint32_t attr_entry_length;
         uint16_t len;
         uint64_t characteristics_sets_count;
-        uint64_t type_size;
 
         attr_entry_length = *(uint32_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -835,11 +836,12 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
         }
         b->offset += 4;
 
-        (*root)->id = *(uint16_t *) (b->buff + b->offset);
+        /* BP Format v1: varid/attrid was 16bit, now it's 32 bit */
+        (*root)->id = *(uint32_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
-            swap_16((*root)->id);
+            swap_32((*root)->id);
         }
-        b->offset += 2;
+        b->offset += 4;
 
         len = *(uint16_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -874,7 +876,6 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
         flag = *(b->buff + b->offset);
         (*root)->type = (enum ADIOS_DATATYPES) flag;
         b->offset += 1;
-        type_size = adios_get_type_size ((*root)->type, "");
 
         characteristics_sets_count = *(uint64_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
@@ -1011,7 +1012,6 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_offset:
                     {
-                        uint64_t size = adios_get_type_size ((*root)->type, "");
                         (*root)->characteristics [j].offset =
                                             *(uint64_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
@@ -1024,7 +1024,6 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_bitmap:
                     {
-                        uint32_t size = adios_get_type_size ((*root)->type, "");
                         (*root)->characteristics [j].offset =
                                             *(uint32_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
@@ -1037,7 +1036,6 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_payload_offset:
                     {
-                        uint64_t size = adios_get_type_size ((*root)->type, "");
                         (*root)->characteristics [j].payload_offset =
                                             *(uint64_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
@@ -1074,12 +1072,13 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                     case adios_characteristic_var_id:
                     {
+                        /* BP Format v1: varid/attrid was 16bit, now it's 32 bit */
                         (*root)->characteristics [j].var_id =
-                                            *(uint16_t *) (b->buff + b->offset);
+                                            *(uint32_t *) (b->buff + b->offset);
                         if(b->change_endianness == adios_flag_yes) {
-                            swap_16((*root)->characteristics [j].var_id);
+                            swap_32((*root)->characteristics [j].var_id);
                         }
-                        b->offset += 2;
+                        b->offset += 4;
 
                         break;
                     }
@@ -1095,6 +1094,9 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
                         */
                         break;
                     }
+                    
+                    default:
+                        break;
                 }
                 item++;
             }
@@ -1110,10 +1112,10 @@ int adios_parse_process_group_header_v1 (struct adios_bp_buffer_struct_v1 * b
                        ,struct adios_process_group_header_struct_v1 * pg_header
                             )
 {
-    if (b->length - b->offset < 16)
+    if (b->length - b->offset < 24)
     {
         adios_error(err_invalid_buffer_group, "adios_parse_process_group_header_v1"
-                "requires a buffer of at least 16 bytes. "
+                "requires a buffer of at least 24 bytes. "
                 "Only %llu were provided\n",b->length - b->offset);
         return 1;
     }
@@ -1132,7 +1134,6 @@ int adios_parse_process_group_header_v1 (struct adios_bp_buffer_struct_v1 * b
     b->offset += 1;
 
     uint16_t len;
-    uint8_t count;
     len = *(uint16_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
         swap_16(len);
@@ -1143,11 +1144,11 @@ int adios_parse_process_group_header_v1 (struct adios_bp_buffer_struct_v1 * b
     memcpy (pg_header->name, b->buff + b->offset, len);
     b->offset += len;
 
-    pg_header->coord_var_id = *(uint16_t *) (b->buff + b->offset);
+    pg_header->coord_var_id = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(pg_header->coord_var_id);
+        swap_32(pg_header->coord_var_id);
     }
-    b->offset += 2;
+    b->offset += 4;
     len = *(uint16_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
         swap_16(len);
@@ -1214,10 +1215,10 @@ int adios_parse_vars_header_v1 (struct adios_bp_buffer_struct_v1 * b
                                )
 {
 
-    if (b->length - b->offset < 10)
+    if (b->length - b->offset < 12)
     {
         adios_error(err_invalid_buffer_vars, "adios_parse_vars_header_v1"
-                "requires a buffer of at least 10 bytes. "
+                "requires a buffer of at least 12 bytes. "
                 "Only %llu were provided\n", b->length - b->offset);
 
         vars_header->count = 0;
@@ -1226,11 +1227,11 @@ int adios_parse_vars_header_v1 (struct adios_bp_buffer_struct_v1 * b
         return 1;
     }
 
-    vars_header->count = *(uint16_t *) (b->buff + b->offset);
+    vars_header->count = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(vars_header->count);
+        swap_32(vars_header->count);
     }
-    b->offset += 2;
+    b->offset += 4;
     vars_header->length = *(uint64_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
         swap_64(vars_header->length);
@@ -1244,10 +1245,10 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
                                ,struct adios_var_header_struct_v1 * var_header
                                )
 {
-    if (b->length - b->offset < 21)
+    if (b->length - b->offset < 23)
     {
         adios_error(err_invalid_buffer_vars, "adios_parse_var_data_header_v1"
-                "requires a buffer of at least 21 bytes."
+                "requires a buffer of at least 23 bytes."
                 "Only %llu were provided\n", b->length - b->offset);
 
         return 1;
@@ -1266,11 +1267,11 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
 
     //validate remaining length
 
-    var_header->id = *(uint16_t *) (b->buff + b->offset);
+    var_header->id = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(var_header->id);
+        swap_32(var_header->id);
     }
-    b->offset += 2;
+    b->offset += 4;
 
     len = *(uint16_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
@@ -1348,13 +1349,13 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
         if (flag == 'y')
         {
             (*root)->dimension.rank = 0;
-            (*root)->dimension.var_id = *(uint16_t *) (b->buff + b->offset);
+            (*root)->dimension.var_id = *(uint32_t *) (b->buff + b->offset);
             if(b->change_endianness == adios_flag_yes) {
-                swap_16((*root)->dimension.var_id);
+                swap_32((*root)->dimension.var_id);
             }
             if ((*root)->dimension.var_id == 0)
                 (*root)->dimension.time_index = adios_flag_yes;
-            b->offset += 2;
+            b->offset += 4;
         }
         else
         {
@@ -1371,14 +1372,14 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
         if (flag == 'y')
         {
             (*root)->global_dimension.rank = 0;
-            (*root)->global_dimension.var_id = *(uint16_t *)
+            (*root)->global_dimension.var_id = *(uint32_t *)
                                                          (b->buff + b->offset);
             if(b->change_endianness == adios_flag_yes) {
-                swap_16((*root)->global_dimension.var_id);
+                swap_32((*root)->global_dimension.var_id);
             }
             if ((*root)->global_dimension.var_id == 0)
                 (*root)->global_dimension.time_index = adios_flag_yes;
-            b->offset += 2;
+            b->offset += 4;
         }
         else
         {
@@ -1396,13 +1397,13 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
         if (flag == 'y')
         {
             (*root)->local_offset.rank = 0;
-            (*root)->local_offset.var_id = *(uint16_t *) (b->buff + b->offset);
+            (*root)->local_offset.var_id = *(uint32_t *) (b->buff + b->offset);
             if(b->change_endianness == adios_flag_yes) {
-                swap_16((*root)->local_offset.var_id);
+                swap_32((*root)->local_offset.var_id);
             }
             if ((*root)->local_offset.var_id == 0)
                 (*root)->local_offset.time_index = adios_flag_yes;
-            b->offset += 2;
+            b->offset += 4;
         }
         else
         {
@@ -1585,10 +1586,10 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
 
             case adios_characteristic_dimensions:
             {
-                uint8_t dim_count;
+                //uint8_t dim_count;
                 uint16_t dim_length;
 
-                dim_count = *(b->buff + b->offset);
+                //dim_count = *(b->buff + b->offset);
                 b->offset += 1;
                 dim_length = *(uint16_t *) (b->buff + b->offset);
                 if(b->change_endianness == adios_flag_yes) {
@@ -1669,6 +1670,12 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
                 b->offset += val_size;
                 break;
             }
+
+            case adios_characteristic_var_id:
+            case adios_characteristic_file_index:
+            case adios_characteristic_time_index:
+                // these are not in the var header in the PG
+                break;
         }
     }
 
@@ -1821,8 +1828,6 @@ int adios_parse_var_data_payload_v1 (struct adios_bp_buffer_struct_v1 * b
         return 1;
     }
 
-    uint64_t size = adios_get_type_size (var_header->type, "");
-
     if (var_payload)
     {
         if (var_payload->payload)
@@ -1867,11 +1872,11 @@ int adios_parse_attributes_header_v1 (struct adios_bp_buffer_struct_v1 * b
         return 1;
     }
 
-    attrs_header->count = *(uint16_t *) (b->buff + b->offset);
+    attrs_header->count = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(attrs_header->count);
+        swap_32(attrs_header->count);
     }
-    b->offset += 2;
+    b->offset += 4;
 
     attrs_header->length = *(uint64_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
@@ -1903,11 +1908,11 @@ int adios_parse_attribute_v1 (struct adios_bp_buffer_struct_v1 * b
         swap_32(attribute_length);
     }
     b->offset += 4;
-    attribute->id = *(uint16_t *) (b->buff + b->offset);
+    attribute->id = *(uint32_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
-        swap_16(attribute->id);
+        swap_32(attribute->id);
     }
-    b->offset += 2;
+    b->offset += 4;
 
     len = *(uint16_t *) (b->buff + b->offset);
     if(b->change_endianness == adios_flag_yes) {
@@ -1935,11 +1940,11 @@ int adios_parse_attribute_v1 (struct adios_bp_buffer_struct_v1 * b
     b->offset += 1;
     if (attribute->is_var == adios_flag_yes)
     {
-        attribute->var_id = *(uint16_t *) (b->buff + b->offset);
+        attribute->var_id = *(uint32_t *) (b->buff + b->offset);
         if(b->change_endianness == adios_flag_yes) {
-            swap_16(attribute->var_id);
+            swap_32(attribute->var_id);
         }
-        b->offset += 2;
+        b->offset += 4;
         attribute->type = adios_unknown;
         attribute->length = 0;
         attribute->value = 0;
@@ -1998,7 +2003,6 @@ int adios_clear_attribute_v1 (struct adios_attribute_struct_v1 * attribute)
 
 void * adios_dupe_data_scalar (enum ADIOS_DATATYPES type, void * in)
 {
-    void * out;
     int element_size = adios_get_type_size (type, in);
 
     void * d;
@@ -2067,8 +2071,6 @@ void adios_init_buffer_read_version (struct adios_bp_buffer_struct_v1 * b)
 // last 4 bytes of file
 void adios_posix_read_version (struct adios_bp_buffer_struct_v1 * b)
 {
-    uint64_t buffer_size;
-    uint64_t start;
     uint64_t r;
 
     adios_init_buffer_read_version (b);
@@ -2287,6 +2289,10 @@ uint64_t adios_get_stat_size (void * data, enum ADIOS_DATATYPES type, enum ADIOS
 
                 case adios_statistic_cnt:
                     return adios_get_type_size(adios_unsigned_integer, "");
+
+                case adios_statistic_hist:
+                    // this is not supported
+                    return 0;
             }
         case adios_double_complex:
             switch (stat_id)
@@ -2302,6 +2308,10 @@ uint64_t adios_get_stat_size (void * data, enum ADIOS_DATATYPES type, enum ADIOS
 
                 case adios_statistic_cnt:
                     return adios_get_type_size(adios_unsigned_integer, "");
+
+                case adios_statistic_hist:
+                    // this is not supported
+                    return 0;
             }
         default:
         {
@@ -2332,7 +2342,7 @@ uint64_t adios_get_stat_size (void * data, enum ADIOS_DATATYPES type, enum ADIOS
                     return size;
                 }
                 default:
-                    return -1;
+                    return 0;
             }
         }
     }
diff --git a/src/core/adios_bp_v1.h b/src/core/adios_bp_v1.h
index 974b8c9..06d5f6d 100644
--- a/src/core/adios_bp_v1.h
+++ b/src/core/adios_bp_v1.h
@@ -13,7 +13,8 @@
 #include "core/adios_transport_hooks.h"
 #include "core/qhashtbl.h"
 
-#define ADIOS_VERSION_NUM_MASK                       0x00000011
+#define ADIOS_VERSION_BP_FORMAT                      2
+#define ADIOS_VERSION_NUM_MASK                       0x000000FF
 #define ADIOS_VERSION_HAVE_SUBFILE                   0x00000100
 #define ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC 0x00000200
 enum ADIOS_CHARACTERISTICS
@@ -124,7 +125,7 @@ struct adios_index_characteristic_struct_v1
 {
     uint64_t offset;  // beginning of the var or attr entry
     struct adios_index_characteristic_dims_struct_v1 dims;
-    uint16_t var_id;
+    uint32_t var_id;
     void * value;
     uint64_t payload_offset;   // beginning of the var or attr payload
     uint32_t file_index;  // subfile index
@@ -147,7 +148,7 @@ struct adios_index_characteristic_struct_v1
 
 struct adios_index_var_struct_v1
 {
-    uint16_t id;
+    uint32_t id;
     char * group_name;
     char * var_name;
     char * var_path;
@@ -163,7 +164,7 @@ struct adios_index_var_struct_v1
 
 struct adios_index_attribute_struct_v1
 {
-    uint16_t id;
+    uint32_t id;
     char * group_name;
     char * attr_name;
     char * attr_path;
@@ -202,7 +203,7 @@ struct adios_method_info_struct_v1
 struct adios_dimension_item_struct_v1
 {
     uint64_t rank;
-    uint16_t var_id;
+    uint32_t var_id;
     enum ADIOS_FLAG time_index;
 };
 
@@ -218,7 +219,7 @@ struct adios_process_group_header_struct_v1
 {
     enum ADIOS_FLAG host_language_fortran;
     char * name;
-    uint16_t coord_var_id;
+    uint32_t coord_var_id;
     char * time_index_name;
     uint32_t time_index;
     uint8_t methods_count;
@@ -227,19 +228,19 @@ struct adios_process_group_header_struct_v1
 
 struct adios_vars_header_struct_v1
 {
-    uint16_t count;
+    uint32_t count;
     uint64_t length;
 };
 
 struct adios_attributes_header_struct_v1
 {
-    uint16_t count;
+    uint32_t count;
     uint64_t length;
 };
 
 struct adios_var_header_struct_v1
 {
-    uint16_t id;
+    uint32_t id;
     char * name;
     char * path;
     enum ADIOS_DATATYPES type;
@@ -256,13 +257,13 @@ struct adios_var_payload_struct_v1
 
 struct adios_attribute_struct_v1
 {
-    uint16_t id;
+    uint32_t id;
     char * name;
     char * path;
 
     enum ADIOS_FLAG is_var;
 
-    uint16_t var_id;
+    uint32_t var_id;
 
     enum ADIOS_DATATYPES type;
     uint32_t length;
diff --git a/src/core/adios_copyspec.c b/src/core/adios_copyspec.c
index d684961..df209c9 100644
--- a/src/core/adios_copyspec.c
+++ b/src/core/adios_copyspec.c
@@ -12,6 +12,7 @@
 #include <assert.h>
 #include "util.h"
 #include "core/adios_copyspec.h"
+#include "core/adios_subvolume.h"
 #include "core/common_read.h"
 #include "public/adios_selection.h"
 
@@ -52,8 +53,6 @@ void adios_copyspec_init(adios_subvolume_copy_spec *copy_spec,
 int adios_copyspec_init_from_intersection(adios_subvolume_copy_spec *copy_spec, int ndim,
                                           const uint64_t *dst_dims, const uint64_t *dst_goffsets,
                                           const uint64_t *src_dims, const uint64_t *src_goffsets) {
-    int dim;
-
     // Initialize with number of dimensions and source/destination dimensions
     // Offsets and subvolume dimension are unknown at this time
     // Arg order:
diff --git a/src/core/adios_copyspec.h b/src/core/adios_copyspec.h
index 0bce1bc..459dd34 100644
--- a/src/core/adios_copyspec.h
+++ b/src/core/adios_copyspec.h
@@ -234,6 +234,8 @@ int adios_copyspec_is_subvolume_src_covering(const adios_subvolume_copy_spec *co
  */
 int adios_copyspec_is_subvolume_dst_covering(const adios_subvolume_copy_spec *copyspec);
 
+int adios_copyspec_is_noop(const adios_subvolume_copy_spec *copy_spec);
+
 /*
  * @return an ADIOS_SELECTION describing the subvolume within the source
  *         volume.
diff --git a/src/core/adios_endianness.c b/src/core/adios_endianness.c
index 4346e6d..3dff567 100644
--- a/src/core/adios_endianness.c
+++ b/src/core/adios_endianness.c
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include "public/adios_types.h"
 #include "core/adios_logger.h"
+#include "core/adios_internals.h"
 
 void show_bytes(unsigned char * start, int len)
 {
diff --git a/src/core/adios_internals.c b/src/core/adios_internals.c
index bf57db2..853a76d 100644
--- a/src/core/adios_internals.c
+++ b/src/core/adios_internals.c
@@ -34,6 +34,7 @@
 #include "adios_transforms_hooks.h"
 #include "adios_transforms_read.h"
 #include "adios_transforms_write.h"
+#include "adios_transforms_specparse.h"
 
 struct adios_method_list_struct * adios_methods = 0;
 struct adios_group_list_struct * adios_groups = 0;
@@ -80,17 +81,9 @@ int adios_int_is_num (char * temp) // 1 == yes, 0 == no
 struct adios_var_struct * adios_find_var_by_name (struct adios_group_struct * g,
                                                   const char * fullpath)
 {
-    struct adios_var_struct * var = NULL;
-
-    if (!fullpath) {
-        return NULL;
-    }
-
     // Find variable in the hash table
-    var = (struct adios_var_struct *)
+    return  (struct adios_var_struct *)
             g->hashtbl_vars->get (g->hashtbl_vars, fullpath);
-
-    return var;
 }
 
 /*
@@ -205,7 +198,7 @@ struct adios_attribute_struct * adios_find_attribute_by_name
 }
 
 struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
-        ,uint16_t id
+        ,uint32_t id
         )
 {
     while (root)
@@ -221,7 +214,7 @@ struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
 
 struct adios_attribute_struct * adios_find_attribute_by_id
 (struct adios_attribute_struct * root
- ,uint16_t id
+ ,uint32_t id
  )
 {
     while (root)
@@ -698,6 +691,8 @@ int adios_parse_scalar_string (enum ADIOS_DATATYPES type, char * value, void **
 
                                 return 1;
                             }
+                        default:
+                                return 1;
                     }
                 }
             }
@@ -789,6 +784,8 @@ int adios_parse_scalar_string (enum ADIOS_DATATYPES type, char * value, void **
 
                                 return 1;
                             }
+                        default:
+                                return 1;
                     }
                 }
             }
@@ -1256,7 +1253,7 @@ void adios_append_dimension (struct adios_dimension_struct ** root
 
 void adios_append_attribute (struct adios_attribute_struct ** root
         ,struct adios_attribute_struct * attribute
-        ,uint16_t id
+        ,uint32_t id
         )
 {
     while (root)
@@ -1297,7 +1294,7 @@ int adios_common_declare_group (int64_t * id, const char * name
     g->member_count = 0; // will be set in adios_append_group
     g->vars = NULL;
     g->vars_tail = NULL;
-    g->hashtbl_vars = qhashtbl(100);
+    g->hashtbl_vars = qhashtbl(500);
     g->vars_written = NULL;
     g->vars_written_tail = NULL;
     g->attributes = NULL;
@@ -1327,7 +1324,7 @@ int adios_common_free_group (int64_t id)
 
     if (!root)
     {
-        adios_error (err_unspecified, "Err in adios_common_free_group()\n");
+        adios_error (err_unspecified, "Err in adios_common_free_group(): no groups left\n");
         return -1;
     }
     while (root && root->group->id != g->id)
@@ -1339,12 +1336,12 @@ int adios_common_free_group (int64_t id)
     if (!root)
     {
         // Didn't find the group
-        adios_error (err_unspecified, "Err in adios_common_free_group()\n");
+        adios_error (err_unspecified, "Err in adios_common_free_group(): did not find requested group\n");
         return -1;
     }
 
     // old_root->root->root next
-    if (old_root == adios_groups)
+    if (root == adios_groups)
     {
         adios_groups =  root->next;
     }
@@ -1503,7 +1500,7 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
         , const char * bin_count
         )
 {
-    struct adios_var_struct * root = g->vars, * var;
+    struct adios_var_struct * var;
 
     var = adios_find_var_by_name (g, var_name);
 
@@ -1655,7 +1652,6 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
         ,const char * dimensions
         ,const char * global_dimensions
         ,const char * local_offsets
-        ,char *transform_type_str // NCSU ALACRITY-ADIOS
         )
 {
     struct adios_group_struct * t = (struct adios_group_struct *) group_id;
@@ -1664,7 +1660,6 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
     char * dim_temp;
     char * g_dim_temp;
     char * lo_dim_temp;
-    enum ADIOS_FLAG flag;
     uint8_t i;
     if (dimensions)
         dim_temp = strdup (dimensions);
@@ -1701,7 +1696,7 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
     v->stats = 0;
     v->bitmap = 0;
 
-    // NCSU ALACRITY-ADIOS - Initialize transform metadata
+    // NCSU ALACRITY-ADIOS - Initialize transform metadata (set to 'none')
     adios_transform_init_transform_var(v);
 
     // Q.L. - Check whether stats are disabled or not
@@ -1805,25 +1800,34 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
     if (lo_dim_temp)
         free (lo_dim_temp);
 
+    v->id = ++t->member_count;
+    adios_append_var (t, v);
+
+    return (int64_t)v;
+}
+
+/* Set the transformation method for a variable. Only one transformation will work for each variable */
+int adios_common_set_transform (int64_t var_id, const char *transform_type_str)
+{
+    struct adios_var_struct * v = (struct adios_var_struct *)var_id;
+    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);
+    struct adios_transform_spec *transform_spec = adios_transform_parse_spec(transform_type_str, v->transform_spec);
     if (transform_spec->transform_type == adios_transform_unknown) {
-        log_error("Unknown transform type \"%s\" specified for variable \"%s\", ignoring it...\n",
+        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;
     }
 
     // This function sets the transform_type field. It does nothing if transform_type is none.
     // Note: ownership of the transform_spec struct is given to this function
-    v = adios_transform_define_var(t, v, transform_spec);
-
-    v->id = ++t->member_count;
-    adios_append_var (t, v);
-
-    return (int64_t)v;
+    v = adios_transform_define_var(v, transform_spec);
+    return adios_errno;
 }
 
+
 void adios_common_get_group (int64_t * group_id, const char * name)
 {
     struct adios_group_list_struct * g = adios_get_groups ();
@@ -1959,7 +1963,7 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
     struct adios_dimension_struct * d = v->dimensions;
 
     overhead += 8; // length of var entry
-    overhead += 2; // member id
+    overhead += 4; // member id
     overhead += 2; // length of name
     overhead += strlen (v->name); // name
     overhead += 2; // length of path
@@ -1981,7 +1985,7 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
         }
         else
         {
-            overhead += 2; // member id
+            overhead += 4; // member id
         }
 
         overhead += 1; // var flag
@@ -1994,7 +1998,7 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
         }
         else
         {
-            overhead += 2; // member id
+            overhead += 4; // member id
         }
 
         overhead += 1; // var flag
@@ -2007,7 +2011,7 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
         }
         else
         {
-            overhead += 2; // member id
+            overhead += 4; // member id
         }
 
         d = d->next;
@@ -2022,14 +2026,14 @@ uint32_t adios_calc_attribute_overhead_v1 (struct adios_attribute_struct * a)
     uint32_t overhead = 0;
 
     overhead += 4; // attribute length
-    overhead += 2; // member id
+    overhead += 4; // member id
     overhead += 2; // length of name
     overhead += strlen (a->name); // name
     overhead += 2; // length of path
     overhead += strlen (a->path); // path
     overhead += 1; // var flag
     if (a->var)
-        overhead += 2; // var member id
+        overhead += 4; // var member id
     else
     {
         overhead += 1; // datatype
@@ -2051,7 +2055,7 @@ uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd)
     overhead += 1; // host language flag
     overhead += 2; // length of group name
     overhead += strlen (fd->group->name); // group name
-    overhead += 2; // coordination var id
+    overhead += 4; // coordination var id
     overhead += 2; // length of time index name
     overhead += ((fd->group->time_index_name)
             ? strlen (fd->group->time_index_name)
@@ -2070,7 +2074,7 @@ uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd)
         m = m->next;
     }
 
-    overhead += 2; // count of vars
+    overhead += 4; // count of vars
     overhead += 8; // length of vars section
 
     while (v)
@@ -2080,7 +2084,7 @@ uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd)
         v = v->next;
     }
 
-    overhead += 2; // attributes count
+    overhead += 4; // attributes count
     overhead += 8; // attributes length
 
     while (a)
@@ -2102,7 +2106,6 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
     uint8_t flag;
     struct adios_var_struct * var;
     uint16_t len;
-    char * temp;
 
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &total_size, 8);
 
@@ -2117,12 +2120,12 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
     var = adios_find_var_by_name (g, g->group_by);
     if (var)
     {
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var->id, 2);
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var->id, 4);
     }
     else
     {
-        uint16_t i = 0;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &i, 2);
+        uint32_t i = 0;
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &i, 4);
     }
 
     len = ((g->time_index_name) ? strlen (g->time_index_name) : 0);
@@ -2202,7 +2205,6 @@ static void index_append_var_v1 (
         ,struct adios_index_var_struct_v1 * item
         )
 {
-    struct adios_index_var_struct_v1 * root = index->vars_root;
     struct adios_index_var_struct_v1 * olditem;
 
     olditem = (struct adios_index_var_struct_v1 *)
@@ -2408,8 +2410,7 @@ void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
         )
 {
     struct adios_index_process_group_struct_v1 * p2 = 0, * p1_temp, * p2_temp, * p2_temp_prev;
-    struct adios_index_var_struct_v1 * v2 = 0, * v1_temp, * v2_temp, * v2_temp_prev;
-    struct adios_index_attribute_struct_v1 * a2 = 0, * a1_temp, * a2_temp, * a2_temp_prev;
+    struct adios_index_var_struct_v1 * v1_temp;
     int i, j;
 
     while (*p1)
@@ -2677,7 +2678,7 @@ struct adios_index_struct_v1 * adios_alloc_index_v1 (int alloc_hashtables)
     index->attrs_root = NULL;
     index->attrs_tail = NULL;
     if (alloc_hashtables) {
-        index->hashtbl_vars  = qhashtbl(100);
+        index->hashtbl_vars  = qhashtbl(500);
         //index->hashtbl_attrs = qhashtbl(100);
         index->hashtbl_attrs = NULL; // not used yet
     } else {
@@ -2698,6 +2699,7 @@ void adios_free_index_v1 (struct adios_index_struct_v1 * index)
         index->hashtbl_vars->free  (index->hashtbl_vars);
     if (index->hashtbl_attrs)
         index->hashtbl_attrs->free (index->hashtbl_attrs);
+    free(index);
 }
 
 void adios_clear_index_v1 (struct adios_index_struct_v1 * index)
@@ -2783,6 +2785,7 @@ static uint64_t cast_var_data_as_uint64 (const char * parent_name
         case adios_string:
         case adios_complex:
         case adios_double_complex:
+        default:
             adios_error (err_unspecified,
                     "Cannot convert type %s to integer for var %s\n",
                     adios_type_to_string_int (type), parent_name);
@@ -2984,6 +2987,11 @@ void adios_copy_var_written (struct adios_group_struct * g, struct adios_var_str
 
                 break;
             }
+        default:
+            {
+                adios_error (err_unspecified, "Reached unexpected branch in %s:%s:%d\n",
+                        __FILE__,__func__, __LINE__);
+            }
     }
 
     /* Insert new variable into the copy list */
@@ -3185,8 +3193,6 @@ void adios_build_index_v1 (struct adios_file_struct * fd,
     struct adios_attribute_struct * a = g->attributes;
     struct adios_index_process_group_struct_v1 * g_item;
 
-    uint64_t process_group_count = 0;
-
     g_item = (struct adios_index_process_group_struct_v1 *)
         malloc (sizeof (struct adios_index_process_group_struct_v1));
     g_item->group_name = (g->name ? strdup (g->name) : 0L);
@@ -3365,6 +3371,11 @@ void adios_build_index_v1 (struct adios_file_struct * fd,
 
                         break;
                     }
+                default:
+                    {
+                        adios_error (err_unspecified, "Reached unexpected branch in %s:%s:%d\n",
+                                __FILE__,__func__, __LINE__);
+                    }
             }
             v_index->next = 0;
 
@@ -3443,8 +3454,8 @@ int adios_write_index_v1 (char ** buffer
         )
 {
     uint64_t groups_count = 0;
-    uint16_t vars_count = 0;
-    uint16_t attrs_count = 0;
+    uint32_t vars_count = 0;
+    uint32_t attrs_count = 0;
 
     uint64_t index_size = 0;
     uint64_t pg_index_start = index_start;
@@ -3540,7 +3551,7 @@ int adios_write_index_v1 (char ** buffer
     vars_index_start = buffer_offset_start + index_start;
     index_size = 0;
 
-    *buffer_offset += (2 + 8); // save space for count and size
+    *buffer_offset += (4 + 8); // save space for count and size
 
     while (vars_root)
     {
@@ -3554,9 +3565,9 @@ int adios_write_index_v1 (char ** buffer
 
         *buffer_offset += 4; // save space for var length
 
-        buffer_write (buffer, buffer_size, buffer_offset, &vars_root->id, 2);
-        index_size += 2;
-        var_size += 2;
+        buffer_write (buffer, buffer_size, buffer_offset, &vars_root->id, 4);
+        index_size += 4;
+        var_size += 4;
 
         len = strlen (vars_root->group_name);
         buffer_write (buffer, buffer_size, buffer_offset, &len, 2);
@@ -3899,6 +3910,11 @@ int adios_write_index_v1 (char ** buffer
                         characteristic_set_length += size;
                     }
                     break;
+                default:
+                    {
+                        adios_error (err_unspecified, "Reached unexpected branch in %s:%s:%d\n",
+                                __FILE__,__func__, __LINE__);
+                    }
             }
             // characteristics count/size prefix
             buffer_write (buffer, buffer_size, &characteristic_set_start
@@ -3917,14 +3933,14 @@ int adios_write_index_v1 (char ** buffer
     log_debug ("%s: wrote %d variables into the var-index buffer\n", __func__, vars_count);
 
     // vars index count/size prefix
-    buffer_write (buffer, buffer_size, &buffer_offset_start, &vars_count, 2);
+    buffer_write (buffer, buffer_size, &buffer_offset_start, &vars_count, 4);
     buffer_write (buffer, buffer_size, &buffer_offset_start, &index_size, 8);
 
     buffer_offset_start = *buffer_offset; // save to write the attrs_count/size
     attrs_index_start = buffer_offset_start + index_start;
     index_size = 0;
 
-    *buffer_offset += (2 + 8); // save space for count and size
+    *buffer_offset += (4 + 8); // save space for count and size
 
     while (attrs_root)
     {
@@ -3938,9 +3954,9 @@ int adios_write_index_v1 (char ** buffer
 
         *buffer_offset += 4; // save space for attr length
 
-        buffer_write (buffer, buffer_size, buffer_offset, &attrs_root->id, 2);
-        index_size += 2;
-        attr_size += 2;
+        buffer_write (buffer, buffer_size, buffer_offset, &attrs_root->id, 4);
+        index_size += 4;
+        attr_size += 4;
 
         len = strlen (attrs_root->group_name);
         buffer_write (buffer, buffer_size, buffer_offset, &len, 2);
@@ -4098,11 +4114,11 @@ int adios_write_index_v1 (char ** buffer
                 attr_size += 1;
                 characteristic_set_length += 1;
                 buffer_write (buffer, buffer_size, buffer_offset
-                        ,&attrs_root->characteristics [i].var_id, 2
+                        ,&attrs_root->characteristics [i].var_id, 4
                         );
-                index_size += 2;
-                attr_size += 2;
-                characteristic_set_length += 2;
+                index_size += 4;
+                attr_size += 4;
+                characteristic_set_length += 4;
             }
 
             // characteristics count/size prefix
@@ -4120,7 +4136,7 @@ int adios_write_index_v1 (char ** buffer
     }
 
     // attrs index count/size prefix
-    buffer_write (buffer, buffer_size, &buffer_offset_start, &attrs_count, 2);
+    buffer_write (buffer, buffer_size, &buffer_offset_start, &attrs_count, 4);
     buffer_write (buffer, buffer_size, &buffer_offset_start, &index_size, 8);
 
 
@@ -4167,7 +4183,9 @@ int adios_write_version_v1 (char ** buffer
     else
         test = 0;
 
-    test += 1;   // first data storage version
+    // version number 1 byte, endiness 1 byte,
+    // the rest is user-defined options 2 bytes
+    test += ADIOS_VERSION_BP_FORMAT;   // file format version
     // For the new read API to be able to read back older file format,
     // set this flag
     test |= ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC;
@@ -4194,7 +4212,7 @@ int adios_write_version_flag_v1 (char ** buffer
 
     // version number 1 byte, endiness 1 byte,
     // the rest is user-defined options 2 bytes
-    test += 1;   // master index file version
+    test += ADIOS_VERSION_BP_FORMAT;   // file format version
     // For the new read API to be able to read back older file format,
     // set this flag
     test |= ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC | flag;
@@ -4221,7 +4239,7 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
     }
     else   // it is a var
     {
-        size += 2;  // size of var ID
+        size += 4;  // size of var ID
     }
 
     size += 1; // var (y or n)
@@ -4235,7 +4253,7 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
     }
     else
     {
-        size += 2;  // size of var ID
+        size += 4;  // size of var ID
     }
 
     size += 1; // var (y or n)
@@ -4249,7 +4267,7 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
     }
     else
     {
-        size += 2;  // size of var ID
+        size += 4;  // size of var ID
     }
 
     return size;
@@ -4275,7 +4293,7 @@ uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
         )
 {
     uint64_t size = 0;
-    uint16_t id;
+    uint32_t id;
     uint8_t var;
 
     if (    dimension->dimension.var == NULL
@@ -4302,8 +4320,8 @@ uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
-        size += 2;
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 4);
+        size += 4;
     }
 
     if (    dimension->global_dimension.var == NULL
@@ -4330,8 +4348,8 @@ uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
-        size += 2;
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 4);
+        size += 4;
     }
 
     if (    dimension->local_offset.var == NULL
@@ -4358,8 +4376,8 @@ uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
-        size += 2;
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 4);
+        size += 4;
     }
 
     return size;
@@ -4440,7 +4458,6 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
         )
 {
     uint8_t flag;
-    uint64_t size;
     uint16_t len;
     uint8_t characteristic_set_count = 0;
     uint32_t characteristic_set_length = 0;
@@ -4452,7 +4469,6 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
 
     // depending on if it is an array or not, generate a different
     // additional set of characteristics
-    size = adios_get_type_size (v->type, v->data);
 
     switch (v->type)
     {
@@ -4608,6 +4624,8 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
 
         case adios_string:
             break;
+        default:
+            break;
     }
     // characteristics count/size prefix
     buffer_write (&fd->buffer, &fd->buffer_size, &characteristic_set_start
@@ -4628,9 +4646,9 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct
     enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(var);
 
     if (var->transform_type != adios_transform_none) {
-        total_size = adios_transform_get_pre_transform_var_size (fd->group, var);
+        total_size = adios_transform_get_pre_transform_var_size (var);
     } else {
-        total_size = adios_get_var_size (var, fd->group, var->data);
+        total_size = adios_get_var_size (var, var->data);
     }
 
     if (var->bitmap == 0)
@@ -4642,7 +4660,7 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct
 #if 1
 #define HIST(a) \
     { \
-        int j = 0, low, high, mid; \
+        int low, high, mid; \
         low=0; \
         high=hist->num_breaks - 1; \
         if (hist->breaks[low] > a) \
@@ -4845,8 +4863,8 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct
             */
 
             *cnt_r = *cnt_i = *cnt_m = 0;
-            *min_r = *min_i = *min_m = INFINITY;
-            *max_r = *max_i = *max_m = -INFINITY;
+            *min_r = *min_i = *min_m = HUGE_VAL;
+            *max_r = *max_i = *max_m = -HUGE_VAL;
             *sum_r = *sum_i = *sum_m = 0;
             *sum_square_r = *sum_square_i = *sum_square_m = 0;
 
@@ -4975,14 +4993,15 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct
             cnt_i = (uint32_t *) stats[2][map[adios_statistic_cnt]].data;
 
             *cnt_r = *cnt_i = *cnt_m = 0;
-            *min_r = *min_i = *min_m = INFINITY;
-            *max_r = *max_i = *max_m = -INFINITY;
+            *min_r = *min_i = *min_m = HUGE_VAL;
+            *max_r = *max_i = *max_m = -HUGE_VAL;
             *sum_r = *sum_i = *sum_m = 0;
             *sum_square_r = *sum_square_i = *sum_square_m = 0;
 
             while ((size * sizeof(double)) < total_size)
             {
-                long double magnitude = sqrt((long double) data [size] * data [size] + (long double) data[size + 1] * data[size + 1]);
+                magnitude = sqrt((long double) data [size] * data [size] + 
+                                 (long double) data[size + 1] * data[size + 1]);
 
                 // Both real and imaginary parts have to be finite, else skip calculating the characteristic
                 if ( isnan(data [size]) || !isfinite(data [size]) || isnan(data[size + 1]) || !isfinite(data[size + 1]) ) {
@@ -5051,7 +5070,6 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct
 
         default:
         {
-            uint64_t data = adios_unknown;
             var->stats = 0;
 
             return 0;
@@ -5073,8 +5091,8 @@ uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
     fd->offset += 8;              // save space for the size
     total_size += 8;              // makes final parsing easier
 
-    buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &v->id, 2);
-    total_size += 2;
+    buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &v->id, 4);
+    total_size += 4;
 
     len = strlen (v->name);
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &len, 2);
@@ -5104,7 +5122,7 @@ uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
     // adios_generate_var_characteristics_v1 (fd, v);
     total_size += adios_write_var_characteristics_v1 (fd, v);
 
-    total_size += adios_get_var_size (v, fd->group, v->data); // payload
+    total_size += adios_get_var_size (v, v->data); // payload
 
     buffer_write (&fd->buffer, &fd->buffer_size, &start, &total_size, 8);
 
@@ -5123,7 +5141,7 @@ int adios_write_var_payload_v1 (struct adios_file_struct * fd
     uint64_t size;
 
     // write payload
-    size = adios_get_var_size (var, fd->group, var->data);
+    size = adios_get_var_size (var, var->data);
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, var->data, size);
 
     if (fd->bytes_written < fd->offset)
@@ -5146,8 +5164,8 @@ int adios_write_attribute_v1 (struct adios_file_struct * fd
     a->write_offset = fd->offset + fd->base_offset; // save offset in file
     fd->offset += 4;
 
-    buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &a->id, 2);
-    size += 2;
+    buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &a->id, 4);
+    size += 4;
 
     len = strlen (a->name);
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &len, 2);
@@ -5170,9 +5188,9 @@ int adios_write_attribute_v1 (struct adios_file_struct * fd
     if (a->var)
     {
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                ,&a->var->id, 2
+                ,&a->var->id, 4
                 );
-        size += 2;
+        size += 4;
     }
     else
     {
@@ -5208,7 +5226,7 @@ int adios_write_open_vars_v1 (struct adios_file_struct * fd)
     // it is now setup to write the vars and then the attrs on close
     fd->vars_start = fd->offset;
 
-    fd->offset += (2 + 8); // (count + size)
+    fd->offset += (4 + 8); // (count + size)
 
     if (fd->bytes_written < fd->offset)
         fd->bytes_written = fd->offset;
@@ -5220,7 +5238,7 @@ int adios_write_close_vars_v1 (struct adios_file_struct * fd)
 {
     // close the var area (count and total size) and write the attributes
     uint64_t size = fd->offset - fd->vars_start;
-    buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &fd->vars_written, 2);
+    buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &fd->vars_written, 4);
 
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &size, 8);
 
@@ -5230,7 +5248,7 @@ int adios_write_close_vars_v1 (struct adios_file_struct * fd)
 int adios_write_open_attributes_v1 (struct adios_file_struct * fd)
 {
     fd->vars_start = fd->offset;   // save the start of attr area for size
-    fd->offset += (2 + 8);         // space to write the count and size
+    fd->offset += (4 + 8);         // space to write the count and size
     fd->vars_written = 0;
 
     if (fd->bytes_written < fd->offset)
@@ -5243,7 +5261,7 @@ int adios_write_close_attributes_v1 (struct adios_file_struct * fd)
 {
     // write attribute count and total size
     uint64_t size = fd->offset - fd->vars_start;
-    buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &fd->vars_written, 2);
+    buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &fd->vars_written, 4);
 
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->vars_start, &size, 8);
 
@@ -5307,8 +5325,7 @@ int adios_multiply_dimensions (uint64_t * size
 // TODO: Factor out "var", since needed because of adios_multiply_dimensions, which needs
 //       it only for debugging output.
 uint64_t adios_get_dimension_space_size (struct adios_var_struct *var
-                                        ,struct adios_dimension_struct * d
-                                        ,struct adios_group_struct * group) {
+                                        ,struct adios_dimension_struct * d) {
     uint64_t size = 1;
     while (d)
     {
@@ -5393,13 +5410,11 @@ uint64_t adios_get_dimension_space_size (struct adios_var_struct *var
 }
 
 // NCSU ALACRITY-ADIOS: Refactored to call the above dimension space compute code
-uint64_t adios_get_var_size (struct adios_var_struct * var
-        ,struct adios_group_struct * group, void * data
-        )
+uint64_t adios_get_var_size (struct adios_var_struct * var, void * data)
 {
     uint64_t size = adios_get_type_size (var->type, data);
     if (var->dimensions)
-        size *= adios_get_dimension_space_size(var, var->dimensions, group);
+        size *= adios_get_dimension_space_size(var, var->dimensions);
 
     return size;
 }
@@ -5560,22 +5575,22 @@ int queue_dequeue (Queue * queue, void ** data)
     return list_rem_next (queue, NULL, data);
 }
 
+
 // Functions for non-XML API fo ADIOS Schema some of which are also called from functions in adios_internals_mxml.c
-int adios_define_schema_version(struct adios_group_struct * new_group, char * schema_version){
-    int64_t      p_new_group = (int64_t) new_group;
+int adios_common_define_schema_version (struct adios_group_struct * new_group, char * schema_version)
+{
+    int64_t p_new_group = (int64_t) new_group;
 
     if (strcasecmp (schema_version,"")){
         char * ver;// copy version
         char * d;  // dot location
         char * ptr_end;
         ver = strdup (schema_version);
-        char * schema_version_major;
-        char * schema_version_minor;
         char * schema_version_major_att_nam;
         char * schema_version_minor_att_nam;
         d = strtok (ver, ".");
         int counter = 0; // counter
-        //int slength = 0;
+
         while (d)
         {
             int slength = 0;
@@ -5589,13 +5604,11 @@ int adios_define_schema_version(struct adios_group_struct * new_group, char * sc
                     slength = slength + strlen("version_major") + 1;
                     schema_version_major_att_nam = malloc (slength);
                     strcpy(schema_version_major_att_nam,"adios_schema/version_major");
-                    //schema_version_major = strdup(d);
                     adios_common_define_attribute (p_new_group,schema_version_major_att_nam,"/",adios_string,d,"");
                 }else if (counter == 1){
                     slength = slength + strlen("version_minor") + 1;
                     schema_version_minor_att_nam = malloc (slength);
                     strcpy(schema_version_minor_att_nam,"adios_schema/version_minor");
-                    //schema_version_minor = strdup(d);
                     adios_common_define_attribute (p_new_group,schema_version_minor_att_nam,"/",adios_string,d,"");
                 }
             }
@@ -5610,15 +5623,16 @@ int adios_define_schema_version(struct adios_group_struct * new_group, char * sc
     return 0;
 }
 
+
 // Parse mesh time series (single file for multiple time steps or
 // multiple files for time steps, basename + timeformat + extension)
-int adios_define_mesh_timeSeriesFormat (const char * timeseries
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_common_define_mesh_timeSeriesFormat (const char * timeseries,
+                                               struct adios_group_struct * new_group,
+                                               const char * name
+                                              )
 {
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * format_att_nam = 0;     // extension format .xxxx att name
     char * format_att_val = 0;     // extension format att value
 
@@ -5626,29 +5640,33 @@ int adios_define_mesh_timeSeriesFormat (const char * timeseries
     // The number indicates how to write the time steps. Ex: 4 ==>
     // varname.XXXX.png where XXXX is the time step padded with 0s
     // We do not fail if this is not given as variables all have nsteps
-    if (!timeseries){
+    if (!timeseries || !strcmp(timeseries,"")){
         return 1;
     }
 
     char * ptr_end;
     d1 = strdup (timeseries);
-    if (strtod (d1, &ptr_end)){
+
+    double tmp_d = strtod (d1, &ptr_end);
+    if (!(ptr_end && ptr_end[0]==0))
+    {
         adios_conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
         adios_common_define_attribute (p_new_group,format_att_nam,"/",adios_double,d1,"");
-        free(format_att_val);    }
-        free (d1);
-        return 1;
+        free(format_att_val);
+    }
+    free (d1);
+    return 1;
 }
 
 // Parse mesh time scale (real time tracking, not integers)
-int adios_define_mesh_timeScale (const char * timescale
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_common_define_mesh_timeScale (const char * timescale,
+                                        struct adios_group_struct * new_group,
+                                        const char * name
+                                       )
 {
     char * c;                      // comma location
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * gettscalefrom0 = 0;     // scale attribute xml value
     char * gettscalefrom1 = 0;     // scale attribute xml value
     char * gettscalefrom2 = 0;     // scale attribute xml value
@@ -5671,13 +5689,12 @@ int adios_define_mesh_timeScale (const char * timescale
     // 2. start/stride/count 3 components
     // 3. min/max range where this mesh is used
     // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
 
     /* We do not fail if this is not given as variables all have nsteps
        in ADIOS_inq_var = # of times the var was written
        */
-    if (!timescale){
-        printf("time-scale attribute for mesh: %s not provided.\n", name);
+    if (!timescale || !strcmp(timescale,"")){
+//        printf("time-scale attribute for mesh: %s not provided.\n", name);
         return 1;
     }
 
@@ -5689,17 +5706,16 @@ int adios_define_mesh_timeScale (const char * timescale
     {
         struct adios_var_struct * var = 0;
         //if (adios_int_is_num (c))
-        if (!strtod (c,&ptr_end))
+        double tmp_d1;
+        tmp_d1 = strtod (c,&ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
         {
-            var =
-                adios_find_var_by_name (new_group, c);
+            var = adios_find_var_by_name (new_group, c);
             if (!var)
             {
                 log_warn ("config.xml: invalid variable %s\n"
-                        "for time scale of mesh: %s\n"
-                        ,c
-                        ,name
-                        );
+                          "for time scale of mesh: %s\n",
+                          c, name);
                 free (d1);
 
                 return 0;
@@ -5737,24 +5753,31 @@ int adios_define_mesh_timeScale (const char * timescale
         c = strtok (NULL, ",");
     }
     if (counter == 3){
+        double tmp_d2;
         time_start_att_val = strdup(gettscalefrom0);
         adios_conca_mesh_att_nam(&time_start_att_nam, name, "time-scale-start");
         // if this is string
-        if (!strtod (time_start_att_val, &ptr_end))
+        tmp_d2 = strtod (time_start_att_val, &ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_start_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
         time_stride_att_val = strdup(gettscalefrom1);
         adios_conca_mesh_att_nam(&time_stride_att_nam, name, "time-scale-stride");
         // if this is string
-        if (!strtod (time_stride_att_val, &ptr_end))
+        tmp_d2 = strtod (time_stride_att_val, &ptr_end);
+//        if (!strtod (time_stride_att_val, &ptr_end))
+        if (!(ptr_end && ptr_end[0]==0))
             adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
         time_count_att_val = strdup(gettscalefrom2);
         adios_conca_mesh_att_nam(&time_count_att_nam, name, "time-scale-count");
         // if this is string
-        if (!strtod (time_count_att_val, &ptr_end))
+        tmp_d2 = strtod (time_count_att_val, &ptr_end);
+//        if (!strtod (time_count_att_val, &ptr_end))
+        if (!(ptr_end && ptr_end[0]==0))
             adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
@@ -5765,16 +5788,21 @@ int adios_define_mesh_timeScale (const char * timescale
         free(gettscalefrom1);
         free(gettscalefrom0);
     }else if (counter == 2) {
+        double tmp_d2;
         adios_conca_mesh_att_nam(&time_min_att_nam, name, "time-scale-min");
         // if this is string
-        if (!strtod (time_min_att_val, &ptr_end))
+        tmp_d2 = strtod (time_min_att_nam, &ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_min_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
         time_max_att_val = strdup(gettscalefrom1);
         adios_conca_mesh_att_nam(&time_max_att_nam, name, "time-scale-max");
         // if this is string
-        if (!strtod (time_max_att_val, &ptr_end))
+        tmp_d2 = strtod (time_max_att_nam, &ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_max_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
@@ -5783,8 +5811,12 @@ int adios_define_mesh_timeScale (const char * timescale
         free(gettscalefrom1);
         free(gettscalefrom0);
     } else if (counter == 1){
+        double tmp_d2;
         time_var_att_val = strdup(gettscalefrom0);
-        if (!strtod (time_var_att_val, &ptr_end)){
+        tmp_d2 = strtod (time_var_att_val, &ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_var_att_val, &ptr_end))
+        {
             adios_conca_mesh_att_nam(&time_var_att_nam, name, "time-scale-var");
             adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
         }else{
@@ -5804,15 +5836,27 @@ int adios_define_mesh_timeScale (const char * timescale
     return 1;
 }
 
+int adios_common_define_mesh_timeVarying (const char * timevarying, int64_t group_id, const char * name)
+{
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/time-varying")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/time-varying");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, timevarying, "");
+    free (mpath);
+    return 0; 
+}
+
 // Parse mesh time steps (integers = number of times vars are written)
-int adios_define_mesh_timeSteps (const char * timesteps
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_common_define_mesh_timeSteps (const char * timesteps,
+                                        struct adios_group_struct * new_group,
+                                        const char * name
+                                       )
 {
     char * c;                      // comma location
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * gettstepsfrom0 = 0;     // tstep attribute xml value
     char * gettstepsfrom1 = 0;     // tstep attribute xml value
     char * gettstepsfrom2 = 0;     // tstep attribute xml value
@@ -5835,13 +5879,12 @@ int adios_define_mesh_timeSteps (const char * timesteps
     // 2. start/stride/count 3 components
     // 3. min/max range where this mesh is used
     // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
 
     /* We do not fail if this is not given as variables all have nsteps
        in ADIOS_inq_var = # of times the var was written
        */
-    if (!timesteps){
-        printf("time-steps for mesh %s attribute not provided.\n", name);
+    if (!timesteps || !strcmp(timesteps,"")){
+//        printf("time-steps for mesh %s attribute not provided.\n", name);
         return 1;
     }
 
@@ -5854,15 +5897,12 @@ int adios_define_mesh_timeSteps (const char * timesteps
         struct adios_var_struct * var = 0;
         if (adios_int_is_var (c))
         {
-            var =
-                adios_find_var_by_name (new_group, c);
+            var = adios_find_var_by_name (new_group, c);
             if (!var)
             {
                 log_warn ("config.xml: invalid variable %s\n"
-                        "for dimensions of mesh: %s\n"
-                        ,c
-                        ,name
-                        );
+                          "for dimensions of mesh: %s\n",
+                          c, name);
                 free (d1);
 
                 return 0;
@@ -5970,115 +6010,109 @@ int adios_define_mesh_timeSteps (const char * timesteps
 }
 
 // defining a uniform mesh
-int adios_define_mesh_uniform (char * dimensions, char * origin, char * spacing, char * maximum, struct adios_group_struct * new_group ,const char * name)
-{
-    if (dimensions)
-    {
-        if (!adios_define_mesh_uniform_dimensions (dimensions, new_group, name))
-            return 0;
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "dimensions required (%s)\n"
-                ,name
-                );
-        return 0;
-    }
+int adios_common_define_mesh_uniform (char * dimensions, 
+                                      char * origin, 
+                                      char * spacing, 
+                                      char * maximum, 
+                                      char * nspace,
+//                                      struct adios_group_struct * new_group,
+                                      const char * name,
+                                      int64_t group_id
+                                     )
+{   
+    struct adios_group_struct * new_group = (struct adios_group_struct *) group_id;
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/type")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/type");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, "uniform", "");
+
+    if (!adios_define_mesh_uniform_dimensions (dimensions, new_group, name))
+        return 1;
 
-    if (origin)
-    {
-        if (!adios_define_mesh_uniform_origins (origin, new_group, name))
-            return 0;
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "origin required (%s)\n"
-                ,name
-                );
-        return 0;
-    }
-    if (spacing)
-    {
-        if (!adios_define_mesh_uniform_spacings (spacing, new_group, name))
-            return 0;
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "spacing required (%s)\n"
-                ,name
-                );
-        return 0;
-    }
+    adios_define_mesh_uniform_origins (origin, new_group, name);
+    
+    adios_define_mesh_uniform_spacings (spacing, new_group, name);
 
-    if (maximum)
-    {
-        if (!adios_define_mesh_uniform_maximums (maximum, new_group, name))
-            return 0;
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "max required (%s)\n"
-                ,name
-                );
-        return 0;
-    }
+    adios_define_mesh_uniform_maximums (maximum, new_group, name);
 
-    return 1;
+    adios_define_mesh_nspace (nspace, new_group, name);
+
+    free (mpath);   
+    return 0;
 }
 
-int adios_define_mesh_rectilinear (char * dimensions, char * coordinates
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+// defining a rectilinear mesh
+int adios_common_define_mesh_rectilinear (char * dimensions, 
+                                          char * coordinates,
+//                                          struct adios_group_struct * new_group,
+                                          char * nspace,
+                                          const char * name,
+                                          int64_t group_id
+                                         )
 {
-    if (dimensions)
-    {
-        if (!adios_define_mesh_rectilinear_dimensions (dimensions, new_group, name))
-            return 0;
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "dimensions required (%s)\n"
-                ,name
-                );
-        return 0;
-    }
+    struct adios_group_struct * new_group = (struct adios_group_struct *) group_id;
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/type")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/type");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, "rectilinear", "");
+
+    if (!adios_define_mesh_rectilinear_dimensions (dimensions, new_group, name))
+        return 1;
 
     // Determine if it is the multi-var or single-var case
-    if (coordinates)
+    char *p;
+    // If we do not find "," in the coordinates
+    if (!(p = strstr(coordinates, ",")))
     {
-        char *p;
-        // If we do not find "," in the coordinates
-        if (!(p = strstr(coordinates, ","))){
-            if (!adios_define_mesh_rectilinear_coordinatesSingleVar (coordinates, new_group, name))
-                return 0;
-        }else{
-            if (!adios_define_mesh_rectilinear_coordinatesMultiVar (coordinates, new_group, name))
-                return 0;
-        }
-    }else{
-        log_warn ("config.xml: value attribute on "
-                "coordinates required for rectilinear mesh: (%s)\n"
-                ,name
-                );
-        return 0;
+        if (!adios_define_mesh_rectilinear_coordinatesSingleVar (coordinates, new_group, name))
+            return 1;
     }
-    return 1;
+    else
+    {
+        if (!adios_define_mesh_rectilinear_coordinatesMultiVar (coordinates, new_group, name))
+            return 1;
+    }
+
+    adios_define_mesh_nspace (nspace, new_group, name);
+
+    free (mpath);
+    return 0;
 }
 
-int adios_define_mesh_structured(char * dimensions, char * nspace
-        , char * points
-        ,struct adios_group_struct * new_group
-        , char * name){
+// defining a structured mesh
+int adios_common_define_mesh_structured (char * dimensions,
+                                         char * nspace,
+                                         char * points,
+//                                         struct adios_group_struct * new_group,
+                                         const char * name,
+                                         int64_t group_id
+                                        )
+{
+    struct adios_group_struct * new_group = (struct adios_group_struct *) group_id;
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/type")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/type");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, "structured", "");
+
     if (dimensions){
         if (!adios_define_mesh_structured_dimensions (dimensions, new_group, name))
             return 0;
     }else{
         log_warn ("config.xml: value attribute on "
-                "dimensions required (%s)\n"
-                ,name
-                );
+                  "dimensions required (%s)\n", name);
 
         return 0;
     }
 
     if (nspace){
-        if (!adios_define_mesh_structured_nspace (nspace, new_group, name))
+//        if (!adios_define_mesh_structured_nspace (nspace, new_group, name))
+          if (!adios_define_mesh_nspace (nspace, new_group, name))
             return 0;
     }
     if (points){
@@ -6092,26 +6126,35 @@ int adios_define_mesh_structured(char * dimensions, char * nspace
                 return 0;
         }
     }else{
-        log_warn ("config.xml: value on"
-                "points required for mesh type=structured (%s)\n"
-                ,name
-                );
+        log_warn ("config.xml: value on "
+                  "points required for mesh type=structured (%s)\n", name);
         return 0;
     }
-
+    free (mpath);
     return 1;
 }
 
-int adios_define_mesh_unstructured(char *nspace
-        , char *npoints, char *points
-        , char * data, char * count, char * type
-        , struct adios_group_struct * new_group
-        , const char * name)
+// defining a unstructured mesh
+int adios_common_define_mesh_unstructured (char * points,
+                                           char * data, 
+                                           char * count, 
+                                           char * type,
+                                           char * nspace,
+                                           char * npoints,
+                                           const char * name,
+                                           int64_t group_id)
 {
-    int saw_cell_set = 0;
+    struct adios_group_struct * new_group = (struct adios_group_struct *) group_id;
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/type")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/type");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, "unstructured", "");
     if (nspace)
     {
-        if (!adios_define_mesh_unstructured_nspace (nspace, new_group, name))
+//        if (!adios_define_mesh_unstructured_nspace (nspace, new_group, name))
+            if (!adios_define_mesh_nspace (nspace, new_group, name))
             return 0;
     }
     if (npoints)
@@ -6131,46 +6174,38 @@ int adios_define_mesh_unstructured(char *nspace
                 return 0;
         }
     }else{
-        log_warn ("config.xml: value on"
-                "points required for mesh type=structured (%s)\n"
-                ,name
-                );
+        log_warn ("config.xml: value on "
+                  "points required for mesh type=structured (%s)\n", name);
         return 0;
     }
     if (!data){
         log_warn ("config.xml: data attribute on "
-                "uniform-cells required (%s)\n"
-                ,name
-                );
+                  "uniform-cells required (%s)\n", name);
         return 0;
     }
     if (!count)
     {
         log_warn ("config.xml: count attribute on "
-                "uniform-cells required (%s)\n"
-                ,name
-                );
+                  "uniform-cells required (%s)\n", name);
         return 0;
     }
     if (!type)
     {
         log_warn ("config.xml: type attribute on "
-                "uniform-cells required (%s)\n"
-                ,name
-                );
+                  "uniform-cells required (%s)\n", name);
         return 0;
     }
     char *pt;
     // If we do find "," in data (uniform cell case)
     if (!(pt = strstr(data, ","))){
-        if (pt = strstr(count,",")){
+        if ( (pt = strstr(count,",")) ){
             log_warn ("count value on uniform-cells (check data value)"
-                    " should not contain ',' (%s)\n",name);
+                      " should not contain ',' (%s)\n",name);
             return 0;
         }
-        if (pt = strstr(type,",")){
+        if ( (pt = strstr(type,",")) ){
             log_warn ("type value on uniform-cells (check data value)"
-                    " should not contain ',' (%s)\n", name);
+                      " should not contain ',' (%s)\n", name);
             return 0;
         }
         if (!adios_define_mesh_unstructured_uniformCells (count, data, type
@@ -6183,19 +6218,18 @@ int adios_define_mesh_unstructured(char *nspace
     }else{
         if (!(pt = strstr(count,","))){
             log_warn ("count value on mixed-cells (check data value)"
-                    " should contain ',' (%s)\n",name);
+                      " should contain ',' (%s)\n", name);
             return 0;
         }
         if (!(pt = strstr(type,","))){
             log_warn ("type value on mixed-cells (check data value)"
-                    " should contain ',' (%s)\n", name);
+                      " should contain ',' (%s)\n", name);
             return 0;
         }
         if (!adios_define_mesh_unstructured_mixedCells (count, data, type
                     , new_group, name))
             return 0;
     }
-
     return 1;
 }
 
@@ -6293,9 +6327,7 @@ struct adios_mesh_struct * adios_common_define_mesh (
     if (flag == adios_flag_no)
     {
         log_warn ("config.xml: unique mesh names required; "
-                "second mesh: %s will be ignored.\n"
-                ,name
-                );
+                  "second mesh: %s will be ignored.\n", name);
         free(m);
         m = 0;
     } else {
@@ -6307,15 +6339,15 @@ struct adios_mesh_struct * adios_common_define_mesh (
 
 // Define time steps, scale and formatting
 // Parse var time steps (integers = number of times vars are written)
-int adios_define_var_timesteps (const char * timesteps
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        ,const char * path
-        )
+int adios_common_define_var_timesteps (const char * timesteps,
+                                       struct adios_group_struct * new_group,
+                                       const char * name,
+                                       const char * path
+                                      )
 {
     char * c;                      // comma location
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * gettstepsfrom0 = 0;     // tstep attribute xml value
     char * gettstepsfrom1 = 0;     // tstep attribute xml value
     char * gettstepsfrom2 = 0;     // tstep attribute xml value
@@ -6338,12 +6370,11 @@ int adios_define_var_timesteps (const char * timesteps
     // 2. start/stride/count 3 components - indices of the mesh time steps
     // 3. min/max range of the mesh time step
     // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
 
     /* We do not fail if this is not given as variables all have nsteps
        in ADIOS_inq_var = # of times the var was written
        */
-    if (!timesteps){
+    if (!timesteps || !strcmp(timesteps,"")){
         return 1;
     }
 
@@ -6356,15 +6387,12 @@ int adios_define_var_timesteps (const char * timesteps
         struct adios_var_struct * var = 0;
         if (adios_int_is_var (c))
         {
-            var =
-                adios_find_var_by_name (new_group, c);
+            var = adios_find_var_by_name (new_group, c);
             if (!var)
             {
                 log_warn ("config.xml: invalid variable %s\n"
-                        "for time-steps of var: %s\n"
-                        ,c
-                        ,name
-                        );
+                          "for time-steps of var: %s\n",
+                          c, name);
                 free (d1);
 
                 return 0;
@@ -6472,14 +6500,14 @@ int adios_define_var_timesteps (const char * timesteps
 }
 
 // Parse var time series format (real time tracking, not integers)
-int adios_define_var_timeseriesformat (const char * timeseries
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        ,const char * path
-        )
+int adios_common_define_var_timeseriesformat (const char * timeseries,
+                                              struct adios_group_struct * new_group,
+                                              const char * name,
+                                              const char * path
+                                             )
 {
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * format_att_nam = 0;     // extension format .xxxx att name
     char * format_att_val = 0;     // extension format att value
 
@@ -6487,13 +6515,17 @@ int adios_define_var_timeseriesformat (const char * timeseries
     // The number indicates how to write the time steps. Ex: 4 ==>
     // varname.XXXX.png where XXXX is the time step padded with 0s
     // We do not fail if this is not given as variables all have nsteps
-    if (!timeseries){
+    if (!timeseries || !strcmp(timeseries,"")){
         return 1;
     }
 
     char * ptr_end;
     d1 = strdup (timeseries);
-    if (strtod(d1, &ptr_end)){
+    double tmp_d2;
+    tmp_d2 = strtod (d1, &ptr_end);
+//    if (strtod(d1, &ptr_end))
+    if ( !(ptr_end && ptr_end[0]==0))
+    {
         adios_conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
         adios_common_define_attribute (p_new_group,format_att_nam,path,adios_string,d1,"");
         free(format_att_val);
@@ -6503,15 +6535,15 @@ int adios_define_var_timeseriesformat (const char * timeseries
 }
 
 // Parse var time scale (real time tracking, not integers)
-int adios_define_var_timescale (const char * timescale
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        ,const char * path
-        )
+int adios_common_define_var_timescale (const char * timescale,
+                                       struct adios_group_struct * new_group,
+                                       const char * name,
+                                       const char * path
+                                      )
 {
     char * c;                      // comma location
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * gettscalefrom0 = 0;     // scale attribute xml value
     char * gettscalefrom1 = 0;     // scale attribute xml value
     char * gettscalefrom2 = 0;     // scale attribute xml value
@@ -6534,17 +6566,17 @@ int adios_define_var_timescale (const char * timescale
     // 2. start/stride/count 3 components - multiple of the mesh time steps
     // 3. min/max range where this var is used - a range of the mesh time steps
     // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
 
 
     /* We do not fail if this is not given as variables all have nsteps
        in ADIOS_inq_var = # of times the var was written
        */
-    if (!timescale){
+    if (!timescale || !strcmp(timescale,"")){
         return 1;
     }
 
     d1 = strdup (timescale);
+
     char * ptr_end;
     c = strtok (d1, ",");
 
@@ -6552,17 +6584,16 @@ int adios_define_var_timescale (const char * timescale
     {
         struct adios_var_struct * var = 0;
         //if (adios_int_is_num (c))
-        if (!strtod (c,&ptr_end))
+        double tmp_d1;
+        tmp_d1 = strtod (c,&ptr_end);
+        if (!(ptr_end && ptr_end[0]==0))
         {
-            var =
-                adios_find_var_by_name (new_group, c);
+            var = adios_find_var_by_name (new_group, c);
             if (!var)
             {
                 log_warn ("config.xml: invalid variable %s\n"
-                        "for attribute of var: %s\n"
-                        ,c
-                        ,name
-                        );
+                          "for attribute of var: %s\n",
+                          c, name);
                 free (d1);
 
                 return 0;
@@ -6601,24 +6632,31 @@ int adios_define_var_timescale (const char * timescale
     }
 
     if (counter == 3){
+        double tmp_d2;
         time_start_att_val = strdup(gettscalefrom0);
         conca_var_att_nam(&time_start_att_nam, name, "time-scale-start");
+        tmp_d2 = strtod (time_start_att_val, &ptr_end);
         // if this is string
-        if (!strtod (time_start_att_val, &ptr_end))
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_start_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_string,time_start_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_double,time_start_att_val,"");
         time_stride_att_val = strdup(gettscalefrom1);
         conca_var_att_nam(&time_stride_att_nam, name, "time-scale-stride");
         // if this is string
-        if (!strtod (time_stride_att_val, &ptr_end))
+        tmp_d2 = strtod (time_stride_att_nam, &ptr_end);
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_stride_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_string,time_stride_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_double,time_stride_att_val,"");
         time_count_att_val = strdup(gettscalefrom2);
         conca_var_att_nam(&time_count_att_nam, name, "time-scale-count");
         // if this is string
-        if (!strtod (time_count_att_val, &ptr_end))
+        tmp_d2 = strtod (time_count_att_nam, &ptr_end);
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_count_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_string,time_count_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_double,time_count_att_val,"");
@@ -6629,17 +6667,22 @@ int adios_define_var_timescale (const char * timescale
         free(gettscalefrom1);
         free(gettscalefrom0);
     }else if (counter == 2) {
+        double tmp_d2;
         time_min_att_val = strdup(gettscalefrom0);
         conca_var_att_nam(&time_min_att_nam, name, "time-scale-min");
         // if this is string
-        if (!strtod (time_min_att_val, &ptr_end))
+        tmp_d2 = strtod (time_min_att_val, &ptr_end);
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_min_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_string,time_min_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_double,time_min_att_val,"");
         time_max_att_val = strdup(gettscalefrom1);
         conca_var_att_nam(&time_max_att_nam, name, "time-scale-max");
         // if this is string
-        if (!strtod (time_max_att_val, &ptr_end))
+        tmp_d2 = strtod (time_max_att_nam, &ptr_end);
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_max_att_val, &ptr_end))
             adios_common_define_attribute (p_new_group,time_max_att_nam,path,adios_string,time_max_att_val,"");
         else
             adios_common_define_attribute (p_new_group,time_max_att_nam,path,adios_double,time_max_att_val,"");
@@ -6648,8 +6691,12 @@ int adios_define_var_timescale (const char * timescale
         free(gettscalefrom1);
         free(gettscalefrom0);
     } else if (counter == 1){
+        double tmp_d2;
         time_var_att_val = strdup(gettscalefrom0);
-        if (!strtod (time_var_att_val, &ptr_end)){
+        tmp_d2 = strtod (time_var_att_val, &ptr_end);
+        if ( !(ptr_end && ptr_end[0]==0))
+//        if (!strtod (time_var_att_val, &ptr_end))
+        {
             conca_var_att_nam(&time_var_att_nam, name, "time-scale-var");
             adios_common_define_attribute (p_new_group,time_var_att_nam,path,adios_string,time_var_att_val,"");
         }else{
@@ -6670,25 +6717,23 @@ int adios_define_var_timescale (const char * timescale
 }
 
 // Parse var hyper slab: lines or planes from a higher dimension mesh
-int adios_define_var_hyperslab ( const char * hyperslab,
-        struct adios_group_struct * new_group,
-        const char * name,
-        const char * path)
+int adios_common_define_var_hyperslab ( const char * hyperslab,
+                                        struct adios_group_struct * new_group,
+                                        const char * name,
+                                        const char * path)
 {
     char * c;                      // comma location
     char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * gethslabfrom0 = 0;       // hslab attribute xml value
     char * gethslabfrom1 = 0;       // hslab attribute xml value
     char * gethslabfrom2 = 0;       // hslab attribute xml value
-    char * hslab_var_att_nam = 0;   // hslab attribute name for var or num
     char * hslab_start_att_nam = 0; // hslab attribute name for start
     char * hslab_stride_att_nam = 0;// hslab attribute name for stride
     char * hslab_count_att_nam = 0; // hslab attribute name for count
     char * hslab_max_att_nam = 0;   // hslab attribute name for max
     char * hslab_min_att_nam = 0;   // hslab attribute name for min
     char * hslab_single_att_nam = 0;// hslab attribute name for min
-    char * hslab_var_att_val = 0;   // hslab attribute value for var or num
     char * hslab_start_att_val = 0; // hslab attribute value for start
     char * hslab_stride_att_val = 0;// hslab attribute value for stride
     char * hslab_count_att_val = 0; // hslab attribute value for count
@@ -6702,12 +6747,11 @@ int adios_define_var_hyperslab ( const char * hyperslab,
     // 2. min/max range of the mesh dimensions
     // 3. single value
     //    single value of ":" means there is an extra dimension to process
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
 
     /* We do not fail if this is not given as variables all have nsteps
        in ADIOS_inq_var = # of times the var was written
        */
-    if (!hyperslab){
+    if (!hyperslab || !strcmp(hyperslab,"")){
         return 1;
     }
 
@@ -6776,26 +6820,47 @@ int adios_define_var_hyperslab ( const char * hyperslab,
 
 }
 
-int adios_define_mesh_uniform_dimensions (const char * dimensions
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_nspace (const char * nspace,
+                              struct adios_group_struct * new_group,
+                              const char * name
+                             )
+{
+    char * d1; // save of strdup
+    int64_t p_new_group = (int64_t) new_group;
+    char * nsp_att_nam = 0; // nspace attribute name
+
+    if (!nspace || !strcmp(nspace, ""))
+    {
+//        log_warn ("config.xml: nspace value (optional) is not provided"
+//                  "for uniform mesh: %s\n", name);
+        return 0;
+    }
+    d1 = strdup (nspace);
+
+    adios_conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
+    adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,nspace,"");
+    free (nsp_att_nam);
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_uniform_dimensions (const char * dimensions,
+                                          struct adios_group_struct * new_group,
+                                          const char * name
+                                         )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute that is a var
     int counter = 0;        // used to create dimX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
 
-    if (!dimensions)
+    if (!dimensions || !strcmp(dimensions,""))
     {
-        log_warn ("config.xml: dimensions value required for"
-                "uniform mesh: %s\n"
-                ,name
-                );
-
+        log_warn ("config.xml: dimensions value required for "
+                  "uniform mesh: %s\n", name);
         return 0;
     }
 
@@ -6830,26 +6895,23 @@ int adios_define_mesh_uniform_dimensions (const char * dimensions
     return 1;
 }
 
-int adios_define_mesh_uniform_maximums (const char * maximum
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_uniform_maximums (const char * maximum,
+                                        struct adios_group_struct * new_group,
+                                        const char * name
+                                       )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * max_att_nam = 0; // maxima attribute name
-    char * getmaxafrom = 0; // maxima attribute name that is a var
     int counter = 0;        // used to create maxX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create maxX attributes
 
-    if (!maximum)
+    if (!maximum || !strcmp(maximum,""))
     {
-        log_warn ("config.xml: maximum value required"
-                "for uniform mesh: %s\n"
-                ,name
-                );
-
+//        log_warn ("config.xml: maximum value (optional) is not provided"
+//                  "for uniform mesh: %s\n",
+//                  name);
         return 0;
     }
 
@@ -6881,27 +6943,23 @@ int adios_define_mesh_uniform_maximums (const char * maximum
     return 1;
 }
 
-int adios_define_mesh_uniform_origins (const char * origin
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_uniform_origins (const char * origin,
+                                       struct adios_group_struct * new_group,
+                                       const char * name
+                                      )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * org_att_nam = 0; // origins attribute name
-    char * getorgsfrom = 0; // origins attribute name that is a var
     int counter = 0;        // used to create orgX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create orgX attributes
 
-    if (!origin)
+    if (!origin || !strcmp(origin,""))
     {
-        log_warn ("config.xml: origin value required "
-                "for uniform mesh: %s\n"
-                ,name
-                );
-
+//        log_warn ("config.xml: origin value (optional) not provided "
+//                  "for uniform mesh: %s\n",
+//                  name);
         return 0;
     }
 
@@ -6933,25 +6991,23 @@ int adios_define_mesh_uniform_origins (const char * origin
     return 1;
 }
 
-int adios_define_mesh_uniform_spacings (const char * spacing
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_uniform_spacings (const char * spacing,
+                                        struct adios_group_struct * new_group,
+                                        const char * name
+                                       )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * spa_att_nam = 0; // spacings attribute name
-    char * getspasfrom = 0; // spacings attribute name that is a var
     int counter = 0;        // used to create spaX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create spaX attributes if (!spacing)
 
-    if (!spacing)
+    if (!spacing || !strcmp(spacing,""))
     {
-        log_warn ("config.xml: mesh uniform spacing value "
-                "required for mesh: %s\n"
-                ,name
-                );
+//        log_warn ("config.xml: spacing value (optional) not provided "
+//                  "for uniform mesh: %s\n",
+//                  name);
         return 0;
     }
 
@@ -6978,33 +7034,27 @@ int adios_define_mesh_uniform_spacings (const char * spacing
     adios_conca_mesh_att_nam(&spas, name, "spacings-num");
     adios_common_define_attribute (p_new_group,spas,"/",adios_integer,counterstr,"");
     free (spas);
-
     free (d1);
 
     return 1;
 }
 
-int adios_define_mesh_rectilinear_dimensions (const char * dimensions
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_rectilinear_dimensions (const char * dimensions,
+                                              struct adios_group_struct * new_group,
+                                              const char * name
+                                             )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
     int counter = 0;        // used to create dimX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
 
-    if (!dimensions)
+    if (!dimensions || !strcmp(dimensions,""))
     {
-        log_warn ("config.xml: dimensions value required"
-                "for rectilinear mesh: %s\n"
-                ,name
-                );
-
+        log_warn ("config.xml: dimensions value required "
+                  "for rectilinear mesh: %s\n", name);
         return 0;
     }
 
@@ -7032,31 +7082,27 @@ int adios_define_mesh_rectilinear_dimensions (const char * dimensions
     adios_common_define_attribute (p_new_group,dims,"/",adios_integer,counterstr,"");
 
     free (dims);
-
     free (d1);
 
     return 1;
 }
 
-int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates,
+                                                       struct adios_group_struct * new_group,
+                                                       const char * name
+                                                      )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * coo_att_nam = 0; // coordinates attribute name
     int counter = 0;        // used to create ptsX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
 
-    if (!coordinates)
+    if (!coordinates || !strcmp(coordinates,""))
     {
-        log_warn ("config.xml: coordinates-multi-var value required"
-                "for rectilinear mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: coordinates-multi-var value required "
+                  "for rectilinear mesh: %s\n", name);
 
         return 0;
     }
@@ -7086,12 +7132,11 @@ int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates
         adios_conca_mesh_att_nam(&coords, name, "coords-multi-var-num");
         adios_common_define_attribute (p_new_group,coords,"/",adios_integer,counterstr,"");
         free (coords);
-    } else
+    } 
+    else
     {
         log_warn ("config.xml: coordinates-multi-var expects "
-                "at least 2 variables (%s)\n"
-                ,name
-                );
+                  "at least 2 variables (%s)\n", name);
         free (d1);
         return 0;
     }
@@ -7101,27 +7146,25 @@ int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates
     return 1;
 }
 
-int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates,
+                                                        struct adios_group_struct * new_group,
+                                                        const char * name
+                                                       )
 {
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * coo_att_nam = 0; // coordinates attribute name
 
-    if (!coordinates)
+    if (!coordinates || !strcmp(coordinates,""))
     {
-        log_warn ("config.xml: coordinates-single-var value required"
-                "for rectilinear mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: coordinates-single-var value required "
+                  "for rectilinear mesh: %s\n", name);
 
         return 0;
     }
 
     d1 = strdup (coordinates);
+    
     adios_conca_mesh_att_nam(&coo_att_nam, name, "coords-single-var");
     adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,d1,"");
     free (coo_att_nam);
@@ -7129,6 +7172,7 @@ int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates
     return 1;
 }
 
+/*
 int adios_define_mesh_structured_nspace (const char * nspace
         ,struct adios_group_struct * new_group
         ,const char * name
@@ -7136,7 +7180,6 @@ int adios_define_mesh_structured_nspace (const char * nspace
 {
     char * d1; // save of strdup
     int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
     char * nsp_att_nam = 0; // nspace attribute name
 
     if (!nspace)
@@ -7157,32 +7200,30 @@ int adios_define_mesh_structured_nspace (const char * nspace
 
     return 1;
 }
+*/
 
-int adios_define_mesh_structured_dimensions (const char * dimensions
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_structured_dimensions (const char * dimensions,
+                                             struct adios_group_struct * new_group,
+                                             const char * name
+                                            )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
     int counter = 0;        // used to create dimX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
 
-    if (!dimensions)
+    if (!dimensions || !strcmp(dimensions,""))
     {
-        log_warn ("config.xml: dimensions value required"
-                "for structured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: dimensions value required "
+                  "for structured mesh: %s\n", name);
 
         return 0;
     }
 
     d1 = strdup (dimensions);
+
     c = strtok (d1, ",");
     while (c)
     {
@@ -7208,54 +7249,47 @@ int adios_define_mesh_structured_dimensions (const char * dimensions
     return 1;
 }
 
-int adios_define_mesh_structured_pointsSingleVar (const char * points
-        ,struct adios_group_struct * new_group
-        ,const char * name
-                                              )
+int adios_define_mesh_structured_pointsSingleVar (const char * points,
+                                                  struct adios_group_struct * new_group,
+                                                  const char * name
+                                                 )
 {
-    char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * pts_att_nam = 0; // points attribute name
 
-    if (!points)
+    if (!points || !strcmp(points,""))
     {
-        log_warn ("config.xml: points-single-var value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
+        log_warn ("config.xml: points-single-var value required "
+                  "for structured mesh: %s\n", name);
 
         return 0;
     }
 
     d1 = strdup (points);
-        adios_conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
-        adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
-        free (pts_att_nam);
+    adios_conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
+    adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
+    free (pts_att_nam);
     free (d1);
     return 1;
 }
 
-int adios_define_mesh_structured_pointsMultiVar (const char * points
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_structured_pointsMultiVar (const char * points,
+                                                 struct adios_group_struct * new_group,
+                                                 const char * name
+                                                )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * pts_att_nam = 0; // pointss attribute name
     int counter = 0;        // used to create ptsX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
 
-    if (!points)
+    if (!points || !strcmp(points,""))
     {
-        log_warn ("config.xml: points-multi-var value required"
-                "for structured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: points-multi-var value required "
+                  "for structured mesh: %s\n", name);
 
         return 0;
     }
@@ -7263,7 +7297,6 @@ int adios_define_mesh_structured_pointsMultiVar (const char * points
     d1 = strdup (points);
 
     c = strtok (d1, ",");
-
     while (c)
     {
         pts_att_nam = 0;
@@ -7288,9 +7321,7 @@ int adios_define_mesh_structured_pointsMultiVar (const char * points
     } else
     {
         log_warn ("config.xml: points-multi-var tag for mesh: %s "
-                " expects at least 2 variables\n"
-                ,name
-                );
+                  " expects at least 2 variables\n", name);
         free (d1);
 
         return 0;
@@ -7301,6 +7332,7 @@ int adios_define_mesh_structured_pointsMultiVar (const char * points
     return 1;
 }
 
+/*
 int adios_define_mesh_unstructured_nspace (const char * nspace
         ,struct adios_group_struct * new_group
         ,const char * name
@@ -7308,15 +7340,12 @@ int adios_define_mesh_unstructured_nspace (const char * nspace
 {
     char * d1; // save of strdup
     int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
     char * nsp_att_nam = 0; // nspace attribute name
 
     if (!nspace)
     {
-        log_warn ("config.xml: nspace value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
+        log_warn ("config.xml: nspace value required for unstructured mesh: %s\n",
+                name);
 
         return 0;
     }
@@ -7329,6 +7358,7 @@ int adios_define_mesh_unstructured_nspace (const char * nspace
 
     return 1;
 }
+*/
 
 int adios_define_mesh_unstructured_npoints (const char * npoints
         ,struct adios_group_struct * new_group
@@ -7336,16 +7366,13 @@ int adios_define_mesh_unstructured_npoints (const char * npoints
         )
 {
     char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
+    int64_t p_new_group = (int64_t) new_group;
     char * npts_att_nam = 0; // npoints attribute name
 
-    if (!npoints)
+    if (!npoints || !strcmp(npoints,""))
     {
-        log_warn ("config.xml: npoints value required"
-                "for unstructured mesh\n"
-                ,name
-                );
+//        log_warn ("config.xml: npoints value required for unstructured mesh %s:\n",
+//                  name);
 
         return 0;
     }
@@ -7361,31 +7388,27 @@ int adios_define_mesh_unstructured_npoints (const char * npoints
     return 1;
 }
 
-int adios_define_mesh_unstructured_pointsMultiVar (const char * points
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_unstructured_pointsMultiVar (const char * points,
+                                                   struct adios_group_struct * new_group,
+                                                   const char * name
+                                                  )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * pts_att_nam = 0; // pointss attribute name
     int counter = 0;        // used to create ptsX attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
 
-    if (!points)
+    if (!points || !strcmp(points,""))
     {
-        log_warn ("config.xml: points-multi-var value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: points-multi-var value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
 
     d1 = strdup (points);
-
     c = strtok (d1, ",");
 
     while (c)
@@ -7412,9 +7435,7 @@ int adios_define_mesh_unstructured_pointsMultiVar (const char * points
     } else
     {
         log_warn ("config.xml: points-multi-var tag expects "
-                " at least two variabels. (%s)\n"
-                ,name
-                );
+                  "at least two variabels. (%s)\n" , name);
         free (d1);
         return 0;
     }
@@ -7422,23 +7443,19 @@ int adios_define_mesh_unstructured_pointsMultiVar (const char * points
     return 1;
 }
 
-int adios_define_mesh_unstructured_pointsSingleVar (const char * points
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_unstructured_pointsSingleVar (const char * points,
+                                                    struct adios_group_struct * new_group,
+                                                    const char * name
+                                                   )
 {
-    char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * pts_att_nam = 0; // points attribute name
 
-    if (!points)
+    if (!points || !strcmp(points,""))
     {
-        log_warn ("config.xml: points-single-var value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: points-single-var value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
@@ -7453,18 +7470,15 @@ int adios_define_mesh_unstructured_pointsSingleVar (const char * points
     return 1;
 }
 
-int adios_define_mesh_unstructured_uniformCells (const char * count
-        ,const char * data
-        ,const char * type
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_unstructured_uniformCells (const char * count,
+                                                 const char * data,
+                                                 const char * type,
+                                                 struct adios_group_struct * new_group,
+                                                 const char * name
+                                                )
 {
-    char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * ncellset_att_nam = 0;  // ncellset attribute
     char * cellcount_att_nam = 0; // single cell count attribute
     char * celldata_att_nam = 0;  // single cell data  attribute
@@ -7474,30 +7488,24 @@ int adios_define_mesh_unstructured_uniformCells (const char * count
     adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_integer,"1","");
     free (ncellset_att_nam);
 
-    if (!count)
+    if (!count || !strcmp(count,""))
     {
-        log_warn ("config.xml: uniform-cells count value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: uniform-cells count value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
-    if (!data)
+    if (!data || !strcmp(data,""))
     {
-        log_warn ("config.xml: uniform-cells data value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: uniform-cells data value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
-    if (!type)
+    if (!type || !strcmp(type,""))
     {
-        log_warn ("config.xml: uniform-cells type value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: uniform-cells type value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
@@ -7523,56 +7531,47 @@ int adios_define_mesh_unstructured_uniformCells (const char * count
     return 1;
 }
 
-int adios_define_mesh_unstructured_mixedCells (const char * count
-        ,const char * data
-        ,const char * types
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
+int adios_define_mesh_unstructured_mixedCells (const char * count,
+                                               const char * data,
+                                               const char * types,
+                                               struct adios_group_struct * new_group,
+                                               const char * name
+                                              )
 {
     char * c;  // comma location
     char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
     int counter = 0;        // used to create countX, typeX, dataX? attributes
     char counterstr[5] = {0,0,0,0,0}; // used to create countX, typeX, dataX? attributes
-    int64_t      p_new_group = (int64_t) new_group;
+    int64_t p_new_group = (int64_t) new_group;
     char * ncellset_att_nam = 0;  // ncellset attribute
     char * ccounts_att_nam = 0;   // ccountX attributes
     char * cdata_att_nam = 0;     // cdataX attributes
     char * celltype_att_nam = 0;  // ctypeX attributes
 
-    if (!count)
+    if (!count || !strcmp(count,""))
     {
-        log_warn ("config.xml: mixed-cells count value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: mixed-cells count value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
-    if (!data)
+    if (!data || !strcmp(data,""))
     {
-        log_warn ("config.xml: mixed-cells data value required"
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+        log_warn ("config.xml: mixed-cells data value required "
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
-    if (!types)
+    if (!types || !strcmp(types,""))
     {
         log_warn ("config.xml: mixed-cells type value required "
-                "for unstructured mesh: %s\n"
-                ,name
-                );
+                  "for unstructured mesh: %s\n", name);
 
         return 0;
     }
 
     d1 = strdup (count);
     c = strtok (d1, ",");
-   
     while (c)
     {
         //cell_list->cell_list.count.var = 0;
@@ -7591,9 +7590,7 @@ int adios_define_mesh_unstructured_mixedCells (const char * count
     // We should have at least 2 cell sets, otherwise the cells are uniform
     if (counter <= 1){
         log_warn ("config.xml: Please provide at least 2 cell counts of mesh: %s\n"
-                "or use the 'uniform-cells' tag.\n"
-                ,name
-                );
+                  "or use the 'uniform-cells' tag.\n", name);
         return 0;
     }
 
@@ -7626,10 +7623,7 @@ int adios_define_mesh_unstructured_mixedCells (const char * count
     // Generate an error message
     if (counter != cell_set_count){
         log_warn ("config.xml: Please provide at least %d cell data of mesh: %s\n"
-                "or use the 'uniform-cells' tag\n"
-                ,cell_set_count
-                ,name
-                );
+                  "or use the 'uniform-cells' tag\n", cell_set_count, name);
         return 0;
     }
 
@@ -7656,48 +7650,57 @@ int adios_define_mesh_unstructured_mixedCells (const char * count
     // Generate an error message
     if (counter != cell_set_count){
         log_warn ("config.xml: Please provide at least %d cell types of mesh: %s\n"
-                "or use the 'uniform-cells' tag\n"
-                ,cell_set_count
-                ,name
-                );
+                  "or use the 'uniform-cells' tag\n", cell_set_count, name);
         return 0;
     }
 
     return 1;
 }
 
-// NO-XML API
-int adios_define_var_mesh(int64_t ptr_new_group, char * varname, char * varpath, char * meshname){
+// called by NO-XML API
+int adios_common_define_var_mesh (int64_t group_id, const char * varname, const char * meshname, const char * path)
+{
     char *mpath = 0;
     mpath = malloc(strlen("/adios_schema")+strlen(varname)+1);
     strcpy(mpath,varname);
     strcat(mpath,"/adios_schema");
-    adios_common_define_attribute (ptr_new_group,mpath,varpath,adios_string,meshname,"");
+    adios_common_define_attribute (group_id, mpath, path, adios_string, meshname, "");
     free (mpath);
     return 0;
 }
 
-int adios_define_var_centering(int64_t ptr_new_group, char * varname, char * varpath, char * centering){
+int adios_common_define_var_centering (int64_t group_id, const char * varname, const char * centering, const char * path)
+{
     char *mpath = 0;
     mpath = malloc(strlen("/adios_schema/centering")+strlen(varname)+1);
     strcpy(mpath,varname);
     strcat(mpath,"/adios_schema/centering");
-    adios_common_define_attribute (ptr_new_group,mpath,varpath,adios_string,centering,"");
+    adios_common_define_attribute (group_id, mpath, path, adios_string, centering, "");
     free (mpath);
     return 0;
 }
 
-int adios_define_mesh_group(int64_t ptr_new_group, char * name, char * group){
-    char * meshgroup = 0;
-    adios_conca_mesh_att_nam(&group, name, "mesh-group");
-    adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,group,"");
+int adios_common_define_mesh_group (int64_t group_id, const char * name, const char * group)
+{
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/mesh-group")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/mesh-group");
+//    adios_conca_mesh_att_nam(&group, name, "mesh-group");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, group, "");
+    free (mpath);
     return 0;
 }
 
-int adios_define_mesh_file(int64_t ptr_new_group, char * name, char * file){
-    char * meshfile = 0;
-    adios_conca_mesh_att_nam(&meshfile, name, "mesh-file");
-    adios_common_define_attribute (ptr_new_group,file,"/",adios_string,file,"");
+int adios_common_define_mesh_file (int64_t group_id, char * name, char * file){
+    char * mpath = 0;
+    mpath = malloc(strlen("/adios_schema/")+strlen(name)+strlen("/mesh-file")+1);
+    strcpy (mpath, "/adios_schema/");
+    strcat (mpath, name);
+    strcat (mpath, "/mesh-file");
+    adios_common_define_attribute (group_id, mpath, "", adios_string, file, "");
+    free (mpath);
     return 0;
 }
 
diff --git a/src/core/adios_internals.h b/src/core/adios_internals.h
index 1346ad4..48630d1 100644
--- a/src/core/adios_internals.h
+++ b/src/core/adios_internals.h
@@ -25,6 +25,11 @@
 #include "core/adios_timing.h"
 #endif
 
+/* Some cluster experience MPI_File_write() errors when trying to write INT32_MAX bytes (2GB) at once.
+ * Use this number to limit block sizes written with MPI-IO.
+ */
+#define MAX_MPIWRITE_SIZE 2130706432    /* 2GB - 16MB */
+
 enum ADIOS_METHOD_MODE {adios_mode_write  = 1
                        ,adios_mode_read   = 2
                        ,adios_mode_update = 3 // not supported yet
@@ -43,8 +48,7 @@ struct adios_stat_struct
 
 struct adios_var_struct
 {
-    uint16_t id;
-    //uint16_t parent_id; // obsolete: remove
+    uint32_t id;
     struct adios_var_struct *parent_var; // copy_var_written links "written var" to "var definition"
 
     char * name;
@@ -61,7 +65,7 @@ struct adios_var_struct
     enum ADIOS_FLAG free_data;    // primarily used for writing
     void * data;                  // primarily used for reading
     uint64_t data_size;           // primarily used for reading
-    uint16_t write_count; // added to support multiple writes for transform layer.
+    uint32_t write_count; // added to support multiple writes for transform layer.
                           // Might needed for other things in the future.
 
     // NCSU - Adding stat related variables
@@ -92,7 +96,7 @@ struct adios_hist_struct
 
 struct adios_attribute_struct
 {
-    uint16_t id;
+    uint32_t id;
     char * name;
     char * path;
     enum ADIOS_DATATYPES type;
@@ -130,7 +134,7 @@ struct adios_group_struct
     uint64_t group_offset;
 
     char * name;
-    int var_count;
+    uint32_t var_count;
     enum ADIOS_FLAG adios_host_language_fortran;
     enum ADIOS_FLAG all_unique_var_names; // obsolete: remove
     struct adios_var_struct * vars;
@@ -183,18 +187,17 @@ struct adios_file_struct
     uint64_t buffer_size;   // how big the buffer is currently
 
     uint64_t vars_start;    // offset for where to put the var/attr count
-    uint16_t vars_written;  // count of vars/attrs to write
+    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()
 };
 
 struct adios_dimension_item_struct
 {
     uint64_t rank;                 // for numerical value
-    //uint16_t id; //obsolete: remove
     struct adios_var_struct * var; // for value stored in variable
     struct adios_attribute_struct * attr; // for value stored in attribute
     enum ADIOS_FLAG time_index;
@@ -345,6 +348,7 @@ typedef void (* ADIOS_STOP_CALCULATION_FN)
 
 struct adios_transport_struct
 {
+    char * method_name;
     ADIOS_INIT_FN adios_init_fn;
     ADIOS_OPEN_FN adios_open_fn;
     ADIOS_SHOULD_BUFFER_FN adios_should_buffer_fn;
@@ -387,11 +391,11 @@ struct adios_group_list_struct * adios_get_groups (void);
 struct adios_var_struct * adios_find_var_by_name (struct adios_group_struct * g,
                                                   const char * fullpath);
 struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
-                                               ,uint16_t id
+                                               ,uint32_t id
                                                );
 struct adios_attribute_struct * adios_find_attribute_by_id
                                          (struct adios_attribute_struct * root
-                                         ,uint16_t id
+                                         ,uint32_t id
                                          );
 
 struct adios_attribute_struct * adios_find_attribute_var_by_name
@@ -399,10 +403,10 @@ struct adios_attribute_struct * adios_find_attribute_var_by_name
                                        ,const char * name
                                        );
 
-struct adios_attribute_struct * adios_find_attribute_var_by_id
+/*struct adios_attribute_struct * adios_find_attribute_var_by_id
                                        (struct adios_attribute_struct * root
-                                       ,uint16_t id
-                                       );
+                                       ,uint32_t id
+                                       );*/
 
 /*void adios_parse_buffer (struct adios_file_struct * fd, char * buffer
                         ,uint64_t len
@@ -446,7 +450,7 @@ void adios_append_dimension (struct adios_dimension_struct ** root
 
 void adios_append_attribute (struct adios_attribute_struct ** root
                             ,struct adios_attribute_struct * attribute
-                            ,uint16_t id
+                            ,uint32_t id
                             );
 
 int adios_common_declare_group (int64_t * id, const char * name
@@ -462,15 +466,18 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
                                 ,const char * dimensions
                                 ,const char * global_dimensions
                                 ,const char * local_offsets
-                            ,char *transform_type_str // NCSU ALACRITY-ADIOS
                                 );
 
-int adios_common_define_var_characteristcs  (struct adios_group_struct * g, const char * var_name
-                                            ,const char * bin_interval
-                                            ,const char * bin_min
-                                            ,const char * bin_max
-                                            ,const char * bin_count
-                                            );
+// set a transform method for a variable (=none if this function is never called)
+int adios_common_set_transform (int64_t var_id, const char *transform_type_str);
+
+int adios_common_define_var_characteristics  (struct adios_group_struct * g
+                                              ,const char * var_name
+                                              ,const char * bin_interval
+                                              ,const char * bin_min
+                                              ,const char * bin_max
+                                              ,const char * bin_count
+                                             );
 
 void adios_common_get_group (int64_t * group_id, const char * name);
 int adios_common_free_group (int64_t id);
@@ -486,6 +493,11 @@ int adios_write_version_v1 (char ** buffer
                            ,uint64_t * buffer_size
                            ,uint64_t * buffer_offset
                            );
+int adios_write_version_flag_v1 (char ** buffer
+                           ,uint64_t * buffer_size
+                           ,uint64_t * buffer_offset
+                           ,uint32_t flag
+                           );
 int adios_write_process_group_header_v1 (struct adios_file_struct * fd
                                         ,uint64_t total_size
                                         );
@@ -527,15 +539,23 @@ int adios_write_index_v1 (char ** buffer
 void adios_build_index_v1 (struct adios_file_struct * fd
                          ,struct adios_index_struct_v1 * index
                        );
+
 void adios_merge_index_v1 (
                    struct adios_index_struct_v1 * main_index
                   ,struct adios_index_process_group_struct_v1 * new_pg_root
                   ,struct adios_index_var_struct_v1 * new_vars_root
                   ,struct adios_index_attribute_struct_v1 * new_attrs_root
                   );
+
+void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
+                         ,struct adios_index_var_struct_v1 ** v1
+                         ,struct adios_index_attribute_struct_v1 ** a1
+                         );
+ 
 void adios_clear_index_v1 (struct adios_index_struct_v1 * index); // in each adios_<method>_close()
 void adios_free_index_v1 (struct adios_index_struct_v1 * index);  // in adios_<method>_finalize()
 
+int adios_parse_scalar_string (enum ADIOS_DATATYPES type, char * value, void ** out);
 
 // NCSU ALACRITY-ADIOS - This function was static, but is now needed in adios_transforms_*.c
 uint8_t count_dimensions (const struct adios_dimension_struct * dimensions);
@@ -543,11 +563,8 @@ uint8_t count_dimensions (const struct adios_dimension_struct * dimensions);
 uint64_t adios_get_type_size (enum ADIOS_DATATYPES type, void * var);
 // NCSU ALACRITY-ADIOS - added this for use in the transform layer
 uint64_t adios_get_dimension_space_size (struct adios_var_struct * var
-                                        ,struct adios_dimension_struct * d
-                                        ,struct adios_group_struct * group);
-uint64_t adios_get_var_size (struct adios_var_struct * var
-                            ,struct adios_group_struct * group, void * data
-                            );
+                                        ,struct adios_dimension_struct * d);
+uint64_t adios_get_var_size (struct adios_var_struct * var, void * data);
 uint64_t adios_get_dim_value (struct adios_dimension_item_struct * dimension);
 uint64_t adios_get_stat_size (void * data, enum ADIOS_DATATYPES type, enum ADIOS_STAT stat_id);
 uint8_t adios_get_stat_set_count (enum ADIOS_DATATYPES type);
@@ -564,45 +581,47 @@ int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
 /* some internal functions that adios_internals.c and adios_internals_mxml.c share */
 int adios_int_is_var (const char * temp); // 1 == yes, 0 == no
 int adios_int_is_num (char * temp); // 1 == yes, 0 == no
-void adios_conca_mesh_numb_att_nam(char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]);
-void adios_conca_mesh_att_nam(char ** returnstr, const char * meshname, char * att_nam);
-int adios_define_schema_version(struct adios_group_struct * new_group, char * schema_version);
+void adios_conca_mesh_numb_att_nam (char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]);
+void adios_conca_mesh_att_nam (char ** returnstr, const char * meshname, char * att_nam);
 
 // No-XML API
-int adios_define_var_mesh(int64_t ptr_new_group, char * varname, char * varpath, char * meshname);
-int adios_define_var_centering(int64_t ptr_new_group, char * varname, char * varpath, char * centering);
-int adios_define_var_timesteps (const char * timesteps,struct adios_group_struct * new_group,const char * name, const char *path);
-int adios_define_var_timescale (const char * timescale,struct adios_group_struct * new_group,const char * name, const char *path);
-int adios_define_var_timeseriesformat (const char * timeseries,struct adios_group_struct * new_group,const char * name, const char *path);
-int adios_define_var_hyperslab ( const char * hyperslab,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_common_define_schema_version (struct adios_group_struct * new_group, char * schema_version);
+int adios_common_define_var_mesh (int64_t ptr_new_group, const char * varname, const char * meshname, const char * path);
+int adios_common_define_var_centering (int64_t ptr_new_group, const char * varname, const char * centering, const char * path);
+int adios_common_define_var_timesteps (const char * timesteps,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_common_define_var_timescale (const char * timescale,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_common_define_var_timeseriesformat (const char * timeseries,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_common_define_var_hyperslab ( const char * hyperslab,struct adios_group_struct * new_group,const char * name, const char *path);
 
 // defineMesh functions (missing mesh structs for now dueto problems checking accross groups
-int adios_define_mesh_group(int64_t ptr_new_group, char * name, char * group);
-int adios_define_mesh_file(int64_t ptr_new_group, char * name, char * file);
-int adios_define_mesh_timeSeriesFormat (const char * timeseries, struct adios_group_struct * new_group, const char * name);
-int adios_define_mesh_timeScale (const char * timescale, struct adios_group_struct * new_group, const char * name);
-int adios_define_mesh_timeSteps (const char * timesteps, struct adios_group_struct * new_group, const char * name);
-
-int adios_define_mesh_rectilinear (char * dimensions, char * coordinates,struct adios_group_struct * new_group,const char * name);
+int adios_common_define_mesh_file (int64_t ptr_new_group, char * name, char * file);
+int adios_common_define_mesh_group (int64_t ptr_new_group, const char * name, const char * group);
+int adios_common_define_mesh_timeVarying (const char * timevarying, int64_t group_id, const char * name);
+int adios_common_define_mesh_timeSeriesFormat (const char * timeseries, struct adios_group_struct * new_group, const char * name);
+int adios_common_define_mesh_timeScale (const char * timescale, struct adios_group_struct * new_group, const char * name);
+int adios_common_define_mesh_timeSteps (const char * timesteps, struct adios_group_struct * new_group, const char * name);
+
+int adios_define_mesh_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
+int adios_common_define_mesh_rectilinear (char * dimensions, char * coordinates, char * nspace, const char * name, int64_t group_id);
 int adios_define_mesh_rectilinear_dimensions (const char * dimensions,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates,struct adios_group_struct * new_group,const char * name);
 
-int adios_define_mesh_uniform (char * dimensions, char * origin, char * spacing, char * maximum, struct adios_group_struct * new_group ,const char * name);
+int adios_common_define_mesh_uniform (char * dimensions, char * origin, char * spacing, char * maximum, char * nspace, const char * name, int64_t group_id);
 int adios_define_mesh_uniform_dimensions (const char * dimensions, struct adios_group_struct * new_group, const char * name);
 int adios_define_mesh_uniform_origins (const char * origin ,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_uniform_spacings (const char * spacing,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_uniform_maximums (const char * maximum,struct adios_group_struct * new_group,const char * name);
 
-int adios_define_mesh_structured(char * dimensions, char * nspace, char * points,struct adios_group_struct * new_group, char * name);
+int adios_common_define_mesh_structured (char * dimensions, char * nspace, char * points, const char * name, int64_t group_id);
 int adios_define_mesh_structured_dimensions (const char * dimensions,struct adios_group_struct * new_group,const char * name);
-int adios_define_mesh_structured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
+//int adios_define_mesh_structured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_structured_pointsSingleVar (const char * points,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_structured_pointsMultiVar (const char * points,struct adios_group_struct * new_group,const char * name);
 
-int adios_define_mesh_unstructured(char *nspace, char *npoints, char *points, char * data, char * count, char * type, struct adios_group_struct * new_group, const char * name);
+int adios_common_define_mesh_unstructured (char * points, char * data, char * count, char * type, char * nspace, char * npoints, const char * name, int64_t group_id);
 int adios_define_mesh_unstructured_npoints (const char * npoints,struct adios_group_struct * new_group ,const char * name);
-int adios_define_mesh_unstructured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
+//int adios_define_mesh_unstructured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_unstructured_pointsSingleVar (const char * points,struct adios_group_struct * new_group,const char * name);
 int adios_define_mesh_unstructured_pointsMultiVar (const char * points,struct adios_group_struct * new_group ,const char * name);
 int adios_define_mesh_unstructured_uniformCells (const char * count,const char * data,const char * type,struct adios_group_struct * new_group,const char * name);
diff --git a/src/core/adios_internals_mxml.c b/src/core/adios_internals_mxml.c
index 86ebfd6..be29a0c 100644
--- a/src/core/adios_internals_mxml.c
+++ b/src/core/adios_internals_mxml.c
@@ -22,6 +22,8 @@
 #include "core/buffer.h"
 #include "core/adios_logger.h"
 #include "core/util.h" // PairStruct*
+#include "transforms/adios_transforms_hooks_write.h"
+#include "transforms/adios_transforms_write.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -157,7 +159,7 @@ static enum ADIOS_FLAG parseFlag (const char * attr_name, const char * flag
     return adios_flag_unknown;
 }
 
-
+/*
 static void adios_append_mesh_item (struct adios_mesh_item_list_struct ** root
         ,struct adios_mesh_item_list_struct * item
         )
@@ -175,7 +177,8 @@ static void adios_append_mesh_item (struct adios_mesh_item_list_struct ** root
         }
     }
 }
-
+*/
+/*
 static void adios_append_mesh_var (struct adios_mesh_var_list_struct ** root
         ,struct adios_mesh_var_list_struct * var
         )
@@ -193,7 +196,8 @@ static void adios_append_mesh_var (struct adios_mesh_var_list_struct ** root
         }
     }
 }
-
+*/
+/*
 static void adios_append_mesh_cell_list
 (struct adios_mesh_cell_list_list_struct ** root
  ,struct adios_mesh_cell_list_list_struct * cell_list
@@ -212,6 +216,7 @@ static void adios_append_mesh_cell_list
         }
     }
 }
+*/
 
 // primary mesh XML parsing
 int parseMeshUniform (mxml_node_t * node
@@ -354,12 +359,17 @@ int parseMeshUniform (mxml_node_t * node
                         if (!adios_define_mesh_uniform_maximums (value, new_group, name))
                             return 0;
                     } else
-                    {
-                        if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                        if (!strcasecmp (n->value.element.name, "nspace"))
                         {
-                            continue;
+                            const char * value;
+                            value = mxmlElementGetAttr (n, "value");
+                            adios_define_mesh_nspace (value, new_group, name);
+                        } else {
+                            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                            {
+                                continue;
+                            }
                         }
-                    }
     }
 
     return 1;
@@ -473,12 +483,18 @@ int parseMeshRectilinear1 (mxml_node_t * node
                     if (!adios_define_mesh_rectilinear_coordinatesSingleVar(value, new_group, name))
                         return 0;
                 } else
-                {
-                    if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                    if (!strcasecmp (n->value.element.name, "nspace"))
                     {
-                        continue;
+                        const char * value;
+                        value = mxmlElementGetAttr (n, "value");
+                        adios_define_mesh_nspace (value, new_group, name);
+                    } else
+                    {
+                        if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                        {
+                            continue;
+                        }
                     }
-                }
     }
 
     if (!saw_dimensions)
@@ -540,19 +556,19 @@ int parseMeshStructured1 (mxml_node_t * node
 
             saw_nspace = 1;
             value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                        "nspace required (%s)\n"
-                        ,name
-                        );
-
-                return 0;
-            }
-
-            if (!adios_define_mesh_structured_nspace (value, new_group, name))
-                return 0;
+            adios_define_mesh_nspace (value, new_group, name);
+//            if (!value)
+//            {
+//                log_warn ("config.xml: value attribute on "
+//                        "nspace required (%s)\n"
+//                        ,name
+//                        );
+//
+//                return 0;
+//            }
+
+//            if (!adios_define_mesh_structured_nspace (value, new_group, name))
+//                return 0;
         } else
             if (!strcasecmp (n->value.element.name, "dimensions"))
             {
@@ -680,7 +696,6 @@ int parseMeshUnstructured1 (mxml_node_t * node
         )
 {
     mxml_node_t * n;
-    int saw_points = 0;
     int saw_nspace =0;
     int saw_number_of_points = 0;
     int saw_points_multi_var = 0;
@@ -713,19 +728,20 @@ int parseMeshUnstructured1 (mxml_node_t * node
 
             saw_nspace = 1;
             value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                        "nspace required (%s)\n"
-                        ,name
-                        );
-
-                return 0;
-            }
-
-            if (!adios_define_mesh_unstructured_nspace (value, new_group, name))
-                return 0;
+            adios_define_mesh_nspace (value, new_group, name);
+
+//            if (!value)
+//            {
+//                log_warn ("config.xml: value attribute on "
+//                        "nspace required (%s)\n"
+//                        ,name
+//                        );
+//
+//                return 0;
+//            }
+
+//            if (!adios_define_mesh_unstructured_nspace (value, new_group, name))
+//                return 0;
         }else
             if (!strcasecmp (n->value.element.name, "number-of-points"))
             {
@@ -940,6 +956,7 @@ int parseMeshUnstructured1 (mxml_node_t * node
     return 1;
 }
 
+/*
 static int validatePath (const struct adios_var_struct * vars
         ,const char * test_path
         )
@@ -1020,6 +1037,7 @@ static int validatePath (const struct adios_var_struct * vars
 
     return 0;
 }
+*/
 
 static int parseGroup (mxml_node_t * node, char * schema_version)
 {
@@ -1129,7 +1147,7 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
             );
     new_group = (struct adios_group_struct *)ptr_new_group;
 
-   adios_define_schema_version(new_group, schema_version);
+   adios_common_define_schema_version(new_group, schema_version);
     for (n = mxmlWalkNext (node, node, MXML_DESCEND)
             ;n
             ;n = mxmlWalkNext (n, node, MXML_NO_DESCEND)
@@ -1222,58 +1240,53 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
 
             // fix the bgp bugs
             //            if (!adios_common_define_var (*(int64_t *) &new_group, name
-            if (!adios_common_define_var (ptr_new_group, name
+            int64_t var = adios_common_define_var (ptr_new_group, name
                         ,path, t1, dimensions
                         ,gb_global_dimensions
                         ,gb_local_offsets
-                                         ,transform_type // NCSU ALACRITY-ADIOS
-                        )
-               )
+                        );
+            if (!var)
             {
                 return 0;
             }else{
                 // Successfully define a variable, so now
+                // an attribute for the transform method if given.
+                if (transform_type && strcmp(transform_type,"")) {
+                    adios_common_set_transform (var, transform_type);
+                }
                 // an attribute for the mesh if it exists.
                 if (strcmp(mesh,"")){
-                    mpath1 = malloc(strlen("/adios_schema")+strlen(name)+1);
-                    strcpy(mpath1,name);
-                    strcat(mpath1,"/adios_schema");
-                    adios_common_define_attribute (ptr_new_group,mpath1,path,adios_string,mesh,"");
+                    adios_common_define_var_mesh (ptr_new_group, name, mesh, path);
                 }
                 // an attribute for the center if it exists.
                 if (strcmp(center,"")){
-                    mpath2 = malloc(strlen("/adios_schema/centering")+strlen(name)+1);
-                    strcpy(mpath2,name);
-                    strcat(mpath2,"/adios_schema/centering");
-                    adios_common_define_attribute (ptr_new_group,mpath2,path,adios_string,center,"");
+                    adios_common_define_var_centering (ptr_new_group, name, center, path);
                 }
                 // if a time attribute exists
                 // parse it and define it
                 if (strcmp(tsteps,"")){
-                    adios_define_var_timesteps(tsteps,new_group,name,path);
+                    adios_common_define_var_timesteps(tsteps,new_group,name,path);
                 }
                 // if a time scale attribute exists
                 // parse it and define it
                 if (strcmp(tscale,"")){
-                    adios_define_var_timescale(tscale,new_group,name,path);
+                    adios_common_define_var_timescale(tscale,new_group,name,path);
                 }
                 // if a time series format attribute exists
                 // parse it and define it
                 if (strcmp(tformat,"")){
-                    adios_define_var_timeseriesformat(tformat,new_group,name,path);
+                    adios_common_define_var_timeseriesformat(tformat,new_group,name,path);
                 }
                 // if a hyperslab attribute exists
                 // parse it and define it
                 if (strcmp(hyperslab,"")){
-                    adios_define_var_hyperslab(hyperslab,new_group,name,path);
+                    adios_common_define_var_hyperslab(hyperslab,new_group,name,path);
                 }
             }
         } else
             if (!strcasecmp (n->value.element.name, "global-bounds"))
             {
                 mxml_node_t * n1;   // used for global_bounds
-                struct adios_global_bounds_struct * new_global_bounds = 0;
-
                 const char * dimensions = 0;
                 const char * dimension = 0;
                 const char * global_dimensions = 0;
@@ -1416,51 +1429,47 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                             parseFlag ("read", read_flag, adios_flag_no);
                         // fix the bgp bugs
                         //                    if (!adios_common_define_var (*(int64_t *) &new_group
-                        if (!adios_common_define_var (ptr_new_group
-                                    ,name
-                                    ,path, t1, dimensions
-                                    ,gb_global_dimensions
-                                    ,gb_local_offsets
-                                                 ,transform_type // NCSU ALACRITY-ADIOS
-                                    )
-                           )
+                        int64_t var = adios_common_define_var (ptr_new_group, name
+                                ,path, t1, dimensions
+                                ,gb_global_dimensions
+                                ,gb_local_offsets
+                                );
+                        if (!var)
                         {
                             return 0;
                         }else{
                             // Successfully define a variable, so now
+                            // an attribute for the transform method if given.
+                            if (transform_type && strcmp(transform_type,"")) {
+                                adios_common_set_transform (var, transform_type);
+                            }
                             // an attribute for the mesh if it exists.
                             if (strcmp(mesh,"")){
-                                mpath1 = malloc(strlen("/adios_schema")+strlen(name)+1);
-                                strcpy(mpath1,name);
-                                strcat(mpath1,"/adios_schema");
-                                adios_common_define_attribute (ptr_new_group,mpath1,path,adios_string,mesh,"");
+                                adios_common_define_var_mesh (ptr_new_group, name, mesh, path);
                             }
                             // an attribute for the mesh if it exists.
                             if (strcmp(center,"")){
-                                mpath2 = malloc(strlen("/adios_schema/centering")+strlen(name)+1);
-                                strcpy(mpath2,name);
-                                strcat(mpath2,"/adios_schema/centering");
-                                adios_common_define_attribute (ptr_new_group,mpath2,path,adios_string,center,"");
+                                adios_common_define_var_centering (ptr_new_group, name, center, path);
                             }
                             // if a time attribute exists
                             // parse it and define it
                             if (strcmp(tsteps,"")){
-                                adios_define_var_timesteps(tsteps,new_group,name,path);
+                                adios_common_define_var_timesteps(tsteps,new_group,name,path);
                             }
                             // if a time scale attribute exists
                             // parse it and define it
                             if (strcmp(tscale,"")){
-                                adios_define_var_timescale(tscale,new_group,name,path);
+                                adios_common_define_var_timescale(tscale,new_group,name,path);
                             }
                             // if a time series format attribute exists
                             // parse it and define it
                             if (strcmp(tformat,"")){
-                                adios_define_var_timeseriesformat(tformat,new_group,name,path);
+                                adios_common_define_var_timeseriesformat(tformat,new_group,name,path);
                             }
                             // if a hyperslab attribute exists
                             // parse it and define it
                             if (strcmp(hyperslab,"")){
-                                adios_define_var_hyperslab(hyperslab,new_group,name,path);
+                                adios_common_define_var_hyperslab(hyperslab,new_group,name,path);
                             }
                         }
                     } else
@@ -1571,6 +1580,7 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                     const char * time_scale;
                     const char * time_format;
                     const char * mesh_file;
+                    const char * mesh_ref;
                     const char * mesh_group;
                     int t_varying;
                     const char * name;
@@ -1622,17 +1632,22 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                     // Define attribute for the type and time varying characteristics
                     adios_common_define_attribute (ptr_new_group,meshtype,"/",adios_string,type,"");
                     adios_common_define_attribute (ptr_new_group,meshtime,"/",adios_string,time_varying,"");
-                    adios_define_mesh_timeSteps(time_steps, new_group, name);
-                    adios_define_mesh_timeScale(time_scale, new_group, name);
-                    adios_define_mesh_timeSeriesFormat(time_format, new_group, name);
+                    adios_common_define_mesh_timeSteps(time_steps, new_group, name);
+                    adios_common_define_mesh_timeScale(time_scale, new_group, name);
+                    adios_common_define_mesh_timeSeriesFormat(time_format, new_group, name);
                     // Only parse mesh if the variables are in this file
                     // otherwise simply point the mesh file
                     mesh_file = mxmlElementGetAttr(n, "file");
-                    mesh_group = mxmlElementGetAttr(n, "group");
-
                     if (mesh_file)
                         adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
+                    else
+                    {
+                        mesh_ref = mxmlElementGetAttr(n, "ref");
+                        if (mesh_ref)
+                            adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_ref,"");
+                    }
 
+                    mesh_group = mxmlElementGetAttr(n, "group");
                     if (mesh_group)
                         adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
 
@@ -1723,8 +1738,6 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
 
 static int parseAnalysis (mxml_node_t * node)
 {
-    mxml_node_t * n;
-
     const char * group = 0;
     const char * var = 0;
     const char * bin_intervals = 0;
@@ -1971,6 +1984,30 @@ static int parseBuffer (mxml_node_t * node)
     return 1;
 }
 
+
+void PRINT_MXML_NODE (mxml_node_t *root)
+{
+    if (!root)
+    {
+        log_debug("MXML root=NULL\n");
+    }
+    else if (root->type == MXML_ELEMENT) 
+    {
+        log_debug("MXML ELEMENT root=%p, name=[%s] parent=%p\n",
+                root, root->value.element.name, root->parent);
+    } 
+    else if (root->type == MXML_TEXT) 
+    {
+        log_debug("MXML TEXT root=%p, text=[%s] parent=%p\n",
+                root, root->value.text.string, root->parent);
+    } 
+    else 
+    {
+        log_debug("MXML Type=%d root=%p, parent=%p\n",
+                root->type, root, root->parent);
+    }
+}
+
 int adios_parse_config (const char * config, MPI_Comm comm)
 {
     FILE * fp = 0;
@@ -2069,60 +2106,18 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     }
 
     root = doc;
+    PRINT_MXML_NODE(root);
 
-    while (root && root->type != MXML_ELEMENT)
-    {
-        root = mxmlWalkNext (root, doc, MXML_DESCEND);
+    if (strcasecmp (root->value.element.name, "adios-config")) {
+        root = mxmlFindElement (doc, doc, "adios-config", NULL, NULL, MXML_DESCEND);
+        PRINT_MXML_NODE(root);
     }
 
-    while (!strncmp (root->value.element.name, "!--", 3))
-    {
-        root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);
-        root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);
-    }
 
-    if (strcasecmp (root->value.element.name, "adios-config"))
+    if (!root || !root->value.element.name || strcasecmp (root->value.element.name, "adios-config"))
     {
-        if (strncmp (root->value.element.name, "?xml", 4))
-        {
-            adios_error (err_invalid_xml_doc, "config.xml: invalid root xml element: %s\n"
-                    ,root->value.element.name
-                    );
-
-            mxmlRelease (doc);
-
-            return 0;
-        }
-        else
-        {
-            while (!strncmp (root->value.element.name, "!--", 3))
-            {
-                root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);
-            }
-
-            root = mxmlWalkNext (root, doc, MXML_DESCEND);  // skip ver num
-            root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);  // get next
-            while (!strncmp (root->value.element.name, "!--", 3))
-            {
-                root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);
-                root = mxmlWalkNext (root, doc, MXML_NO_DESCEND);
-            }
-        }
-    }
-    else
-    {
-        //printf ("it is adios-config\n");
-    }
-
-
-    if (strcasecmp (root->value.element.name, "adios-config"))
-    {
-        adios_error (err_invalid_xml_doc, "config.xml: invalid root xml element: %s\n"
-                ,root->value.element.name
-                );
-
+        adios_error (err_invalid_xml_doc, "config.xml: did not find adios-config xml element\n");
         mxmlRelease (doc);
-
         return 0;
     }
     else
diff --git a/src/core/adios_read.c b/src/core/adios_read.c
index c304b66..3d155bc 100644
--- a/src/core/adios_read.c
+++ b/src/core/adios_read.c
@@ -93,6 +93,11 @@ ADIOS_MESH * adios_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     return common_read_inq_mesh_byid (fp, meshid);
 }
 
+int adios_complete_meshinfo (ADIOS_FILE *datafile, ADIOS_FILE *meshfile, ADIOS_MESH *meshinfo)
+{
+    return common_read_complete_meshinfo (datafile, meshfile, meshinfo);
+}
+
 void adios_free_meshinfo (ADIOS_MESH *meshinfo)
 {
     common_read_free_meshinfo (meshinfo);
diff --git a/src/core/adios_read_hooks.c b/src/core/adios_read_hooks.c
index 0700c3f..69916e4 100644
--- a/src/core/adios_read_hooks.c
+++ b/src/core/adios_read_hooks.c
@@ -7,6 +7,7 @@
 
 #include "config.h"
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include "adios_read_hooks.h"
 
@@ -15,11 +16,12 @@ if (!strcasecmp (buf,b)) \
 {*method=d;*requires_group_comm=r;return 1;}
 
 #define ASSIGN_FNS(a,b) \
-(*t) [b].adios_init_method_fn = adios_read_##a##_init_method; \
-(*t) [b].adios_finalize_method_fn = adios_read_##a##_finalize_method; \
-(*t) [b].adios_open_fn = adios_read_##a##_open; \
-(*t) [b].adios_open_file_fn = adios_read_##a##_open_file; \
-(*t) [b].adios_close_fn = adios_read_##a##_close; \
+(*t) [b].method_name = strdup(#b); \
+(*t) [b].adios_read_init_method_fn = adios_read_##a##_init_method; \
+(*t) [b].adios_read_finalize_method_fn = adios_read_##a##_finalize_method; \
+(*t) [b].adios_read_open_fn = adios_read_##a##_open; \
+(*t) [b].adios_read_open_file_fn = adios_read_##a##_open_file; \
+(*t) [b].adios_read_close_fn = adios_read_##a##_close; \
 (*t) [b].adios_advance_step_fn = adios_read_##a##_advance_step; \
 (*t) [b].adios_release_step_fn = adios_read_##a##_release_step; \
 (*t) [b].adios_inq_var_byid_fn = adios_read_##a##_inq_var_byid; \
diff --git a/src/core/adios_read_hooks.h b/src/core/adios_read_hooks.h
index d8a7f23..0882816 100644
--- a/src/core/adios_read_hooks.h
+++ b/src/core/adios_read_hooks.h
@@ -31,7 +31,7 @@ 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); \
 void adios_read_##a##_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran); \
-void adios_read_##a##_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group); \
+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); \
 /* NCSU ALACRITY-ADIOS */ \
 ADIOS_TRANSINFO * adios_read_##a##_inq_var_transinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi); \
@@ -70,12 +70,12 @@ FORWARD_DECLARE(datatap)
 //FORWARD_DECLARE(hdf5)
 
 
-typedef int  (* ADIOS_INIT_METHOD_FN) (MPI_Comm comm, PairStruct * params);
-typedef int  (* ADIOS_FINALIZE_METHOD_FN) ();
-typedef ADIOS_FILE * (* ADIOS_OPEN_FN) (const char * fname, MPI_Comm comm, 
+typedef int  (* ADIOS_READ_INIT_METHOD_FN) (MPI_Comm comm, PairStruct * params);
+typedef int  (* ADIOS_READ_FINALIZE_METHOD_FN) ();
+typedef ADIOS_FILE * (* ADIOS_READ_OPEN_FN) (const char * fname, MPI_Comm comm, 
                                  enum ADIOS_LOCKMODE lock_mode, float timeout_sec);
-typedef ADIOS_FILE * (* ADIOS_OPEN_FILE_FN) (const char * fname, MPI_Comm comm);
-typedef int  (* ADIOS_CLOSE_FN) (ADIOS_FILE *fp);
+typedef ADIOS_FILE * (* ADIOS_READ_OPEN_FILE_FN) (const char * fname, MPI_Comm comm);
+typedef int  (* ADIOS_READ_CLOSE_FN) (ADIOS_FILE *fp);
 typedef int  (* ADIOS_ADVANCE_STEP_FN) (ADIOS_FILE *fp, int last, float timeout_sec);
 typedef void (* ADIOS_RELEASE_STEP_FN) (ADIOS_FILE *fp);
 typedef ADIOS_VARINFO * (* ADIOS_INQ_VAR_BYID_FN) (const ADIOS_FILE *fp, int varid);
@@ -89,18 +89,19 @@ typedef int  (* ADIOS_CHECK_READS_FN) (const ADIOS_FILE * fp, ADIOS_VARCHUNK **
 typedef int  (* ADIOS_GET_ATTR_BYID_FN) (const ADIOS_FILE * fp, int attrid, 
                                  enum ADIOS_DATATYPES * type, int * size, void ** data);
 typedef void (* ADIOS_RESET_DIMENSION_ORDER_FN) (const ADIOS_FILE *fp, int is_fortran);
-typedef void (* ADIOS_GET_GROUPINFO_FN) (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group); 
+typedef 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); 
 typedef ADIOS_TRANSINFO * (*ADIOS_READ_INQ_VAR_TRANSINFO)(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi); /* NCSU ALACRITY-ADIOS */
 typedef int (*ADIOS_READ_INQ_VAR_TRANS_BLOCKINFO)(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti); /* NCSU ALACRITY-ADIOS */
 
 struct adios_read_hooks_struct
 {
-    ADIOS_INIT_METHOD_FN            adios_init_method_fn;
-    ADIOS_FINALIZE_METHOD_FN        adios_finalize_method_fn;
-    ADIOS_OPEN_FN                   adios_open_fn;
-    ADIOS_OPEN_FILE_FN              adios_open_file_fn;
-    ADIOS_CLOSE_FN                  adios_close_fn;
+    char * method_name;
+    ADIOS_READ_INIT_METHOD_FN       adios_read_init_method_fn;
+    ADIOS_READ_FINALIZE_METHOD_FN   adios_read_finalize_method_fn;
+    ADIOS_READ_OPEN_FN              adios_read_open_fn;
+    ADIOS_READ_OPEN_FILE_FN         adios_read_open_file_fn;
+    ADIOS_READ_CLOSE_FN             adios_read_close_fn;
     ADIOS_ADVANCE_STEP_FN           adios_advance_step_fn;
     ADIOS_RELEASE_STEP_FN           adios_release_step_fn;
     ADIOS_INQ_VAR_BYID_FN           adios_inq_var_byid_fn;
@@ -117,5 +118,7 @@ struct adios_read_hooks_struct
     ADIOS_READ_INQ_VAR_TRANS_BLOCKINFO    adios_inq_var_trans_blockinfo_fn;
 };
 
+void adios_read_hooks_init (struct adios_read_hooks_struct ** t);
+
 #undef FORWARD_DECLARE
 #endif
diff --git a/src/core/adios_read_v1.c b/src/core/adios_read_v1.c
index d9b94cd..f8cdd30 100644
--- a/src/core/adios_read_v1.c
+++ b/src/core/adios_read_v1.c
@@ -47,13 +47,14 @@
 #undef adios_type_to_string
 #undef adios_type_size
 #undef adios_print_groupinfo
-//#undef adios_print_fileinfo
+#undef adios_print_fileinfo
 
 
 #include "core/common_read.h"
 
 
 #include "public/adios_error.h"
+#include "core/bp_utils.h"
 #define BYTE_ALIGN 8
 
 static enum ADIOS_READ_METHOD lastmethod = ADIOS_READ_METHOD_BP;
@@ -224,8 +225,7 @@ static ADIOS_VARINFO_V1 * adios_varinfo_to_v1 (ADIOS_GROUP_V1 *gp, ADIOS_VARINFO
         v->value = vi->value; 
              
         /* TIME dimension should be emulated here !!! */
-        int timed = common_read_is_var_timed((ADIOS_FILE *)gp->fp->internal_data, vi->varid);
-        if (timed) {
+        if (vi->nsteps > 1) {
             v->ndim = vi->ndim + 1;
             v->timedim = 0;
         } else {
@@ -234,7 +234,7 @@ static ADIOS_VARINFO_V1 * adios_varinfo_to_v1 (ADIOS_GROUP_V1 *gp, ADIOS_VARINFO
         }
         int tidx = 0, i;
         v->dims = (uint64_t *) malloc (sizeof(uint64_t) * (v->ndim));
-        if (timed) {
+        if (vi->nsteps > 1) {
             v->dims[0] = vi->nsteps;
             tidx=1;
         }
@@ -250,7 +250,7 @@ static ADIOS_VARINFO_V1 * adios_varinfo_to_v1 (ADIOS_GROUP_V1 *gp, ADIOS_VARINFO
         }
 
         if (stat) {
-            v->characteristics_count;// = stat->characteristics_count; FIXME
+            v->characteristics_count=0;// = stat->characteristics_count; FIXME
             v->gmin = stat->min; 
             v->gmax = stat->max; 
             v->gavg = stat->avg; 
@@ -472,7 +472,7 @@ void adios_print_fileinfo_v1 (ADIOS_FILE_V1 *fp)
 // NCSU - Timer series analysis, correlation
 double adios_stat_cor_v1 (ADIOS_VARINFO_V1 * vix, ADIOS_VARINFO_V1 * viy, char * characteristic, uint32_t time_start, uint32_t time_end, uint32_t lag)
 {
-    int i,j;
+    int i;
 
     double avg_x = 0.0, avg_y = 0.0, avg_lag = 0.0;
     double var_x = 0.0, var_y = 0.0, var_lag = 0.0;
@@ -680,7 +680,7 @@ double adios_stat_cor_v1 (ADIOS_VARINFO_V1 * vix, ADIOS_VARINFO_V1 * viy, char *
 //covariance(x,y) = sum(i=1,..N) [(x_1 - x_mean)(y_i - y_mean)]/N
 double adios_stat_cov_v1 (ADIOS_VARINFO_V1 * vix, ADIOS_VARINFO_V1 * viy, char * characteristic, uint32_t time_start, uint32_t time_end, uint32_t lag)
 {
-    int i,j;
+    int i;
 
     double avg_x = 0.0, avg_y = 0.0, avg_lag = 0.0;
     double cov = 0;
diff --git a/src/core/adios_selection_util.c b/src/core/adios_selection_util.c
index f6e7439..734f3a4 100644
--- a/src/core/adios_selection_util.c
+++ b/src/core/adios_selection_util.c
@@ -13,6 +13,7 @@
 #include "public/adios_selection.h"
 #include "adios_subvolume.h"
 #include "adios_selection_util.h"
+#include "common_read.h"
 
 //
 // NOTE: Intersection type guarantees:
@@ -51,7 +52,6 @@ ADIOS_SELECTION * adios_selection_intersect_bb_pts(const ADIOS_SELECTION_BOUNDIN
     const uint64_t max_new_npts = pts2->npoints;
 
     uint64_t *new_pts = malloc(max_new_npts * ndim * sizeof(uint64_t));
-    uint64_t i;
     int j;
     uint64_t *new_pts_ptr = new_pts;
     uint64_t *pts2_ptr;
@@ -99,7 +99,6 @@ ADIOS_SELECTION * adios_selection_intersect_pts_pts(const ADIOS_SELECTION_POINTS
     const uint64_t max_new_npts = pts1->npoints > pts2->npoints ? pts1->npoints : pts2->npoints;
 
     uint64_t *new_pts = malloc(max_new_npts * ndim * sizeof(uint64_t));
-    uint64_t i, j;
     int k;
     uint64_t *new_pts_ptr = new_pts;
     uint64_t *pts1_ptr, *pts2_ptr;
@@ -235,7 +234,7 @@ ADIOS_SELECTION * adios_selection_intersect(const ADIOS_SELECTION *s1, const ADI
     switch (s1->type) {
     case ADIOS_SELECTION_BOUNDINGBOX:
     {
-        const ADIOS_SELECTION_POINTS_STRUCT *bb1 = &s1->u.bb;
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1 = &s1->u.bb;
         return adios_selection_intersect_bb(bb1, s2);
     }
     case ADIOS_SELECTION_POINTS:
diff --git a/src/core/adios_socket.c b/src/core/adios_socket.c
index 50b9e45..21df9f1 100644
--- a/src/core/adios_socket.c
+++ b/src/core/adios_socket.c
@@ -57,7 +57,7 @@ int adios_set_socket_address(char *hostname,int port,struct sockaddr_in *address
       return 1;
   }
 
-  memset(address,0,sizeof(address));
+  memset(address,0,sizeof(*address));
   memcpy(&(address->sin_addr),hp->h_addr,hp->h_length);
   address->sin_family = hp->h_addrtype;
   address->sin_port = htons(port);
diff --git a/src/core/adios_subvolume.c b/src/core/adios_subvolume.c
index cdac46d..4d277d5 100644
--- a/src/core/adios_subvolume.c
+++ b/src/core/adios_subvolume.c
@@ -13,6 +13,7 @@
 #include "core/util.h"
 #include "core/common_read.h"
 #include "core/adios_subvolume.h"
+#include "core/adios_internals.h"
 
 void vector_add(int ndim, uint64_t *dst_vec, const uint64_t *vec1, const uint64_t *vec2) {
     while (ndim--)
@@ -364,7 +365,6 @@ void copy_subvolume_ragged_offset(void *dst, const void *src, int ndim, const ui
 
         // Enfoce the safety condition for overlapping buffers here
         if (buffers_intersect) {
-            int dim;
             assert((char*)src + src_offset >= (char*)dst + dst_offset);
             for (i = 0; i < last_noncovering_dim + 1; i++)
                 assert(src_strides[i] >= dst_strides[i]);
@@ -419,7 +419,6 @@ void compact_subvolume_ragged_offset(void *buf, int ndim, const uint64_t *subv_d
                                      enum ADIOS_DATATYPES elem_type) {
     int i;
     uint64_t zero[32];
-    uint64_t new_data_buflen;
 
     // Ensure all arguments are non-NULL, and that the subvolume fits
     // completely within the buffer volume
@@ -435,7 +434,7 @@ void compact_subvolume_ragged_offset(void *buf, int ndim, const uint64_t *subv_d
                         buf_dims, buf_subv_offsets);
 
     // If the compact operation will do something, do it now
-    if (!adios_copyspec_is_noop(&compact_copyspec)) {
+    if (!adios_copyspec_is_noop(compact_copyspec)) {
         // Overlapping subvolume copy allowed because it matches the safety
         // condition as defined in comment at the top of adios_subvolume.h.
         // NOTE: we infer no endianness swap, as this is an intra-buffer operation
@@ -503,7 +502,7 @@ ADIOS_SELECTION * varblock_to_bb(int ndim, const ADIOS_VARBLOCK *vb) {
                                              bufdup(vb->count, sizeof(uint64_t), ndim));
 }
 
-uint64_t compute_selection_size(ADIOS_SELECTION *sel) {
+uint64_t compute_selection_size(const ADIOS_SELECTION *sel) {
     uint64_t sel_size;
     switch (sel->type) {
     case ADIOS_SELECTION_BOUNDINGBOX:
diff --git a/src/core/adios_subvolume.h b/src/core/adios_subvolume.h
index 99ed012..c16fbf7 100644
--- a/src/core/adios_subvolume.h
+++ b/src/core/adios_subvolume.h
@@ -169,7 +169,7 @@ void copy_subvolume_ragged_offset(void *dst, const void *src, int ndim, const ui
  * subvolume copy spec.
  */
 void copy_subvolume_with_spec(void *dst, const void *src,
-                              const const adios_subvolume_copy_spec *copy_spec,
+                              const adios_subvolume_copy_spec *copy_spec,
                               enum ADIOS_DATATYPES datum_type,
                               enum ADIOS_FLAG swap_endianness);
 
@@ -258,4 +258,6 @@ ADIOS_SELECTION * new_derelativized_selection(const ADIOS_SELECTION *sel, const
  */
 ADIOS_SELECTION * varblock_to_bb(int ndim, const ADIOS_VARBLOCK *vb);
 
+uint64_t compute_selection_size(const ADIOS_SELECTION *sel);
+
 #endif /* ADIOS_SUBVOLUME_H_ */
diff --git a/src/core/adios_timing.h b/src/core/adios_timing.h
index ade3590..262d51b 100644
--- a/src/core/adios_timing.h
+++ b/src/core/adios_timing.h
@@ -41,5 +41,7 @@ void adios_timing_stop (struct adios_timing_struct * ts, int64_t index);
 void adios_timing_declare_user_timers (int64_t fd_p, int user_timer_count, char** user_timer_names);
 
 
+/* Print out all gathered info */
+void adios_timing_write_xml_common (int64_t fd_p, const char* filename);
 
 #endif
diff --git a/src/core/adios_transport_hooks.c b/src/core/adios_transport_hooks.c
index 8d5541a..30a201f 100644
--- a/src/core/adios_transport_hooks.c
+++ b/src/core/adios_transport_hooks.c
@@ -6,6 +6,7 @@
  */
 
 #include "config.h"
+#include "string.h" // strdup
 
 #ifdef _INTERNAL
     /* Sequential processes can use the library compiled with -D_NOMPI */
@@ -23,7 +24,8 @@
 if (!strcasecmp (buf,b)) \
 {*method=d;*requires_group_comm=r;return 1;}
 
-#define ASSIGN_FNS(a,b) \
+#define ASSIGN_FNS(a,b,name) \
+(*t) [b].method_name = strdup(name); \
 (*t) [b].adios_init_fn = adios_##a##_init; \
 (*t) [b].adios_open_fn = adios_##a##_open; \
 (*t) [b].adios_should_buffer_fn = adios_##a##_should_buffer; \
@@ -46,14 +48,14 @@ void adios_init_transports (struct adios_transport_struct ** t)
 #  ifndef _NOMPI
 
 #    if HAVE_MPI
-    ASSIGN_FNS(mpi,ADIOS_METHOD_MPI)
-    ASSIGN_FNS(mpi_lustre,ADIOS_METHOD_MPI_LUSTRE)
-    ASSIGN_FNS(mpi_amr,ADIOS_METHOD_MPI_AMR)
+    ASSIGN_FNS(mpi,ADIOS_METHOD_MPI,"MPI")
+    ASSIGN_FNS(mpi_lustre,ADIOS_METHOD_MPI_LUSTRE,"MPI_LUSTRE")
+    ASSIGN_FNS(mpi_amr,ADIOS_METHOD_MPI_AMR,"MPI_AGGREGATE")
 #    if HAVE_BGQ
-    ASSIGN_FNS(mpi_bgq,ADIOS_METHOD_MPI_BGQ)
+    ASSIGN_FNS(mpi_bgq,ADIOS_METHOD_MPI_BGQ,"MPI_BGQ")
 #    endif
     //Tian's method
-    ASSIGN_FNS(var_merge,ADIOS_METHOD_VAR_MERGE)
+    ASSIGN_FNS(var_merge,ADIOS_METHOD_VAR_MERGE,"VAR_MERGE")
 #      ifndef NO_RESEARCH_TRANSPORTS
     //ASSIGN_FNS(mpi_stripe,ADIOS_METHOD_MPI_STRIPE)
     //ASSIGN_FNS(mpi_cio,ADIOS_METHOD_MPI_CIO)
@@ -65,37 +67,37 @@ void adios_init_transports (struct adios_transport_struct ** t)
 #    endif
 
 #    if HAVE_PHDF5
-    ASSIGN_FNS(phdf5,ADIOS_METHOD_PHDF5)
+    ASSIGN_FNS(phdf5,ADIOS_METHOD_PHDF5,"PHDF5")
 #    endif
 
 #    if HAVE_NC4PAR
-    ASSIGN_FNS(nc4,ADIOS_METHOD_NC4)
+    ASSIGN_FNS(nc4,ADIOS_METHOD_NC4,"NC4")
 #    endif
 
 #    if HAVE_NSSI
-    ASSIGN_FNS(nssi,ADIOS_METHOD_NSSI_STAGING)
-    ASSIGN_FNS(nssi_filter,ADIOS_METHOD_NSSI_FILTER)
+    ASSIGN_FNS(nssi,ADIOS_METHOD_NSSI_STAGING,"NSSI")
+    ASSIGN_FNS(nssi_filter,ADIOS_METHOD_NSSI_FILTER,"NSSI_FILTER")
 #    endif
 
 #  endif /* _NOMPI */
 
 #  if HAVE_DATATAP
-    ASSIGN_FNS(datatap,ADIOS_METHOD_DATATAP)
+    ASSIGN_FNS(datatap,ADIOS_METHOD_DATATAP,"DATATAP")
 #  endif
 
 # if HAVE_FLEXPATH
-    ASSIGN_FNS(flexpath,ADIOS_METHOD_FLEXPATH)
+    ASSIGN_FNS(flexpath,ADIOS_METHOD_FLEXPATH,"FLEXPATH")
 # endif
 
-    ASSIGN_FNS(posix,ADIOS_METHOD_POSIX)
-    ASSIGN_FNS(posix1,ADIOS_METHOD_POSIX1)
+    ASSIGN_FNS(posix,ADIOS_METHOD_POSIX,"POSIX")
+    ASSIGN_FNS(posix1,ADIOS_METHOD_POSIX1,"POSIX1")
 
 #  if HAVE_DATASPACES
-    ASSIGN_FNS(dataspaces,ADIOS_METHOD_DATASPACES)
+    ASSIGN_FNS(dataspaces,ADIOS_METHOD_DATASPACES,"DATASPACES")
 #  endif
 
 #  if HAVE_DIMES
-    ASSIGN_FNS(dimes,ADIOS_METHOD_DIMES)
+    ASSIGN_FNS(dimes,ADIOS_METHOD_DIMES,"DIMES")
 #  endif
 
 #  ifndef NO_RESEARCH_TRANSPORTS
diff --git a/src/core/adios_transport_hooks.h b/src/core/adios_transport_hooks.h
index 7c20086..0ac64e2 100644
--- a/src/core/adios_transport_hooks.h
+++ b/src/core/adios_transport_hooks.h
@@ -49,10 +49,6 @@ void adios_##a##_end_iteration (struct adios_method_struct * method) {} \
 void adios_##a##_start_calculation (struct adios_method_struct * method) {} \
 void adios_##a##_stop_calculation (struct adios_method_struct * method) {}
 
-//#ifdef ADIOS_EMPTY_TRANSPORTS
-// this is defined in the lint program to get empty implementations
-//#define FORWARD_DECLARE(a) FORWARD_DECLARE_EMPTY(a) \
-//#else
 #define FORWARD_DECLARE(a) \
 void adios_##a##_init (const PairStruct * parameters \
                       ,struct adios_method_struct * method \
@@ -172,7 +168,7 @@ enum ADIOS_IO_METHOD {ADIOS_METHOD_UNKNOWN     = -2
 FORWARD_DECLARE(dataspaces)
 #endif
 
-#if HAVE_DIMES
+#if defined(HAVE_DIMES) && !defined(ADIOS_EMPTY_TRANSPORTS) 
 FORWARD_DECLARE(dimes)
 #endif
 
diff --git a/src/core/adiosf.c b/src/core/adiosf.c
index 5cc7dfb..a5763ee 100644
--- a/src/core/adiosf.c
+++ b/src/core/adiosf.c
@@ -18,6 +18,7 @@
 #include "core/globals.h"
 #include "public/adios_error.h"
 #include "core/adios_logger.h"
+#include "core/adios_timing.h"
 
 #ifdef __cplusplus
 extern "C"  /* prevent C++ name mangling */
@@ -144,7 +145,7 @@ void FC_FUNC_(adios_write_byid, ADIOS_WRITE_BYID)
     if (!var)
     {
         adios_error (err_invalid_data, "Invalid data (NULL pointer) passed to write\n");
-        *err = adios_error;
+        *err = adios_errno;
         return;
     }
 
@@ -534,8 +535,7 @@ void FC_FUNC_(adios_define_var, ADIOS_DEFINE_VAR)
     if (buf1 != 0 && buf2 != 0) {
         *id = adios_common_define_var (*group_id, buf1, buf2
                                        ,(enum ADIOS_DATATYPES) *type
-                                       ,buf3, buf4, buf5
-                                       ,NULL); // NCSU ALACRITY-ADIOS
+                                       ,buf3, buf4, buf5);
 
         free (buf1);
         free (buf2);
@@ -548,6 +548,23 @@ void FC_FUNC_(adios_define_var, ADIOS_DEFINE_VAR)
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// adios_common_set_transform is in adios_internals.c
+// set the transform method for the selected variable (default is "none")
+void FC_FUNC_(adios_set_transform, ADIOS_SET_TRANSFORM)
+    (int64_t * var_id, const char *transform_type_str, int *err, 
+     int str_size)
+{
+    char * buf1 = 0;
+    adios_errno = err_no_error;
+    buf1 = futils_fstr_to_cstr (transform_type_str, str_size);
+    if (buf1 != 0) {
+        *err = adios_common_set_transform (*var_id, buf1);
+        free (buf1);
+    } else {
+        *err = adios_errno;
+    }
+}
+///////////////////////////////////////////////////////////////////////////////
 // adios_common_define_attribute is in adios_internals.c
 void FC_FUNC_(adios_define_attribute, ADIOS_DEFINE_ATTRIBUTE) 
     (int64_t * group, const char * name
diff --git a/src/core/adiosf_read.c b/src/core/adiosf_read.c
index 367ada3..6148707 100644
--- a/src/core/adiosf_read.c
+++ b/src/core/adiosf_read.c
@@ -12,7 +12,7 @@
 #define __INCLUDED_FROM_FORTRAN_API__
 #include "public/adios_read.h"
 #include "public/adios_error.h"
-//#include "core/bp_utils.h" // bp_get_type_size
+#include "core/bp_utils.h" // bp_get_type_size
 //#include "core/bp_types.h"
 #include "core/common_read.h"
 #include "core/futils.h"
@@ -133,6 +133,7 @@ int FC_FUNC_(adios_advance_step, ADIOS_ADVANCE_STEP)
     *err = common_read_advance_step (afp, *last, *timeout_sec);
     if (*err)
         PRINT_ERRMSG();
+    return *err;
 }
 
 
@@ -222,7 +223,6 @@ void FC_FUNC_(adios_inq_file, ADIOS_INQ_FILE)
          int     * err)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *fp;
-    int i;
     if (afp != NULL) {
         *vars_count = afp->nvars;
         *attrs_count = afp->nattrs;
@@ -346,7 +346,6 @@ void FC_FUNC_(adios_schedule_read, ADIOS_SCHEDULE_READ)
     ADIOS_FILE *afp = (ADIOS_FILE *) *fp;
     ADIOS_SELECTION * sel = (ADIOS_SELECTION *) *fsel;
     char *varstr;
-    int i;
     varstr = futils_fstr_to_cstr(varname, varname_len);
     if (varstr != NULL) {
         *err = common_read_schedule_read (afp, sel, varstr, *from_step, *nsteps, NULL /* NCSU ALACRITY-ADIOS */, data);
@@ -388,7 +387,7 @@ void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS)
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     ADIOS_VARINFO *vi = NULL;
     char *varstr;
-    int i, size;
+    int size;
 
     varstr = futils_fstr_to_cstr(varname, varname_len);
     if (varstr != NULL) {
@@ -485,7 +484,6 @@ void FC_FUNC_(adios_get_attr, ADIOS_GET_ATTR)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     char *attrstr;
-    int i;
     void *data;
     int size;
     enum ADIOS_DATATYPES type;
@@ -514,7 +512,6 @@ void FC_FUNC_(adios_inq_attr, ADIOS_INQ_ATTR)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     char *attrstr;
-    int i;
     void *data;
     attrstr = futils_fstr_to_cstr(attrname, attrname_len);
     if (attrstr != NULL) {
diff --git a/src/core/adiosf_read_v1.c b/src/core/adiosf_read_v1.c
index 2e312fd..57261f6 100644
--- a/src/core/adiosf_read_v1.c
+++ b/src/core/adiosf_read_v1.c
@@ -12,7 +12,7 @@
 #define __INCLUDED_FROM_FORTRAN_API__
 #include "public/adios_read.h"
 #include "public/adios_error.h"
-//#include "core/bp_utils.h"
+#include "core/bp_utils.h" // bp_get_type_size()
 //#include "core/bp_types.h"
 #include "core/common_read.h"
 #include "core/futils.h"
@@ -56,7 +56,6 @@ void FC_FUNC_(adios_errmsg, adios_errmsg) (char *msg, int msg_len)
 
 void FC_FUNC_(adios_set_read_method, ADIOS_SET_READ_METHOD) (int *fmethod, int *err)
 {
-    enum ADIOS_READ_METHOD method = (enum ADIOS_READ_METHOD) *fmethod;
     switch (*fmethod) {
         // Translate from V1 method IDs to the new API's methods
         case 0: //ADIOS_READ_METHOD_BP_V1:
@@ -291,8 +290,7 @@ void FC_FUNC_(adios_inq_var, ADIOS_INQ_VAR)
 
         /* TIME dimension should be emulated here !!! */
         int tidx;
-        int timed = common_read_is_var_timed(afp, vi->varid);
-        if (timed) {
+        if (vi->nsteps > 1) {
             *ndim = vi->ndim + 1;
             *timedim = vi->ndim;
             dims[0] = vi->nsteps;
@@ -338,16 +336,11 @@ void FC_FUNC_(adios_read_var, ADIOS_READ_VAR)
             *read_bytes = adios_errno;
             return;
         }
-        int tidx;
         int from_step = 0, nsteps = 1;
         /* TIME dimension should be emulated here !!! */
-        int timed = common_read_is_var_timed(afp, vi->varid);
-        if (timed) {
+        if (vi->nsteps > 1) {
             from_step = (int) start[vi->ndim];
             nsteps    = (int) count[vi->ndim];
-            tidx = 1;
-        } else {
-            tidx = 0;
         }
 
         ADIOS_SELECTION * sel = common_read_selection_boundingbox (vi->ndim, start, count);
@@ -498,7 +491,7 @@ void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS)
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     ADIOS_VARINFO *vi = NULL;
     char *varstr;
-    int i, size;
+    int size;
 
     varstr = futils_fstr_to_cstr(varname, varname_len);
     if (varstr != NULL) {
@@ -609,7 +602,6 @@ void FC_FUNC_(adios_get_attr, ADIOS_GET_ATTR)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     char *attrstr;
-    int i;
     void *data;
     int size;
     enum ADIOS_DATATYPES type;
@@ -637,7 +629,6 @@ void FC_FUNC_(adios_inq_attr, ADIOS_INQ_ATTR)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     char *attrstr;
-    int i;
     void *data;
     attrstr = futils_fstr_to_cstr(attrname, attrname_len);
     if (attrstr != NULL) {
diff --git a/src/core/adiosf_write_mod.f90 b/src/core/adiosf_write_mod.f90
index 0897694..8422749 100644
--- a/src/core/adiosf_write_mod.f90
+++ b/src/core/adiosf_write_mod.f90
@@ -25,7 +25,7 @@ module adios_write_mod
             integer,        intent(out) :: err
         end subroutine
 
-        subroutine adios_init_noxml_withcomm (comm, err)
+        subroutine adios_init_noxml (comm, err)
             implicit none
             integer,        intent(in)  :: comm
             integer,        intent(out) :: err
@@ -122,6 +122,13 @@ module adios_write_mod
             integer*8,      intent(out) :: id
         end subroutine
 
+        subroutine adios_set_transform (var_id, transform_method, err)
+            implicit none
+            integer*8,      intent(in)  :: var_id
+            character(*),   intent(in)  :: transform_method
+            integer,        intent(out) :: err
+        end subroutine
+
         subroutine adios_define_attribute (group_id, attrname, path, attrtype, value, varname, err)
             implicit none
             integer*8,      intent(in)  :: group_id
diff --git a/src/core/bp_types.h b/src/core/bp_types.h
index e160d1f..d8183ef 100644
--- a/src/core/bp_types.h
+++ b/src/core/bp_types.h
@@ -31,9 +31,9 @@ struct bp_minifooter {
     uint64_t time_steps;  /* = fh->tidx_stop - fh->tidx_start + 1 */
     uint64_t pgs_count;
     uint64_t pgs_length;
-    uint16_t vars_count;
+    uint32_t vars_count;
+    uint32_t attrs_count;
     uint64_t vars_length;
-    uint16_t attrs_count;
     uint64_t attrs_length;
     uint64_t pgs_index_offset;
     uint64_t vars_index_offset;
@@ -87,7 +87,7 @@ struct BP_GROUP_VAR {
     uint32_t *** time_index; 
     uint64_t * pg_offsets;
     char ** var_namelist;
-    uint16_t * var_counts_per_group;
+    uint32_t * var_counts_per_group;
     uint64_t ** var_offsets;
 };
 
@@ -96,16 +96,16 @@ struct BP_GROUP_ATTR {
     uint16_t group_id;
     char ** namelist;
     char ** attr_namelist;
-    uint16_t * attr_counts_per_group;
+    uint32_t * attr_counts_per_group;
     uint64_t ** attr_offsets;
 };
 
 struct BP_GROUP {
     uint16_t group_id;
-    uint16_t vars_offset;
-    uint16_t vars_count;
-    uint16_t attrs_offset;
-    uint16_t attrs_count;
+    uint16_t vars_offset; // start of variables belonging to this group in the list of variables from all groups; old read API used this
+    uint32_t vars_count;
+    uint16_t attrs_offset; // old read API, this group's attributes in the list of all groups' attrs 
+    uint32_t attrs_count;
     struct BP_FILE * fh;
     struct adios_index_var_struct_v1 * vars_root;  /* pointer into the list of BP_FILE.vars_root */
     struct adios_index_attribute_struct_v1 * attrs_root;
diff --git a/src/core/bp_utils.c b/src/core/bp_utils.c
index 4c250d9..7669d82 100644
--- a/src/core/bp_utils.c
+++ b/src/core/bp_utils.c
@@ -16,9 +16,11 @@
 #include "public/adios_read.h"
 #include "public/adios_error.h"
 #include "core/bp_utils.h"
+#include "core/adios_internals.h"
 #include "core/adios_bp_v1.h"
 #include "core/adios_endianness.h"
 #include "core/adios_logger.h"
+#include "core/futils.h"
 #define BYTE_ALIGN 8
 #define MINIFOOTER_SIZE 28
 
@@ -231,7 +233,7 @@ ADIOS_VARINFO * bp_inq_var_byid (const ADIOS_FILE * fp, int varid)
     struct BP_PROC * p;
     BP_FILE * fh;
     ADIOS_VARINFO * varinfo;
-    int file_is_fortran, i, k, timedim, size;
+    int file_is_fortran, size;
     struct adios_index_var_struct_v1 * v;
 
     adios_errno = 0;
@@ -535,7 +537,6 @@ int bp_read_minifooter (struct BP_FILE * bp_struct)
     struct adios_bp_buffer_struct_v1 * b = bp_struct->b;
     struct bp_minifooter * mh = &bp_struct->mfooter;
     uint64_t attrs_end = b->file_size - MINIFOOTER_SIZE;
-    uint32_t test = 1;
     int r;
 
     MPI_Status status;
@@ -563,8 +564,11 @@ int bp_read_minifooter (struct BP_FILE * bp_struct)
     mh->change_endianness = b->change_endianness;
 
     // validity check
-    if ((mh->version & ADIOS_VERSION_NUM_MASK) > 1) {
-        adios_error (err_file_open_error, "Invalid BP file detected. Version number > 1\n");
+    if ((mh->version & ADIOS_VERSION_NUM_MASK) > ADIOS_VERSION_BP_FORMAT) {
+        adios_error (err_file_open_error, 
+           "Invalid BP file detected. Format version of file seems to be %d, "
+           "which is greater than the highest supported version %d.\n", 
+           (mh->version & ADIOS_VERSION_NUM_MASK), ADIOS_VERSION_BP_FORMAT);
         return 1;
     }
 
@@ -888,6 +892,7 @@ int bp_parse_attrs (struct BP_FILE * fh)
     struct bp_minifooter * mh = &(fh->mfooter);
     struct adios_index_attribute_struct_v1 ** root;
     int i;
+    int bpversion = mh->version & ADIOS_VERSION_NUM_MASK;
 
     if (b->length - b->offset < VARS_MINIHEADER_SIZE) {
         adios_error (err_invalid_buffer,
@@ -901,7 +906,11 @@ int bp_parse_attrs (struct BP_FILE * fh)
 
     root = attrs_root;
 
-    BUFREAD16(b, mh->attrs_count)
+    if (bpversion > 1) {
+        BUFREAD32(b, mh->attrs_count)
+    } else {
+        BUFREAD16(b, mh->attrs_count)
+    }
     BUFREAD64(b, mh->attrs_length)
 
     for (i = 0; i < mh->attrs_count; i++) {
@@ -918,7 +927,11 @@ int bp_parse_attrs (struct BP_FILE * fh)
         int type_size;
 
         BUFREAD32(b, attr_entry_length)
-        BUFREAD16(b, (*root)->id)
+        if (bpversion > 1) {
+            BUFREAD32(b, (*root)->id)
+        } else {
+            BUFREAD16(b, (*root)->id)
+        }
 
         BUFREAD16(b, len)
         (*root)->group_name = (char *) malloc (len + 1);
@@ -1003,7 +1016,13 @@ int bp_parse_attrs (struct BP_FILE * fh)
                         BUFREAD32(b, (*root)->characteristics [j].time_index)
                         break;
                     case adios_characteristic_var_id:
-                        BUFREAD16(b, (*root)->characteristics [j].var_id)
+                        if (bpversion > 1) {
+                            BUFREAD32(b, (*root)->characteristics [j].var_id)
+                        } else {
+                            BUFREAD16(b, (*root)->characteristics [j].var_id)
+                        }
+                        break;
+                    default:
                         break;
                 }
                 item++;
@@ -1024,16 +1043,17 @@ int bp_parse_attrs (struct BP_FILE * fh)
     }
 
     root = attrs_root;
-    uint16_t * attr_counts_per_group;
+    uint32_t * attr_counts_per_group;
     uint16_t *  attr_gids;
     uint64_t ** attr_offsets;
     char ** attr_namelist;
-    int grpid, j,cnt;
+    int grpid, j;
+    //int cnt;
     int lenpath, lenname;
 
-    attr_counts_per_group = (uint16_t *)
-        malloc (sizeof(uint16_t) * fh->gattr_h->group_count);
-    memset (attr_counts_per_group, 0, fh->gattr_h->group_count * sizeof(uint16_t));
+    attr_counts_per_group = (uint32_t *)
+        malloc (sizeof(uint32_t) * fh->gattr_h->group_count);
+    memset (attr_counts_per_group, 0, fh->gattr_h->group_count * sizeof(uint32_t));
     attr_gids = (uint16_t *) malloc (sizeof(uint16_t ) * mh->attrs_count);
     attr_namelist = (char **)malloc (sizeof(char*) * mh->attrs_count);
 
@@ -1041,7 +1061,6 @@ int bp_parse_attrs (struct BP_FILE * fh)
     memset (attr_offsets, 0, mh->attrs_count * sizeof(uint64_t *));
 
     for (i = 0; i < mh->attrs_count; i++) {
-        struct adios_index_characteristic_dims_struct_v1 * pdims;
         for (grpid = 0; grpid < fh->gattr_h->group_count; grpid++) {
             if (!strcmp((*root)->group_name, fh->gattr_h->namelist[grpid])) {
                 attr_counts_per_group [grpid]++;
@@ -1091,8 +1110,9 @@ int bp_parse_attrs (struct BP_FILE * fh)
             attr_offsets[i][j] = (*root)->characteristics [j].offset;
         }
 
-        pdims = &(*root)->characteristics [0].dims;
-        cnt = pdims->count;
+        //struct adios_index_characteristic_dims_struct_v1 * pdims;
+        //pdims = &(*root)->characteristics [0].dims;
+        //cnt = pdims->count;
         root = &(*root)->next;
     }
     //here is the asssumption that attr_gids is linearly increased
@@ -1115,6 +1135,7 @@ int bp_parse_vars (struct BP_FILE * fh)
     struct bp_minifooter * mh = &(fh->mfooter);
 
     struct adios_index_var_struct_v1 ** root;
+    int bpversion = mh->version & ADIOS_VERSION_NUM_MASK;
 
     if (b->length - b->offset < VARS_MINIHEADER_SIZE) {
         adios_error (err_invalid_buffer,
@@ -1128,11 +1149,15 @@ int bp_parse_vars (struct BP_FILE * fh)
 
     root = vars_root;
 
-    BUFREAD16(b, mh->vars_count)
+    if (bpversion > 1) {
+        BUFREAD32(b, mh->vars_count)
+    } else {
+        BUFREAD16(b, mh->vars_count)
+    }
     BUFREAD64(b, mh->vars_length)
 
     // To speed find_var_byid(). Q. Liu, 11-2013.
-    fh->vars_table = (struct adios_index_var_struct_v1 **) malloc (mh->vars_count * 8);
+    fh->vars_table = (struct adios_index_var_struct_v1 **) malloc (8*(size_t)mh->vars_count);
     // validate remaining length
     int i;
     for (i = 0; i < mh->vars_count; i++) {
@@ -1146,10 +1171,13 @@ int bp_parse_vars (struct BP_FILE * fh)
         uint32_t var_entry_length;
         uint16_t len;
         uint64_t characteristics_sets_count;
-        int type_size;
 
         BUFREAD32(b, var_entry_length)
-        BUFREAD16(b, (*root)->id)
+        if (bpversion > 1) {
+            BUFREAD32(b, (*root)->id)
+        } else {
+            BUFREAD16(b, (*root)->id)
+        }
 
         BUFREAD16(b, len)
         (*root)->group_name = (char *) malloc (len + 1);
@@ -1171,7 +1199,6 @@ int bp_parse_vars (struct BP_FILE * fh)
 
         BUFREAD8(b, flag)
         (*root)->type = (enum ADIOS_DATATYPES) flag;
-        type_size = bp_get_type_size ((*root)->type, "");
 
         BUFREAD64(b, characteristics_sets_count)
         (*root)->characteristics_count = characteristics_sets_count;
@@ -1219,16 +1246,17 @@ int bp_parse_vars (struct BP_FILE * fh)
     }
 
     root = vars_root;
-    uint16_t * var_counts_per_group;
+    uint32_t * var_counts_per_group;
     uint16_t *  var_gids;
     uint64_t ** var_offsets;
     char ** var_namelist;
-    int grpid, j,cnt;
+    int grpid, j;
+    //int cnt;
     int lenpath,lenname;
 
-    var_counts_per_group = (uint16_t *)
-        malloc (sizeof(uint16_t)*fh->gvar_h->group_count);
-    memset ( var_counts_per_group, 0, fh->gvar_h->group_count*sizeof(uint16_t));
+    var_counts_per_group = (uint32_t *)
+        malloc (sizeof(uint32_t)*fh->gvar_h->group_count);
+    memset ( var_counts_per_group, 0, fh->gvar_h->group_count*sizeof(uint32_t));
     var_gids = (uint16_t *) malloc (sizeof(uint16_t )*mh->vars_count);
     var_namelist = (char **)malloc(sizeof(char*)*mh->vars_count);
 
@@ -1236,7 +1264,6 @@ int bp_parse_vars (struct BP_FILE * fh)
     memset ( var_offsets, 0, mh->vars_count*sizeof(uint64_t *));
 
     for (i = 0; i < mh->vars_count; i++) {
-        struct adios_index_characteristic_dims_struct_v1 * pdims;
         for (grpid=0;grpid<fh->gvar_h->group_count;grpid++) {
             if (!strcmp((*root)->group_name,fh->gvar_h->namelist[grpid])) {
                 var_counts_per_group [grpid]++;
@@ -1288,8 +1315,9 @@ int bp_parse_vars (struct BP_FILE * fh)
             var_offsets[i][j] = (*root)->characteristics [j].offset;
         }
 
-        pdims = &(*root)->characteristics [0].dims;
-        cnt = pdims->count;
+        //struct adios_index_characteristic_dims_struct_v1 * pdims;
+        //pdims = &(*root)->characteristics [0].dims;
+        //cnt = pdims->count;
         root = &(*root)->next;
     }
 
@@ -1515,6 +1543,11 @@ SET_DATA_3(t) \
                                 }
 
                                 break;
+
+                            case adios_string:
+                            default:
+                                break;
+
                         }
                         idx ++;
                     }
@@ -1840,7 +1873,7 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
         attr_root = attr_root->next;
     }
 
-    alloc_namelist (&fp->attr_namelist, fp->nattrs);
+    fp->attr_namelist = (char **) malloc (sizeof (char *) * fp->nattrs);
 
     attr_root = fh->attrs_root;
     j = 0;
@@ -1988,12 +2021,22 @@ int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dim
     if (!is_global)
     {
         /* local array */
-        for (k =0; k < ndim; k++)
+        if (!has_time)
+        {
+            for (k =0; k < ndim; k++)
+            {
+                gdims[k] = ldims[k];
+            }
+        }
+        else
         {
-            gdims[k] = ldims[k];
+            for (k = 0; k < ndim - 1; k++)
+            {
+                gdims[k] = ldims[k + 1];
+                ldims[k] = ldims[k + 1];
+            }
         }
     }
-
     else // NCSU ALACRITY-ADIOS - Bugfix, I think (should have commented on this when I did it...)
     {
         if (has_time)
@@ -2772,6 +2815,9 @@ const char * bp_value_to_string (enum ADIOS_DATATYPES type, void * data)
                                    , *(((double *) data) + 1)
                     );
             break;
+
+        default:
+            break;
     }
 
     return s;
@@ -2944,6 +2990,9 @@ double bp_value_to_double (enum ADIOS_DATATYPES type, void * data)
 
         case adios_real:
             return * ((float *) data);
+
+        default:
+            return 0.0;
     }
 }
 
@@ -2987,7 +3036,6 @@ int check_bp_validity (const char * fname)
 
 int get_num_subfiles (struct BP_FILE * fh)
 {
-    struct adios_bp_buffer_struct_v1 * b = fh->b;
     struct adios_index_var_struct_v1 ** vars_root = &(fh->vars_root);
     struct bp_minifooter * mh = &(fh->mfooter);
     struct adios_index_var_struct_v1 ** root;
diff --git a/src/core/common_adios.c b/src/core/common_adios.c
index c0114c8..4d56d9b 100644
--- a/src/core/common_adios.c
+++ b/src/core/common_adios.c
@@ -157,6 +157,10 @@ int common_adios_open (int64_t * fd, const char * group_name
     fd_p->write_size_bytes = 0;
     fd_p->base_offset = 0;
     fd_p->pg_start_in_file = 0;
+    if (comm != MPI_COMM_NULL)
+        MPI_Comm_dup(comm, &fd_p->comm);
+    else
+        fd_p->comm = MPI_COMM_NULL;
 
 #ifdef SKEL_TIMING
     fd_p->timing_obj = 0;
@@ -201,7 +205,7 @@ int common_adios_open (int64_t * fd, const char * group_name
            )
         {
             adios_transports [methods->method->m].adios_open_fn
-                                                 (fd_p, methods->method, comm);
+                                                 (fd_p, methods->method, fd_p->comm);
         }
 
         methods = methods->next;
@@ -218,7 +222,7 @@ int common_adios_open (int64_t * fd, const char * group_name
 ///////////////////////////////////////////////////////////////////////////////
 static const char ADIOS_ATTR_PATH[] = "/__adios__";
 
-uint32_t pinned_timestep = 0;
+static uint32_t pinned_timestep = 0;
 void adios_pin_timestep(uint32_t ts) {
   pinned_timestep = ts;
 }
@@ -1095,6 +1099,10 @@ int common_adios_close (int64_t fd_p)
         fd->name = 0;
     }
 
+    if (fd->comm != MPI_COMM_NULL) {
+        MPI_Comm_free (&fd->comm);
+    }
+
     free ((void *) fd_p);
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
     timer_stop ("adios_close");
diff --git a/src/core/common_adios.h b/src/core/common_adios.h
index 4b41913..32b63cf 100644
--- a/src/core/common_adios.h
+++ b/src/core/common_adios.h
@@ -42,6 +42,7 @@ int common_adios_group_size (int64_t fd_p, uint64_t data_size
 
 //int common_adios_write (int64_t fd_p, const char * name, void * var);
 int common_adios_write (struct adios_file_struct * fd, struct adios_var_struct * v, void * var);
+int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_struct * v, void * var);
 
 int common_adios_get_write_buffer (int64_t fd_p, const char * name
                            ,uint64_t * size
diff --git a/src/core/common_read.c b/src/core/common_read.c
index c41517b..c058ff3 100644
--- a/src/core/common_read.c
+++ b/src/core/common_read.c
@@ -41,19 +41,19 @@ struct common_read_internals_struct {
     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;
-    int   * nvars_per_group;     /* # of variables per each group */
-    int   * nattrs_per_group;    /* # of attributes per each group */
-    int     group_in_view;       /* 0..ngroups-1: selected group in view,
+    int         ngroups;
+    char     ** group_namelist;
+    uint32_t  * nvars_per_group;     /* # of variables per each group */
+    uint32_t  * nattrs_per_group;    /* # of attributes per each group */
+    int         group_in_view;       /* 0..ngroups-1: selected group in view,
                                   -1: all groups */
-    int     group_varid_offset;  /* offset of var IDs from specific group to full list
+    uint64_t    group_varid_offset;  /* offset of var IDs from specific group to full list
                                     if a selected group is in view */
-    int     group_attrid_offset;
-    int     full_nvars;          /* fp->nvars to save here for a group view */
-    char ** full_varnamelist;    /* fp->var_namelist to save here if one group is viewed */
-    int     full_nattrs;         /* fp->nvars to save here for a group view */
-    char ** full_attrnamelist;   /* fp->attr_namelist to save here if one group is viewed */
+    uint64_t    group_attrid_offset;
+    uint32_t    full_nvars;          /* fp->nvars to save here for a group view */
+    char     ** full_varnamelist;    /* fp->var_namelist to save here if one group is viewed */
+    uint32_t    full_nattrs;         /* fp->nvars to save here for a group view */
+    char     ** full_attrnamelist;   /* fp->attr_namelist to save here if one group is viewed */
     qhashtbl_t *hashtbl_vars;    /* speed up search for var_namelist to varid  */
 
     // NCSU ALACRITY-ADIOS - Table of sub-requests issued by transform method
@@ -85,6 +85,13 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     // NCSU ALACRITY-ADIOS - Initialize transform methods
     adios_transform_read_init();
 
+    if (!adios_read_hooks[method].adios_read_init_method_fn) {
+        adios_error (err_invalid_read_method, 
+            "Read method (=%d) passed to adios_read_init_method() is not provided "
+            "by this build of ADIOS.\n", (int)method);
+        return err_invalid_read_method;
+    }
+
     // process common parameters here
     params = text_to_name_value_pairs (parameters);
     p = params;
@@ -148,11 +155,21 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     }
 
     // call method specific init 
-    retval = adios_read_hooks[method].adios_init_method_fn (comm, params);
+    retval = adios_read_hooks[method].adios_read_init_method_fn (comm, params);
     free_name_value_pairs (params);
     return retval;
 }
 
+static int calc_hash_size(unsigned int nvars) 
+{
+    int hash_size;
+    if (nvars < 100) hash_size = nvars; // best speed for most codes
+    else if (nvars < 1000)    hash_size = 100+nvars/10;   // 100..999 variables
+    else if (nvars < 10000)   hash_size = 200+nvars/20;   // 1000..9999 
+    else if (nvars < 100000)  hash_size = 200+nvars/20;  // 10k..99999
+    else                      hash_size = 10000; // 100k..
+    return hash_size;
+}
 
 int common_read_finalize_method(enum ADIOS_READ_METHOD method)
 {
@@ -161,9 +178,14 @@ int common_read_finalize_method(enum ADIOS_READ_METHOD 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;
-    } 
+    } 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;
+    }
 
-    return adios_read_hooks[method].adios_finalize_method_fn ();
+    return adios_read_hooks[method].adios_read_finalize_method_fn ();
 }
 
 
@@ -175,7 +197,7 @@ ADIOS_FILE * common_read_open (const char * fname,
 {
     ADIOS_FILE * fp;
     struct common_read_internals_struct * internals; 
-    int i;
+    long i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         adios_error (err_invalid_read_method, 
@@ -191,20 +213,26 @@ ADIOS_FILE * common_read_open (const char * fname,
     // NCSU ALACRITY-ADIOS - Initialize transform methods
     adios_transform_read_init();
 
+    if (!adios_read_hooks[method].adios_read_open_fn) {
+        adios_error (err_invalid_read_method, 
+            "Read method (=%d) passed to adios_read_open() is not provided "
+            "by this build of ADIOS.\n", (int)method);
+        return NULL;
+    }
+
     internals->method = method;
     internals->read_hooks = adios_read_hooks;
 
-    fp = adios_read_hooks[internals->method].adios_open_fn (fname, comm, lock_mode, timeout_sec);
+    fp = adios_read_hooks[internals->method].adios_read_open_fn (fname, comm, lock_mode, timeout_sec);
     if (!fp)
         return fp;
 
     // create hashtable from the variable names as key and their index as value
-    int hashsize = fp->nvars;
-    if (fp->nvars > 100) hashsize = 100;
+    int hashsize = calc_hash_size(fp->nvars);
     internals->hashtbl_vars = qhashtbl(hashsize);
     for (i=0; i<fp->nvars; i++) {
         internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
-                                       (void *)i+1); // avoid 0 for error checking later
+                                       (void *)(i+1)); // avoid 0 for error checking later
     }
 
     //read mesh names from attributes for example the var is using a mesh named trimesh, 
@@ -283,13 +311,14 @@ ADIOS_FILE * common_read_open_file (const char * fname,
 {
     ADIOS_FILE * fp;
     struct common_read_internals_struct * internals; 
-    int i;
+    long i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         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 *) 
@@ -302,17 +331,22 @@ ADIOS_FILE * common_read_open_file (const char * fname,
     internals->method = method;
     internals->read_hooks = adios_read_hooks;
 
-    fp = adios_read_hooks[internals->method].adios_open_file_fn (fname, comm);
+    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;
     
     // create hashtable from the variable names as key and their index as value
-    int hashsize = fp->nvars;
-    if (fp->nvars > 100) hashsize = 100;
+    int hashsize = calc_hash_size(fp->nvars);
     internals->hashtbl_vars = qhashtbl(hashsize);
     for (i=0; i<fp->nvars; i++) {
         internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
-                                       (void *)i+1); // avoid 0 for error checking later
+                                       (void *)(i+1)); // avoid 0 for error checking later
     }
 
     //read mesh names from attributes for example the var is using a mesh named trimesh, 
@@ -346,6 +380,8 @@ ADIOS_FILE * common_read_open_file (const char * fname,
         {
             fp->mesh_namelist = (char **) realloc (tmp, sizeof (char *) * fp->nmeshes);
             assert (fp->mesh_namelist);
+        } else {
+            free (tmp);
         }
 
     }
@@ -393,7 +429,7 @@ int common_read_close (ADIOS_FILE *fp)
             free(fp->mesh_namelist);
         }
                 
-        retval = internals->read_hooks[internals->method].adios_close_fn (fp);
+        retval = internals->read_hooks[internals->method].adios_read_close_fn (fp);
         free_namelist (internals->group_namelist, internals->ngroups);
         free (internals->nvars_per_group);
         free (internals->nattrs_per_group);
@@ -428,7 +464,7 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
     struct common_read_internals_struct * internals;
     int hashsize;
     int retval;
-    int i;
+    long i;
     
     adios_errno = err_no_error;
     if (fp) {
@@ -438,12 +474,11 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
             // Re-create hashtable from the variable names as key and their index as value
             if (internals->hashtbl_vars)
                 internals->hashtbl_vars->free (internals->hashtbl_vars);
-            hashsize = fp->nvars;
-            if (fp->nvars > 100) hashsize = 100;
+            hashsize = calc_hash_size(fp->nvars);
             internals->hashtbl_vars = qhashtbl(hashsize);
             for (i=0; i<fp->nvars; i++) {
                 internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
-                        (void *)i+1); // avoid 0 for error checking later
+                        (void *)(i+1)); // avoid 0 for error checking later
             }
 
             /* Update group information too */
@@ -560,12 +595,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) 
 {
-    struct common_read_internals_struct * internals;
     ADIOS_VARINFO * retval;
  
     adios_errno = err_no_error;
     if (fp) {
-        internals = (struct common_read_internals_struct *) fp->internal_data;
         int varid = common_read_find_var (fp, varname, 0);
         if (varid >= 0) {
             retval = common_read_inq_var_byid (fp, varid);
@@ -613,8 +646,6 @@ ADIOS_VARINFO * common_read_inq_var_byid (const ADIOS_FILE *fp, int varid)
     if (vi == NULL)
         return NULL;
     
-    vi->meshinfo = NULL;
-
     // NCSU ALACRITY-ADIOS - translate between original and transformed metadata if necessary
     ti = common_read_inq_transinfo(fp, vi); // No orig_blockinfo
     if (ti && ti->transform_type != adios_transform_none) {
@@ -642,6 +673,7 @@ ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE *fp, int varid)
             if (retval) {
                 /* Translate real varid to the group varid presented to the user */
                 retval->varid = varid;
+                retval->meshinfo = NULL; // initialize here because it's a common layer addition
             }
         } else {
             adios_error (err_invalid_varid, 
@@ -798,7 +830,6 @@ static void common_read_free_blockinfo(ADIOS_VARBLOCK **varblock, int sum_nblock
 
 void common_read_free_varinfo (ADIOS_VARINFO *vp)
 {
-    int i;
     if (vp) {
         common_read_free_blockinfo(&vp->blockinfo, vp->sum_nblocks);
 
@@ -894,12 +925,10 @@ int common_read_get_attr_mesh (const ADIOS_FILE * fp,
                             int * size,
                             void ** data)
 {
-    struct common_read_internals_struct * internals;
     int retval;
 
     adios_errno = err_no_error;
     if (fp) {
-        internals = (struct common_read_internals_struct *) fp->internal_data;
         int attrid = common_read_find_attr (fp->nattrs, fp->attr_namelist, attrname, 1);
         if (attrid > -1) {
             retval = common_read_get_attr_byid_mesh (fp, attrid, type, size, data);
@@ -1003,11 +1032,11 @@ int common_read_inq_var_meshinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
     {
         if (!strcmp((char *)data, "point"))
         {
-            varinfo->meshinfo->centering = 1;      // point centering
+            varinfo->meshinfo->centering = point;
         }
         else if (!strcmp((char *)data, "cell"))
         {
-            varinfo->meshinfo->centering = 2;      // cell centering
+            varinfo->meshinfo->centering = cell;
         }
         else
         {
@@ -1022,10 +1051,110 @@ int common_read_inq_var_meshinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
     return 0;
 }
 
+static double common_check_var_type_to_double (enum ADIOS_DATATYPES * type, void * value)
+{
+    double data;
+
+    if (*type == adios_real)
+        data = *(float *)value;
+    else if (*type == adios_double)
+        data = *(double *)value;
+    else if (*type == adios_byte)
+        data = *(signed char *)value;
+    else if (*type == adios_unsigned_byte)
+        data = *(unsigned char *)value;
+    else if (*type == adios_short)
+        data = *(signed short *)value;
+    else if (*type == adios_unsigned_short)
+        data = *(unsigned short *)value;
+    else if (*type == adios_integer)
+        data = *(signed int *)value;
+    else if (*type == adios_unsigned_integer)
+        data = *(unsigned int *)value;
+    else if (*type == adios_long)
+        data = *(signed long long *)value;
+    else if (*type == adios_unsigned_long)
+        data = *(unsigned long long *)value;
+    else if (*type == adios_unknown)
+    {
+        adios_error (err_mesh_unifrom_invalid_var_type,
+                     "Provided var type is not supported. "
+                     "Var type only supports (unsigned) char, (unsigned) short, "
+                     "(unsigned) int,(unsigned) long long, float and double\n");
+    }
+    return data;
+}
+
+static uint64_t common_check_var_type_to_uint64 (enum ADIOS_DATATYPES * type, void * value)
+{
+    uint64_t data;
+
+    if (*type == adios_real)
+        data = *(float *)value;
+    else if (*type == adios_double)
+        data = *(double *)value;
+    else if (*type == adios_byte)
+        data = *(signed char *)value;
+    else if (*type == adios_unsigned_byte)
+        data = *(unsigned char *)value;
+    else if (*type == adios_short)
+        data = *(signed short *)value;
+    else if (*type == adios_unsigned_short)
+        data = *(unsigned short *)value;
+    else if (*type == adios_integer)
+        data = *(signed int *)value;
+    else if (*type == adios_unsigned_integer)
+        data = *(unsigned int *)value;
+    else if (*type == adios_long)
+        data = *(signed long long *)value;
+    else if (*type == adios_unsigned_long)
+        data = *(unsigned long long *)value;
+    else if (*type == adios_unknown)
+    {
+        adios_error (err_mesh_unifrom_invalid_var_type,
+                     "Provided var type is not supported. "
+                     "Var type only supports (unsigned) char, (unsigned) short, "
+                     "(unsigned) int,(unsigned) long long, float and double\n");
+    }
+    return data;
+}
 
+static int common_check_var_type_to_int (enum ADIOS_DATATYPES * type, void * value)
+{
+    int data;
+
+    if (*type == adios_real)
+        data = *(float *)value;
+    else if (*type == adios_double)
+        data = *(double *)value;
+    else if (*type == adios_byte)
+        data = *(signed char *)value;
+    else if (*type == adios_unsigned_byte)
+        data = *(unsigned char *)value;
+    else if (*type == adios_short)
+        data = *(signed short *)value;
+    else if (*type == adios_unsigned_short)
+        data = *(unsigned short *)value;
+    else if (*type == adios_integer)
+        data = *(signed int *)value;
+    else if (*type == adios_unsigned_integer)
+        data = *(unsigned int *)value;
+    else if (*type == adios_long)
+        data = *(signed long long *)value;
+    else if (*type == adios_unsigned_long)
+        data = *(unsigned long long *)value;
+    else if (*type == adios_unknown)
+    {
+        adios_error (err_mesh_unifrom_invalid_var_type,
+                     "Provided var type is not supported. "
+                     "Var type only supports (unsigned) char, (unsigned) short, "
+                     "(unsigned) int,(unsigned) long long, float and double\n");
+    }
+    return data;
+}
 int adios_get_uniform_mesh_attr (ADIOS_FILE * fp, ADIOS_MESH *meshinfo, char * attrs)      //attr for origins-num(origins), spacings-num(spacings), maximums-num(maximums)
 {
-    int i, j;
+    int i;
     enum ADIOS_DATATYPES attr_type;
     int attr_size;
     void * data = NULL;
@@ -1182,100 +1311,33 @@ int adios_get_uniform_mesh_attr (ADIOS_FILE * fp, ADIOS_MESH *meshinfo, char * a
                         ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
                         if (!strcmp (attrs, "origins"))
                         {
-                            if (v->type == adios_real)   
-                                meshinfo->uniform->origins[i] = *(float *)v->value;                        
-                            else if (v->type == adios_double)   
-                                meshinfo->uniform->origins[i] = *(double *)v->value;
-                            else if (v->type == adios_byte)
-                                meshinfo->uniform->origins[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->uniform->origins[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->uniform->origins[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->uniform->origins[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->uniform->origins[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->uniform->origins[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->uniform->origins[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)
-                                meshinfo->uniform->origins[i] = *(unsigned long long *)v->value;
-                            else
+                            adios_errno = err_no_error;
+                            meshinfo->uniform->origins[i] = common_check_var_type_to_double (&v->type, v->value);
+                            if (adios_errno < 0) 
                             {
-                                adios_error (err_mesh_unifrom_invalid_var_type,
-                                             "Uniform mesh %s origins support (unsigned) char, (unsigned) short, "
-                                             "(unsigned) int,(unsigned) long long, float and double\n", 
-                                             meshinfo->name);
                                 meshinfo->uniform = NULL;
                                 return -1;
                             }
                         }
                         else if (!strcmp (attrs, "maximums"))
                         {
-                            if (v->type == adios_real)    
-                                 meshinfo->uniform->maximums[i] = *(float *)v->value;
-                            else if (v->type == adios_double)   
-                                meshinfo->uniform->maximums[i] = *(double *)v->value;
-                            else if (v->type == adios_byte)
-                                meshinfo->uniform->maximums[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->uniform->maximums[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->uniform->maximums[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->uniform->maximums[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->uniform->maximums[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->uniform->maximums[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->uniform->maximums[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)
-                                meshinfo->uniform->maximums[i] = *(unsigned long long *)v->value;
-                            else
+                            adios_errno = err_no_error;
+                            meshinfo->uniform->maximums[i] = common_check_var_type_to_double (&v->type, v->value);
+                            if (adios_errno < 0)
                             {
-                                adios_error (err_mesh_unifrom_invalid_var_type,
-                                             "Uniform mesh %s maximums support (unsigned) char, (unsigned) short, "
-                                             "(unsigned) int, (unsigned) long long, float and double\n",
-                                             meshinfo->name);
                                 meshinfo->uniform = NULL;
                                 return -1;
                             }
                         }
                         else if (!strcmp (attrs, "spacings"))
                         {
-                            if (v->type == adios_real)    
-                                meshinfo->uniform->spacings[i] = *(float *)v->value;
-                            else if (v->type == adios_double)    
-                                meshinfo->uniform->spacings[i] = *(double *)v->value;
-                            else if (v->type == adios_byte)
-                                meshinfo->uniform->spacings[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->uniform->spacings[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->uniform->spacings[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->uniform->spacings[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->uniform->spacings[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->uniform->spacings[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->uniform->spacings[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)
-                                meshinfo->uniform->spacings[i] = *(unsigned long long *)v->value; 
-                            else 
+                            adios_errno = err_no_error;
+                            meshinfo->uniform->spacings[i] = common_check_var_type_to_double (&v->type, v->value);
+                            if (adios_errno < 0)
                             {
-                                adios_error (err_mesh_unifrom_invalid_var_type,
-                                             "Uniform mesh %s spacings support (unsigned) char, (unsigned) short, "
-                                             "(unsigned) int, (unsigned) long long, float and double\n",
-                                             meshinfo->name); 
-                                 meshinfo->uniform = NULL;
-                                 return -1;
+                                meshinfo->uniform = NULL;
+                                return -1;
                             }
-//                            printf ("meshinfo->uniform->spacings[%d] = %lf\n",i, meshinfo->uniform->spacings[i]);
                         }
                         common_read_free_varinfo (v);
                     }
@@ -1356,7 +1418,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     int attr_size;
     void * data = NULL;
     int  read_fail = 0;
-    int i, j, varid;
+//    int i, j, varid;
 
     ADIOS_MESH * meshinfo = (ADIOS_MESH *) malloc (sizeof(ADIOS_MESH));
     //mesh id
@@ -1389,11 +1451,57 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
     common_read_get_attr_mesh (fp, mesh_attribute, &attr_type, &attr_size, &data);
     free (mesh_attribute);
     if ( !strcmp((char *)data, "uniform") )
+        meshinfo->type = ADIOS_MESH_UNIFORM;
+    else if ( !strcmp((char *)data, "rectilinear") )
+        meshinfo->type = ADIOS_MESH_RECTILINEAR;
+    else if ( !strcmp((char *)data, "structured") )
+        meshinfo->type = ADIOS_MESH_STRUCTURED;
+    else if ( !strcmp((char *)data, "unstructured") )
+        meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
+
+    //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)
     {
-        bool have_spacing = 0;
-        bool have_max = 0;
+        meshinfo->file_name = NULL; 
+        // get the mesh details now from this data file
+        common_read_complete_meshinfo (fp, fp, meshinfo);
+    }
+    else
+    {
+        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;
+}
 
-        meshinfo->type = ADIOS_MESH_UNIFORM;
+
+int common_read_complete_meshinfo (ADIOS_FILE *fp, ADIOS_FILE *mp, ADIOS_MESH * meshinfo)
+{
+    enum ADIOS_DATATYPES attr_type;
+    int attr_size;
+    void * data = NULL;
+    int  read_fail = 0;
+    int i, j, varid;
+   
+    if (fp==NULL || mp==NULL)
+    { 
+        adios_error (err_mesh_file_missing,
+                     "Mesh file %s or mesh file does not exist. ",
+                     fp->path, mp->path);
+        return adios_errno;
+    }
+
+//    if ( !strcmp((char *)data, "uniform") )
+    if (meshinfo->type == ADIOS_MESH_UNIFORM)
+    {
+//        meshinfo->type = ADIOS_MESH_UNIFORM;
         meshinfo->uniform = (MESH_UNIFORM * ) malloc (sizeof(MESH_UNIFORM));
 
         // initialize pointers that might not be set below
@@ -1426,7 +1534,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unifrom_invalid_num_dims,
                                  "Uniform mesh %s has more than 10 dims!\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 //i_digits to reprent the number in dimensions0/dimensions1/... 
@@ -1444,7 +1552,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unifrom_missing_one_dim,
                                  "Uniform mesh %s dimensions[%d] is not provided!\n", 
                                  meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
@@ -1460,23 +1568,15 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         varid = common_read_find_var (fp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
                             ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
-                            if (v->type == adios_byte)
-                                meshinfo->uniform->dimensions[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->uniform->dimensions[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->uniform->dimensions[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->uniform->dimensions[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->uniform->dimensions[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->uniform->dimensions[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->uniform->dimensions[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)
-                                meshinfo->uniform->dimensions[i] = *(unsigned long long *)v->value;
-
+                            adios_errno = err_no_error;
+                            meshinfo->uniform->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
+                            if (adios_errno < 0)
+                            {
+                                adios_error (err_mesh_unifrom_invalid_dim,
+                                         "Uniform mesh %s dimensions%d var type is not support!\n",
+                                         meshinfo->name, i);
+                                return adios_errno;
+                            }
                             common_read_free_varinfo (v);
                         }
                         else
@@ -1484,7 +1584,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_unifrom_invalid_dim,
                                          "Uniform mesh %s dimensions%d var %s is not correct!\n", 
                                          meshinfo->name, i, (char *)data);
-                            return NULL; 
+                            return adios_errno; 
                         }
 //                        free (dimensions_value_tmp);
                     }
@@ -1496,14 +1596,14 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             adios_error (err_mesh_unifrom_missing_dims,
                          "Uniform mesh %s dimension is required\n", 
                          meshinfo->name);
-            return NULL;            
+            return adios_errno;            
         }
 
         //start processing origins, origin is optional
         int have_origins;
         have_origins = adios_get_uniform_mesh_attr (fp, meshinfo, "origins");
         if (have_origins == -1)
-            return NULL;
+            return adios_errno;
 //        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
 //            printf ("origins[%d] is %lf\n", i, meshinfo->uniform->origins[i]);
 
@@ -1511,7 +1611,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
         int have_spacings;
         have_spacings = adios_get_uniform_mesh_attr (fp, meshinfo, "spacings");
         if (have_spacings == -1)
-            return NULL;
+            return adios_errno;
 //        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
 //            printf ("spacings[%d] is %lf\n", i, meshinfo->uniform->spacings[i]);
 
@@ -1519,7 +1619,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
         int have_maximums;
         have_maximums = adios_get_uniform_mesh_attr (fp, meshinfo, "maximums");
         if (have_maximums == -1)
-            return NULL;
+            return adios_errno;
 //        for (int i = 0; i < meshinfo->uniform->num_dimensions; i++ )
 //            printf ("maximums[%d] is %lf\n", i, meshinfo->uniform->maximums[i]);
 
@@ -1536,15 +1636,16 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                  "provided spacing is %lf, calculated spacing is %lf\n", 
                                  meshinfo->name, meshinfo->uniform->spacings[i], 
                                  (meshinfo->uniform->maximums[i]-meshinfo->uniform->origins[i])/(double)(meshinfo->uniform->dimensions[i]-1));
-                    return NULL; 
+                    return adios_errno; 
                 }
             }
         }
 //end of uniform mesh 
     }
-    else if ( !strcmp((char *)data, "rectilinear") )   
+//    else if ( !strcmp((char *)data, "rectilinear") )   
+    else if  (meshinfo->type == ADIOS_MESH_RECTILINEAR)
     {
-        meshinfo->type = ADIOS_MESH_RECTILINEAR;
+//        meshinfo->type = ADIOS_MESH_RECTILINEAR;
         meshinfo->rectilinear = (MESH_RECTILINEAR * ) malloc (sizeof(MESH_RECTILINEAR));
         meshinfo->rectilinear->use_single_var = 0;    // default value 0 indicates using multi-var
 
@@ -1573,7 +1674,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_recti_invalid_num_dims,
                                  "Rectilinear mesh %s has more than 10 dims!\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 //i_digits to reprent the number in dimensions0/dimensions1/... 
@@ -1592,7 +1693,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_recti_missing_one_dim,
                                  "Rectilinear mesh %s dimensions[%d] is not provided!\n", 
                                  meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
@@ -1608,23 +1709,15 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         varid = common_read_find_var (fp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
                             ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
-                            if (v->type == adios_byte)
-                                meshinfo->rectilinear->dimensions[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->rectilinear->dimensions[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->rectilinear->dimensions[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->rectilinear->dimensions[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->rectilinear->dimensions[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->rectilinear->dimensions[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->rectilinear->dimensions[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)  
-                                meshinfo->rectilinear->dimensions[i] = *(unsigned long long *)v->value;
-//                            meshinfo->rectilinear->dimensions[i] = *(uint64_t *)v->value;
+                            adios_errno = err_no_error;
+                            meshinfo->rectilinear->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
+                            if (adios_errno < 0)
+                            {
+                                adios_error (err_mesh_recti_invalid_dim,
+                                         "Rectilinear mesh %s dimensions%d var type is not support!\n",
+                                         meshinfo->name, i);
+                                return adios_errno;
+                            }
                             common_read_free_varinfo (v);
                         }
                         else
@@ -1632,7 +1725,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_recti_invalid_dim,
                                          "Rectilinear mesh %s dimensions%d var %s is not correct!\n", 
                                          meshinfo->name, i, (char *)data);
-                            return NULL; 
+                            return adios_errno; 
                         }
                     }
                 }
@@ -1643,7 +1736,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             adios_error (err_mesh_recti_missing_dims,
                          "Rectilinear mesh %s dimension is required\n", 
                          meshinfo->name);
-            return NULL; 
+            return adios_errno; 
         }
 //        for (int i = 0; i < meshinfo->rectilinear->num_dimensions; i++ )
 //            printf ("dimensions[%d] is %d\n", i, meshinfo->rectilinear->dimensions[i]);
@@ -1671,7 +1764,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_recti_invalid_coords,
                                  "Rectilinear mesh %s coordinates dimension is 0\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else                                   //vector, more than one dim
                 {
@@ -1685,7 +1778,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_recti_invalid_coords,
                                          "Rectilinear mesh %s coordinates dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
                                          meshinfo->name, v->dims[0], dim_tmp*meshinfo->rectilinear->num_dimensions);
-                            return NULL; 
+                            return adios_errno; 
                         }
                         else
                             meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]);
@@ -1700,7 +1793,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                 adios_error (err_mesh_recti_invalid_coords, 
                                              "Rectilinear mesh %s dimension[%d]= %d does not match coordinates dimension[%d]= %d\n",
                                              meshinfo->name, j, meshinfo->rectilinear->dimensions[j], j, v->dims[j] );
-                                return NULL; 
+                                return adios_errno; 
                             }
                         }
                         meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]); 
@@ -1713,7 +1806,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_recti_invalid_coords,    
                             "Rectilinear mesh %s coordinates var name %s not found\n",
                             meshinfo->name, coords_tmp );
-                return NULL; 
+                return adios_errno; 
             }
 //            printf ("coordinates is %s\n", meshinfo->rectilinear->coordinates[0]);
         }
@@ -1734,7 +1827,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_recti_invalid_coords,
                                  "Rectilinear mesh %s number of coordinates %d is less than the number of dimensions %d!\n", 
                                  meshinfo->name, num_coordinates, meshinfo->rectilinear->num_dimensions);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 if (num_coordinates > meshinfo->rectilinear->num_dimensions)
                 {
@@ -1755,7 +1848,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_recti_invalid_num_coords, 
                                      "Rectilinear mesh %s has more than 10 coordinates!\n", 
                                      meshinfo->name);
-                        return NULL; 
+                        return adios_errno; 
                     }
                     i_digits = sprintf (i_buffer, "%d", i);
  //                   printf ("i digit is %d\n", i_digits); 
@@ -1774,7 +1867,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_recti_missing_one_coords,
                                      "Rectilinear mesh %s coordinate of coordinate[%d] is not provided!\n", 
                                      meshinfo->name, i);
-                        return NULL; 
+                        return adios_errno; 
                     }
 
                     char * coords_var_tmp = strdup((char *)data);
@@ -1788,7 +1881,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                     "match coordinates dimension[%d] = %lld\n",
                                     meshinfo->name, i, meshinfo->rectilinear->dimensions[i], 
                                     i, v->dims[0] );
-                            return NULL; 
+                            return adios_errno; 
                         }
                         else
                         {
@@ -1804,15 +1897,16 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_recti_missing_coords,
                              "Rectilinear mesh %s coordinate is not provided\n", 
                              meshinfo->name);
-                return NULL; 
+                return adios_errno; 
             }
 //            for (int i = 0; i < meshinfo->rectilinear->num_dimensions; i++ )
 //                printf ("coordinates[%d] is %s\n", i, meshinfo->rectilinear->coordinates[i]);
         }
     }
-    else if ( !strcmp((char *)data, "structured") )
+//    else if ( !strcmp((char *)data, "structured") )
+    else if (meshinfo->type == ADIOS_MESH_STRUCTURED)
     {
-        meshinfo->type = ADIOS_MESH_STRUCTURED;
+//        meshinfo->type = ADIOS_MESH_STRUCTURED;
         meshinfo->structured = (MESH_STRUCTURED* ) malloc (sizeof(MESH_STRUCTURED));
         meshinfo->structured->use_single_var = 0;        // default value 0 indicates using multi-var   
         meshinfo->structured->nspaces = meshinfo->structured->num_dimensions;   //default spaces = # of dims
@@ -1841,7 +1935,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_structured_invalid_num_dims,
                                  "Strctured mesh %s has more than 10 dimensions!\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 char * dimensions_value = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions")+i_digits+1 );
@@ -1857,7 +1951,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_structured_missing_one_dim,
                                  "Strctured mesh %s dimension of dimensions[%d] is not provided!\n", 
                                  meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
@@ -1873,23 +1967,15 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         varid = common_read_find_var (fp, dimensions_value_tmp, 1);
                         if (varid >= 0) {
                             ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
-                            if (v->type == adios_byte)
-                                meshinfo->structured->dimensions[i] = *(signed char *)v->value;
-                            else if (v->type == adios_unsigned_byte)
-                                meshinfo->structured->dimensions[i] = *(unsigned char *)v->value;
-                            else if (v->type == adios_short)
-                                meshinfo->structured->dimensions[i] = *(signed short *)v->value;
-                            else if (v->type == adios_unsigned_short)
-                                meshinfo->structured->dimensions[i] = *(unsigned short *)v->value;
-                            else if (v->type == adios_integer)
-                                meshinfo->structured->dimensions[i] = *(signed int *)v->value;
-                            else if (v->type == adios_unsigned_integer)
-                                meshinfo->structured->dimensions[i] = *(unsigned int *)v->value;
-                            else if (v->type == adios_long)
-                                meshinfo->structured->dimensions[i] = *(signed long long *)v->value;
-                            else if (v->type == adios_unsigned_long)
-                                meshinfo->structured->dimensions[i] = *(unsigned long long *)v->value;
-//                            meshinfo->structured->dimensions[i] = *(uint64_t *)v->value;
+                            adios_errno = err_no_error;
+                            meshinfo->structured->dimensions[i] = common_check_var_type_to_uint64 (&v->type, v->value);
+                            if( adios_errno < 0)
+                            {
+                                adios_error (err_mesh_structured_invalid_dim,
+                                         "Strctured mesh %s dimensions%d var type is not support!\n",
+                                         meshinfo->name, i);
+                                return adios_errno; 
+                            }
                             common_read_free_varinfo (v);
                         }
                         else
@@ -1897,7 +1983,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_structured_invalid_dim,
                                          "Strctured mesh %s dimensions%d var %s is not correct!\n", 
                                          meshinfo->name, i, (char *)data);
-                            return NULL; 
+                            return adios_errno; 
                         }
 //                        free (dimensions_value_tmp);
                     }
@@ -1909,7 +1995,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             adios_error (err_mesh_structured_missing_dims, 
                          "Strctured mesh %s dimension is required\n", 
                          meshinfo->name);
-            return NULL; 
+            return adios_errno; 
         }
 
         // start processing structured mesh points
@@ -1934,7 +2020,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_structured_invaid_dim_points,
                                  "Strctured mesh %s points dimension is 0.\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else                                   //vector, more than one dim
                 {
@@ -1948,7 +2034,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_structured_invaid_points,
                                          "Strctured mesh %s points dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
                                          meshinfo->name, v->dims[0], dim_tmp*meshinfo->structured->num_dimensions);
-                            return NULL; 
+                            return adios_errno; 
                         }
                         else
                             meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
@@ -1963,7 +2049,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                 adios_error (err_mesh_structured_invaid_points,
                                              "Strctured mesh %s dimension[%d]= %"PRIu64" does not match points dimension[%d]= %"PRIu64"\n",
                                              meshinfo->name, j, meshinfo->structured->dimensions[j], j, v->dims[j] );
-                                return NULL; 
+                                return adios_errno; 
                             }
                         }
                         meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
@@ -1976,7 +2062,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_structured_invaid_points,
                             "Strctured mesh %s points var name %s not found\n",
                             meshinfo->name, coords_tmp);
-                return NULL;
+                return adios_errno;
             }
         }
         else                    //use points-multi-var
@@ -1996,7 +2082,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_structured_invaid_dim_points,
                                  "Strctured mesh %s provided points dim %d is less than dims of mesh %d!\n",
                                  meshinfo->name, points_dim, meshinfo->structured->num_dimensions);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 if (points_dim > meshinfo->structured->num_dimensions)
                 {
@@ -2017,7 +2103,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_structured_invalid_num_points,
                                      "Structured mesh %s has than 10 points var!\n", 
                                      meshinfo->name);
-                        return NULL; 
+                        return adios_errno; 
                     }
                     i_digits = sprintf (i_buffer, "%d", i);
                     char * points_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/points-multi-var")+i_digits+1 );
@@ -2034,7 +2120,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_structured_missing_one_points,
                                      "Strctured mesh %s points of dim[%d] is not provided!\n", 
                                      meshinfo->name, i);
-                        return NULL; 
+                        return adios_errno; 
                     }
                     char * points_var_tmp = strdup((char *)data);
                     varid = common_read_find_var (fp, points_var_tmp, 1);
@@ -2053,7 +2139,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                 adios_error (err_mesh_structured_invaid_points,
                                              "Strctured mesh %s points dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
                                              meshinfo->name, v->dims[0], dim_tmp);
-                                return NULL; 
+                                return adios_errno; 
                             }
                             else
                                 meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
@@ -2069,7 +2155,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                     adios_error (err_mesh_structured_invaid_points,
                                                  "Strctured mesh %s dimension[%d]= %"PRIu64" does not match points dimension[%d]= %"PRIu64"\n",
                                                  meshinfo->name, m, meshinfo->structured->dimensions[m], m, v->dims[m] );
-                                    return NULL; 
+                                    return adios_errno; 
                                 }
                             }
                             meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
@@ -2081,7 +2167,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_structured_missing_one_points,
                                      "Structured mesh %s var of points-multi-var%d is not provided.\n", 
                                      meshinfo->name, i); 
-                        return NULL; 
+                        return adios_errno; 
                     }
                 }   // end of for loop i
             }  // end of if found attributes points-multi-var
@@ -2090,7 +2176,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_structured_missing_points,
                              "Structured mesh %s point is not provided.\n", 
                              meshinfo->name);
-                return NULL; 
+                return adios_errno; 
             }
 
         }  // end of else use points-multi-var
@@ -2130,16 +2216,18 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 }
                 else
                 {
-                    log_warn ("Var %s for structured mesh %s nspace is not found. ", 
+                    log_warn ("Var %s for structured mesh %s nspace is not found. "
                               "We use num of dims %d for nspaces.\n",
-                              (char *)data, meshinfo->name, meshinfo->structured->num_dimensions);
+                              (char *)data, meshinfo->name, 
+                              meshinfo->structured->num_dimensions);
                 }
             }
         } // end of structured mesh nspace
     }// end of structured mesh
-    else if ( !strcmp((char *)data, "unstructured") )
+//    else if ( !strcmp((char *)data, "unstructured") )
+    else if (meshinfo->type == ADIOS_MESH_UNSTRUCTURED)
     {
-        meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
+//        meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
         meshinfo->unstructured = (MESH_UNSTRUCTURED* ) malloc (sizeof(MESH_UNSTRUCTURED));
 //        meshinfo->unstructured->use_single_var = 0;  // default value 0 indicates using multi-var
         meshinfo->unstructured->nvar_points = 1;
@@ -2160,16 +2248,18 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
 //            meshinfo->unstructured->use_single_var = 1;         // modify default value to 1
             char * coords_tmp = strdup((char *)data);
 //            printf ("coords_tmp is %s\n", coords_tmp);
-            varid = common_read_find_var (fp, coords_tmp, 1);
+//            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(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_unstructured_invaid_points,
                                  "Unstructured mesh %s points dimension is 0.\n", 
                                  meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else                                   //vector
                 {
@@ -2179,7 +2269,8 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     for (j=0; j<v->ndim; j++)
                         meshinfo->unstructured->npoints *= v->dims[j];         
                     meshinfo->unstructured->npoints /= v->ndim;               //unstructured mesh npoints init
-                    meshinfo->unstructured->points[0] = strdup (fp->var_namelist[varid]);
+//                    meshinfo->unstructured->points[0] = strdup (fp->var_namelist[varid]);
+                    meshinfo->unstructured->points[0] = strdup (mp->var_namelist[varid]);
                 }
                 common_read_free_varinfo (v);
             }
@@ -2188,7 +2279,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_invaid_points,
                              "Unstrctured mesh %s var %s for points-single-var is not found.\n", 
                              meshinfo->name, coords_tmp);
-                return NULL;
+                return adios_errno;
             }
         }
         else                    //use points-multi-var
@@ -2220,7 +2311,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_unstructured_invaid_num_points,
                                      "Structured mesh %s has more than 10 points.\n", 
                                      meshinfo->name);
-                        return NULL; 
+                        return adios_errno; 
                     }
                     i_digits = sprintf (i_buffer, "%d", i);
                     char * points_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/points-multi-var")+i_digits+1 );
@@ -2230,21 +2321,24 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     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 (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)
                     {
                         adios_error (err_mesh_unstructured_missing_one_points, 
                                      "Unstructured mesh %s points of dim[%d] is not provided.\n", 
                                      meshinfo->name, i);
-                        return NULL; 
+                        return adios_errno; 
                     }
                     char * points_var_tmp = strdup((char *)data);
 //                    printf ( "points_var_tmp is %s\n", points_var_tmp);
-                    varid = common_read_find_var (fp, points_var_tmp, 1);
+//                    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(fp, fp->var_namelist[varid]);
+                        ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
                         if (first_dim)
                         {
                             first_match_var = strdup (points_var_tmp);
@@ -2262,12 +2356,13 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                     adios_error (err_mesh_unstructured_invaid_dim_points,
                                                  "Unstructured mesh %s points-multi-var%d %"PRIu64" does not match points-multi-var0 %"PRIu64".\n", 
                                                  meshinfo->name, i, v->dims[0], meshinfo->unstructured->npoints);
-                                    return NULL; 
+                                    return adios_errno; 
                                 }
                             }
                             else // v->ndim > 1, check if match for each dim
                             {
-                                ADIOS_VARINFO * v_first = common_read_inq_var(fp, first_match_var);
+//                                ADIOS_VARINFO * v_first = common_read_inq_var(fp, first_match_var);
+                                ADIOS_VARINFO * v_first = common_read_inq_var(mp, first_match_var);
                                 if (v_first->ndim == 1)
                                 {
                                     int k = 0;
@@ -2279,7 +2374,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                         adios_error (err_mesh_unstructured_invaid_dim_points, 
                                                      "Unstructured mesh %s points-multi-var%d %"PRIu64" does not match points-multi-var0 %"PRIu64".\n",
                                                      meshinfo->name, i, var_dim_tmp, meshinfo->unstructured->npoints);
-                                        return NULL; 
+                                        return adios_errno; 
                                     }
                                 }
                                 else  //both v_first and v has more than 2 dims
@@ -2289,7 +2384,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                         adios_error (err_mesh_unstructured_invaid_dim_points,
                                                      "Unstructured mesh %s points-multi-var%d dim does not match points-multi-var0 dim.\n",
                                                      meshinfo->name, i);
-                                        return NULL; 
+                                        return adios_errno; 
                                     }
                                     else
                                     {
@@ -2301,7 +2396,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                                 adios_error (err_mesh_unstructured_invaid_dim_points,
                                                              "Unstructured mesh %s points-multi-var%d dim%d does not match points-multi-var0 dim%d.\n",
                                                     meshinfo->name, i, k, k);
-                                                return NULL; 
+                                                return adios_errno; 
                                             }
                                         }
                                     }
@@ -2309,7 +2404,8 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                 common_read_free_varinfo (v_first);
                             }
                         }
-                        meshinfo->unstructured->points[i] = strdup (fp->var_namelist[varid]);
+//                        meshinfo->unstructured->points[i] = strdup (fp->var_namelist[varid]);
+                        meshinfo->unstructured->points[i] = strdup (mp->var_namelist[varid]);
                         common_read_free_varinfo (v);
                     }
                     else
@@ -2317,7 +2413,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_unstructured_missing_one_points,
                                      "Unstructured mesh %s var of points-multi-var%d is not provided.\n", 
                                      meshinfo->name, i);
-                        return NULL; 
+                        return adios_errno; 
                     }
                 }   // end of for loop i
             }  // end of if found attributes points-multi-var
@@ -2326,7 +2422,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_missing_points,
                              "Unstructured mesh %s point is not provided.\n", 
                              meshinfo->name);
-                return NULL; 
+                return adios_errno; 
             }
 
         }  // end of else use points-multi-var
@@ -2364,31 +2460,46 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             else
             {
                 char * points_var_tmp = strdup((char *)data);
-                varid = common_read_find_var (fp, points_var_tmp, 1);
+//                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]);
-                    if (v->type==adios_long || v->type==adios_unsigned_long) //long long or unsigned long long   
+//                    ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                    ADIOS_VARINFO * v = common_read_inq_var(mp, mp->var_namelist[varid]);
+                    uint64_t match_points = 0;
+                    adios_errno = err_no_error;
+                    match_points = common_check_var_type_to_uint64 (&v->type, v->value);
+                    if (adios_errno < 0)
                     {
-                        if (meshinfo->unstructured->npoints != *(uint64_t *)v->value)
-                            log_warn ("Provided npoints %"PRIu64" does not match points calculated from points-var %"PRIu64". "
-                                      "We use calculated npoints from points-var %"PRIu64".\n",
-                                      *(uint64_t *)v->value, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
+                        log_warn ("Unstructured mesh %s var type of npoints is not supported. "
+                                  "We use calculated default npoints %"PRIu64" from points-var\n",
+                                  meshinfo->name, meshinfo->unstructured->npoints);
                     }
-                    else      //int
-                    {
-                        if (meshinfo->unstructured->npoints != *(int *)v->value)
-                        log_warn ("Provided npoints %d does not match points calculated from points-var %"PRIu64". "
+                    if (meshinfo->unstructured->npoints != match_points)
+                        log_warn ("Provided npoints %"PRIu64" does not match points calculated from points-var %"PRIu64". "
                                   "We use calculated npoints from points-var %"PRIu64".\n",
-                                  *(int *)v->value, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
-                    }
+                                  match_points, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
                     common_read_free_varinfo (v);
                 }
                 else
                 {
-                    log_warn ("Unstructured mesh %s var of npoints is not correct. "
-                              "We use calculated default npoints %"PRIu64" from points-var\n", 
-                              meshinfo->name, meshinfo->unstructured->npoints);
+                    // check attrubites if var is not found
+                    read_fail = common_read_get_attr_mesh (mp, points_var_tmp, &attr_type, &attr_size, &data);
+                    if (!read_fail)
+                    {
+                        adios_errno = err_no_error;
+                        meshinfo->unstructured->npoints = common_check_var_type_to_uint64 (&attr_size, data);
+                        if (adios_errno < 0)
+                        {
+                            log_warn ("Unstructured mesh %s var type of npoints is not supported. "
+                                      "We use calculated default npoints %"PRIu64" from points-var\n",
+                                      meshinfo->name, meshinfo->unstructured->npoints);
+                        }
+                    }
+                    else
+                        log_warn ("Unstructured mesh %s var of npoints is not correct. "
+                                  "We use calculated default npoints %"PRIu64" from points-var\n", 
+                                  meshinfo->name, meshinfo->unstructured->npoints);
                 }
             }
         }
@@ -2425,10 +2536,12 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             else
             {
                 char * spaces_var_tmp = strdup((char *)data);
-                varid = common_read_find_var (fp, spaces_var_tmp, 1);
+//                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(fp, fp->var_namelist[varid]);
+                    ADIOS_VARINFO * v = common_read_inq_var(mp,mp->var_namelist[varid]);
                     if (meshinfo->unstructured->nspaces > *(int *)v->value) {
                         log_warn ("Unstructured mesh %s: the provided nspaces %d "
                                   "is less than the points dim %d. "
@@ -2441,9 +2554,25 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     common_read_free_varinfo (v);
                 }
                 else
-                    log_warn ("Unstructured mesh %s var of npoints is not correct, "
-                              " use points dim %d for nspaces\n",
-                              meshinfo->name, meshinfo->unstructured->nspaces);
+                {
+                    // check attrubites if var is not found
+                    read_fail = common_read_get_attr_mesh (mp, spaces_var_tmp, &attr_type, &attr_size, &data);
+                    if (!read_fail)
+                    {
+                        adios_errno = err_no_error;
+                        meshinfo->unstructured->nspaces = common_check_var_type_to_int (&attr_size, data);
+                        if (adios_errno < 0)
+                            log_warn ("Unstructured mesh %s var type of nspaces is not suported, "
+                                      "use points dim %d for nspaces\n",
+                                      meshinfo->name, meshinfo->unstructured->nspaces);
+                    }
+                    else
+                    {
+                        log_warn ("Unstructured mesh %s var of nspaces is not correct, "
+                                  "use points dim %d for nspaces\n",
+                                  meshinfo->name, meshinfo->unstructured->nspaces);
+                    }
+                }
             }
         }
 
@@ -2462,7 +2591,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
             adios_error (err_mesh_unstructured_missing_ncsets, 
                         "Unstructured mesh %s ncsets is not provided, user should have "
                         "mixed-cells-count/uniform-cells in xml file\n", meshinfo->name);
-            return NULL;
+            return adios_errno;
         }
         else
         {
@@ -2480,7 +2609,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_invalid_ncsets, 
                             "Reading unstructured mesh %s ncsets failed\n", 
                             meshinfo->name);
-                return NULL;
+                return adios_errno;
 
             }
         }
@@ -2504,7 +2633,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_missing_ccount,
                             "Unstructured mesh %s number of cells (ccount) is required.\n", 
                             meshinfo->name);    
-                return NULL;
+                return adios_errno;
             }
             else
             {
@@ -2517,10 +2646,12 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 else
                 {
                     char * ccount_tmp = strdup((char *)data);
-                    varid = common_read_find_var (fp, ccount_tmp, 1);
+//                    varid = common_read_find_var (fp, ccount_tmp, 1);
+                    varid = common_read_find_var (mp, ccount_tmp, 1);
                     if (varid >= 0)
                     {
-                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+//                        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->type == adios_unsigned_long || v->type == adios_long)
                             meshinfo->unstructured->ccounts[0] = *(uint64_t *)v->value;
                         else
@@ -2532,7 +2663,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                         adios_error (err_mesh_unstructured_invalid_ccount,
                                     "Unstructured mesh %s var for ccount is invalid.\n", 
                                     meshinfo->name);
-                        return NULL;
+                        return adios_errno;
                     }
                 }
             }    
@@ -2552,7 +2683,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unstructured_invalid_ctypes,
                                 "Unstructured mesh %s has more than 10 cell types.\n", 
                                 meshinfo->name);
-                    return NULL;
+                    return adios_errno;
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 char * ccount_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ccount")+i_digits+1 );
@@ -2562,14 +2693,15 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 strcat (ccount_var, i_buffer);
                 free (i_buffer);
                 data = NULL;
-                read_fail = common_read_get_attr_mesh (fp, ccount_var, &attr_type, &attr_size, &data);
+//                read_fail = common_read_get_attr_mesh (fp, ccount_var, &attr_type, &attr_size, &data);
+                read_fail = common_read_get_attr_mesh (mp, ccount_var, &attr_type, &attr_size, &data);
                 free (ccount_var);
                 if (read_fail)
                 {
                     adios_error (err_mesh_unstructured_missing_ccount,
                                 "Unstructured mesh %s ccount%d is not provided!\n", 
                                 meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
@@ -2582,10 +2714,12 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     else
                     {
                         char * ccount_mix_tmp = strdup((char *)data);
-                        varid = common_read_find_var (fp, ccount_mix_tmp, 1);
+//                        varid = common_read_find_var (fp, ccount_mix_tmp, 1);
+                        varid = common_read_find_var (mp, ccount_mix_tmp, 1);
                         if (varid >= 0)
                         {
-                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+//                            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->type == adios_long || v->type == adios_unsigned_long)
                                 meshinfo->unstructured->ccounts[i] = *(uint64_t *)v->value;
                             else
@@ -2597,7 +2731,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                             adios_error (err_mesh_unstructured_invalid_ccount,
                                         "Unstructured mesh %s var for ccount%d is invalid\n", 
                                         meshinfo->name, i);
-                            return NULL; 
+                            return adios_errno; 
                         }
                     }
                 }
@@ -2622,20 +2756,22 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_missing_cdata,
                             "Unstructured mesh %s cell data is required\n", 
                             meshinfo->name);
-                return NULL; 
+                return adios_errno; 
             }
             else
             {
                 char * cdata_tmp = strdup((char *)data);
-                varid = common_read_find_var (fp, cdata_tmp, 1);
+//                varid = common_read_find_var (fp, cdata_tmp, 1);
+                varid = common_read_find_var (mp, cdata_tmp, 1);
                 if (varid >= 0)
-                    meshinfo->unstructured->cdata[0] = strdup(fp->var_namelist[varid]);
+//                    meshinfo->unstructured->cdata[0] = strdup(fp->var_namelist[varid]);
+                    meshinfo->unstructured->cdata[0] = strdup(mp->var_namelist[varid]);
                 else
                 {
                     adios_error (err_mesh_unstructured_invalid_cdata,
                                 "Unstructured mesh %s var for cdata is invalid\n", 
                                 meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
             }
         }
@@ -2654,7 +2790,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unstructured_invalid_ctypes,
                                 "Unstructured mesh %s has more than 10 cell types!\n",
                                 meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 char * cdata_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/cdata")+i_digits+1 );
@@ -2671,20 +2807,22 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unstructured_missing_cdata,
                                 "Unstructured mesh %s cdata%d is not provided!\n", 
                                 meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
                     char * cdata_mix_tmp = strdup((char *)data);
-                    varid = common_read_find_var (fp, cdata_mix_tmp, 1);
+//                    varid = common_read_find_var (fp, cdata_mix_tmp, 1);
+                    varid = common_read_find_var (mp, cdata_mix_tmp, 1);
                     if (varid >= 0)
-                        meshinfo->unstructured->cdata[i] = strdup(fp->var_namelist[varid]);
+//                        meshinfo->unstructured->cdata[i] = strdup(fp->var_namelist[varid]);
+                        meshinfo->unstructured->cdata[i] = strdup(mp->var_namelist[varid]);
                     else
                     {
                         adios_error (err_mesh_unstructured_invalid_cdata,
                                     "Unstructured mesh %s var for cdata%d is not correct.\n", 
                                     meshinfo->name, i);
-                        return NULL; 
+                        return adios_errno; 
                     }
                 }
             }
@@ -2707,7 +2845,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                 adios_error (err_mesh_unstructured_missing_ctype,
                             "Unstructured mesh %s cells type is required.\n", 
                             meshinfo->name);
-                return NULL; 
+                return adios_errno; 
             } 
             else
             {
@@ -2732,7 +2870,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                 "we use line, triangle, quad, hex, prism, tet or tet for cell types. "
                                 "please choose to use one of them. ",
                                  meshinfo->name, (char *)data, i);
-                    return NULL;
+                    return adios_errno;
                 }
             }
 //printf ("%d, cell type is %d\n", __LINE__, meshinfo->unstructured->ctypes[0]);
@@ -2752,7 +2890,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unstructured_invalid_ctypes,
                                 "Unstructured mesh %s has more than 10 cell types!\n",
                                 meshinfo->name);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 i_digits = sprintf (i_buffer, "%d", i);
                 char * ctype_mix_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ctype")+i_digits+1 );
@@ -2769,7 +2907,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                     adios_error (err_mesh_unstructured_missing_ctype,
                                 "Unstructured mesh %s ctype%d is not provided!\n", 
                                 meshinfo->name, i);
-                    return NULL; 
+                    return adios_errno; 
                 }
                 else
                 {
@@ -2794,7 +2932,7 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
                                     "we use line, triangle, quad, hex, prism, tet or tet for cell types. "
                                     "please choose to use one of them. ", 
                                     meshinfo->name, (char *)data, i);
-                        return NULL;
+                        return adios_errno;
                         
                     }
                 }
@@ -2805,7 +2943,8 @@ ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
 //    fp->attr_namelist[i]
 //    common_read_get_attr_mesh (f, f->attr_namelist[i], &attr_type, &attr_size, &data);    
 
-    return meshinfo;
+    //return meshinfo;
+    return err_no_error;
 }
 
 void common_read_free_meshinfo (ADIOS_MESH * meshinfo)
@@ -2813,6 +2952,16 @@ void common_read_free_meshinfo (ADIOS_MESH * meshinfo)
     if(meshinfo)
     {
         int i = 0;
+        if (meshinfo->name)
+        {
+            free (meshinfo->name);
+            meshinfo->name = NULL;
+        }
+        if (meshinfo->file_name) 
+        {
+            free (meshinfo->file_name);
+            meshinfo->file_name = NULL;
+        }
         switch (meshinfo->type) {
             case ADIOS_MESH_UNIFORM:
                 {
@@ -2893,12 +3042,10 @@ int common_read_schedule_read (const ADIOS_FILE      * fp,
                                void                  * data)
 
 {
-    struct common_read_internals_struct * internals;
     int retval;
     
     adios_errno = err_no_error;
     if (fp) {
-        internals = (struct common_read_internals_struct *) fp->internal_data;
         int varid = common_read_find_var (fp, varname,0);
         if (varid >= 0) {
             retval = common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, param /* NCSU ALACRITY-ADIOS */, data);
@@ -2981,8 +3128,11 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
 #endif
             } else {
                 // Old functionality
-            internals = (struct common_read_internals_struct *) fp->internal_data;
-            retval = internals->read_hooks[internals->method].adios_schedule_read_byid_fn (fp, sel, varid+internals->group_varid_offset, from_steps, nsteps, data);
+                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);
             }
         } else {
             adios_error (err_invalid_varid, 
@@ -3057,7 +3207,7 @@ int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
             if (!*chunk) break; // If no more chunks are available, stop now
 
             // Process the chunk through a transform method, if necessary
-            adios_transform_process_read_chunk(internals->transform_reqgroups, chunk);
+            adios_transform_process_read_chunk(&internals->transform_reqgroups, chunk);
         } while (!*chunk); // Keep reading until we have a chunk to return
     } else {
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_check_reads()\n");
@@ -3090,12 +3240,10 @@ int common_read_get_attr (const ADIOS_FILE * fp,
                           int * size, 
                           void ** data)
 {
-    struct common_read_internals_struct * internals;
     int retval;
     
     adios_errno = err_no_error;
     if (fp) {
-        internals = (struct common_read_internals_struct *) fp->internal_data;
         int attrid = common_read_find_attr (fp->nattrs, fp->attr_namelist, attrname, 0);
         if (attrid > -1) {
             retval = common_read_get_attr_byid (fp, attrid, type, size, data);
@@ -3209,9 +3357,9 @@ int common_read_group_view (ADIOS_FILE  *fp, int groupid)
         if (groupid >= 0 && groupid < internals->ngroups) {
             /* 1. save complete list if first done */
             if (internals->group_in_view == -1) {
-                internals->full_nvars = fp->nvars;
+                internals->full_nvars = (uint32_t) fp->nvars;
                 internals->full_varnamelist = fp->var_namelist;
-                internals->full_nattrs = fp->nattrs;
+                internals->full_nattrs = (uint32_t) fp->nattrs;
                 internals->full_attrnamelist = fp->attr_namelist;
             }
             /* Set ID offsets for easier indexing of vars/attrs in other functions */
diff --git a/src/core/common_read.h b/src/core/common_read.h
index 9acf2e9..c5c3f16 100644
--- a/src/core/common_read.h
+++ b/src/core/common_read.h
@@ -44,12 +44,17 @@ ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE  *fp, int varid);
 ADIOS_TRANSINFO * common_read_inq_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi);
 int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
                              int per_step_stat, int per_block_stat);
+
+int common_read_inq_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);
 void common_read_free_varinfo (ADIOS_VARINFO *vp);
 void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti); // NCSU ALACRITY-ADIOS
 
 ADIOS_MESH * common_read_inq_mesh_byid(ADIOS_FILE *fp, int meshid);
+int common_read_inq_var_meshinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
+int common_read_complete_meshinfo (ADIOS_FILE *datafile, ADIOS_FILE *meshfile, ADIOS_MESH *meshinfo);
+void common_read_free_meshinfo (ADIOS_MESH * meshinfo);
 
 int common_read_schedule_read (const ADIOS_FILE      * fp,
                                const ADIOS_SELECTION * sel,
diff --git a/src/core/ds_metadata.h b/src/core/ds_metadata.h
index 1f92601..32410af 100644
--- a/src/core/ds_metadata.h
+++ b/src/core/ds_metadata.h
@@ -15,9 +15,12 @@
 #define __SPACES_INDEX_H__
 
 #include <stdint.h>
+#include <stdio.h>
+#include <string.h>
 #include "public/adios_types.h"
 #include "public/adios_read.h"
 
+#define MAX_DS_NDIM 10
 
 /* functions currently defined in adios_dataspaces.c and read_dataspaces.c */
 
@@ -52,6 +55,11 @@ void dimes_pack_group_info (struct adios_file_struct *fd
         ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
         );
 
+void ds_ints_to_str (int ndim, int *values, char *s);
+void ds_int64s_to_str(int ndim, uint64_t *values, char *s);
+void dimes_ints_to_str (int ndim, int *values, char *s);
+void dimes_int64s_to_str(int ndim, uint64_t *values, char *s);
+
 /***********************
   FILE info buffer: 
 
diff --git a/src/core/flexpath.h b/src/core/flexpath.h
index 8637802..22ba5c0 100644
--- a/src/core/flexpath.h
+++ b/src/core/flexpath.h
@@ -91,6 +91,7 @@ typedef struct _evgroup {
     int num_vars;
     int step;
     int process_id;
+    char *group_name;
     global_var* vars;
 } evgroup, *evgroup_ptr;
 
@@ -155,6 +156,7 @@ static FMField evgroup_field_list[]=
     {"num_vars", "integer", sizeof(int), FMOffset(evgroup_ptr, num_vars)},
     {"step", "integer", sizeof(int), FMOffset(evgroup_ptr, step)},
     {"process_id", "integer", sizeof(int), FMOffset(evgroup_ptr, process_id)},
+    {"group_name", "string", sizeof(char*), FMOffset(evgroup_ptr, group_name)},
     {"vars", "global_var[num_vars]", sizeof(global_var), FMOffset(evgroup_ptr, vars)},
     {NULL, NULL, 0, 0}
 };
diff --git a/src/core/mpidummy.c b/src/core/mpidummy.c
index 0fdacd5..eb102cc 100644
--- a/src/core/mpidummy.c
+++ b/src/core/mpidummy.c
@@ -52,9 +52,12 @@ int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm
 int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) { *newcomm = comm; return MPI_SUCCESS; }
 int MPI_Comm_rank(MPI_Comm comm, int *rank) { *rank = 0; return MPI_SUCCESS; }
 int MPI_Comm_size(MPI_Comm comm, int *size) { *size = 1; return MPI_SUCCESS; }
+int MPI_Comm_free(MPI_Comm *comm) { *comm = 0; return MPI_SUCCESS; };
 MPI_Comm MPI_Comm_f2c(MPI_Fint comm) { return comm; }
 
-int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm)
+int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
+               void *recvbuf, int recvcnt, MPI_Datatype recvtype, 
+               int root, MPI_Comm comm)
 {
   int ier = MPI_SUCCESS;
   size_t n=0, nsent=0, nrecv=0 ;
@@ -96,6 +99,59 @@ int MPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype,
   return ier ;
 }
 
+int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                  void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                  MPI_Comm comm)
+{
+    return MPI_Gather (sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, 0, comm);
+}
+
+int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
+               void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, 
+               MPI_Comm comm)
+{
+  int ier = MPI_SUCCESS;
+  size_t n=0, nsent=0, nrecv=0 ;
+  if( !sendbuf || !recvbuf )        ier = MPI_ERR_BUFFER ;
+  if( comm==MPI_COMM_NULL || root ) ier = MPI_ERR_COMM ;
+
+  switch( sendtype )
+  {
+    case MPI_INT : n = sizeof( int ) ;
+    default      : return MPI_ERR_TYPE ;
+  }
+  nsent = n * sendcnt ;
+
+  switch( recvtype )
+  {
+    case MPI_INT : nrecv = sizeof( int ) ;
+    default      : return MPI_ERR_TYPE ;
+  }
+  nrecv = n * recvcnt ;
+
+  if( nrecv!=nsent ) ier = MPI_ERR_COUNT ;
+
+  if( ier == MPI_SUCCESS ) memcpy( sendbuf, recvbuf, nsent );
+  else snprintf(mpierrmsg, ier, "could not scatter data\n" );
+
+  return ier ;
+}
+
+int MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, 
+                 MPI_Datatype sendtype, void *recvbuf, int recvcnt,
+                 MPI_Datatype recvtype,
+                 int root, MPI_Comm comm)
+{
+  int ier = MPI_SUCCESS;
+  if( !sendcnts || !displs ) ier = MPI_ERR_BUFFER ;
+
+  if( ier == MPI_SUCCESS )
+    ier = MPI_Scatter(sendbuf, sendcnts[0], sendtype, recvbuf, recvcnt, recvtype, root, comm ) ;
+
+  return ier ;
+}
+
+
 int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh) 
 {
     *fh = open64 (filename, amode);
@@ -161,3 +217,11 @@ double MPI_Wtime()
     gettimeofday (&tv, NULL);
     return (double)(tv.tv_sec) + (double)(tv.tv_usec) / 1000000;    
 }
+
+int MPI_Get_processor_name (char *name, int *resultlen)
+{
+    sprintf(name, "0");
+    *resultlen = 1;
+    return 0;
+}
+
diff --git a/src/core/qhashtbl.c b/src/core/qhashtbl.c
index 36cd149..8ee053e 100644
--- a/src/core/qhashtbl.c
+++ b/src/core/qhashtbl.c
@@ -143,13 +143,13 @@ qhashtbl_t *qhashtbl(int range)
     memset((void *)tbl, 0, sizeof(qhashtbl_t));
 
     // allocate table space
-    tbl->slots = (qhnobj_t **)malloc(sizeof(qhnobj_t *) * range);
+    tbl->slots = (qhslot_t *)malloc(sizeof(qhslot_t) * range);
     if (tbl->slots == NULL) {
         errno = ENOMEM;
         free_(tbl);
         return NULL;
     }
-    memset((void *)tbl->slots, 0, sizeof(qhnobj_t *) * range);
+    memset((void *)tbl->slots, 0, sizeof(qhslot_t) * range);
 
     // assign methods
     tbl->put2       = put2;
@@ -166,6 +166,12 @@ qhashtbl_t *qhashtbl(int range)
     tbl->range = range;
     tbl->num = 0;
 
+    // debug variables
+    tbl->nwalks_get = 0;
+    tbl->ncalls_get = 0;
+    tbl->nwalks_put = 0;
+    tbl->ncalls_put = 0;
+
     return tbl;
 }
 
@@ -200,26 +206,23 @@ static void genkey(const char *path, const char *name, int *keylen, char **key)
     }
 }
 
-static bool put(qhashtbl_t *tbl, const char *fullpath, const void *data)
+static bool qhput(qhashtbl_t *tbl, char *key, int keylen, const void *data)
 {
-    if (!fullpath)
-        return false;
-
-    int keylen = strlen(fullpath);
-    char *key = strdup (fullpath);
-
     // get hash integer
     uint32_t hash = qhashmurmur3_32(key, keylen);
     int idx = hash % tbl->range;
+    tbl->ncalls_put++; // debug
 
     //log_error ("qhastbl:put: key=[%s], keylen=%d hash=%d, idx=%d, d=%x\n", key, keylen, hash, idx, data);
 
-    // find existence key
+    // find existing key
+    qhslot_t *slot = &tbl->slots[idx];
     qhnobj_t *obj;
-    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+    for (obj = slot->head; obj != NULL; obj = obj->next) {
         if (obj->hash == hash && !strcmp(obj->key, key)) {
             break;
         }
+        tbl->nwalks_put++; // debug: we walk one step in a chain of elements 
     }
 
     // put into table
@@ -233,11 +236,16 @@ static bool put(qhashtbl_t *tbl, const char *fullpath, const void *data)
         }
         memset((void *)obj, 0, sizeof(qhnobj_t));
 
-        if (tbl->slots[idx] != NULL) {
-            // insert at the beginning
-            obj->next = tbl->slots[idx];
+        if (slot->tail != NULL) {
+            // connect old tail to this new tail 
+            slot->tail->next = obj;
+        }
+        if (slot->head == NULL) {
+            // insert as very first element
+            slot->head = obj;
         }
-        tbl->slots[idx] = obj;
+        slot->tail = obj;
+        obj->next = 0;
 
         // increase counter
         tbl->num++;
@@ -267,69 +275,24 @@ static bool put(qhashtbl_t *tbl, const char *fullpath, const void *data)
     return true;
 }
 
+static bool put(qhashtbl_t *tbl, const char *fullpath, const void *data)
+{
+    if (!fullpath)
+        return false;
+
+    int keylen = strlen(fullpath);
+    char *key = strdup (fullpath);
+
+    return qhput (tbl, key, keylen, data);
+}
+
 static bool put2(qhashtbl_t *tbl, const char *path, const char *name, const void *data)
 {
     int keylen;
     char *key;
     genkey (path, name, &keylen, &key);
 
-    // get hash integer
-    uint32_t hash = qhashmurmur3_32(key, keylen);
-    int idx = hash % tbl->range;
-
-    //log_error ("qhastbl:put: key=[%s], keylen=%d hash=%d, idx=%d, d=%x\n", key, keylen, hash, idx, data);
-
-    // find existence key
-    qhnobj_t *obj;
-    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
-        if (obj->hash == hash && !strcmp(obj->key, key)) {
-            break;
-        }
-    }
-
-    // put into table
-    if (obj == NULL) {
-        // insert
-        obj = (qhnobj_t *)malloc(sizeof(qhnobj_t));
-        if (obj == NULL) {
-            free(key);
-            errno = ENOMEM;
-            return false;
-        }
-        memset((void *)obj, 0, sizeof(qhnobj_t));
-
-        if (tbl->slots[idx] != NULL) {
-            // insert at the beginning
-            obj->next = tbl->slots[idx];
-        }
-        tbl->slots[idx] = obj;
-
-        // increase counter
-        tbl->num++;
-
-        // set data
-        obj->hash  = hash;
-        obj->key   = key;
-        obj->value = (void *)data;
-
-    } else {
-        /* Do not do anything.
-         * Keep the first definition in place, because consider this example
-         * if we would replace the object here:
-         *  def NX
-         *  def A[NX] --> A's dimension is the first variable NX (a pointer to that)
-         *  def NX    --> hashtable stores this variable reference
-         *  def B[NX]
-         *  write NX  --> value is stored in the NX variable found in the hash table
-         *  write A   --> dimension found (valid first pointer) but value is not found
-         *                (stored in the second reference)
-         *  At this point, A's dimension variable is first NX, but the value of
-         *  write NX goes to the variable found here in the hash table.
-         */
-        free(key);
-    }
-
-    return true;
+    return qhput (tbl, key, keylen, data);
 }
 
 
@@ -362,20 +325,23 @@ static bool put2(qhashtbl_t *tbl, const char *path, const char *name, const void
  * @endcode
  *
  */
-static void *get(qhashtbl_t *tbl, const char *fullpath)
+static void *qhget(qhashtbl_t *tbl, char *key, int keylen)
 {
     // get hash integer
-    uint32_t hash = qhashmurmur3_32(fullpath, strlen(fullpath));
+    uint32_t hash = qhashmurmur3_32(key, keylen);
     int idx = hash % tbl->range;
+    tbl->ncalls_get++; // debug
 
     //log_error ("qhastbl:get: key=[%s], keylen=%d, hash=%d, idx=%d\n", fullpath, strlen(fullpath), hash, idx);
 
     // find key
+    qhslot_t *slot = &tbl->slots[idx];
     qhnobj_t *obj;
-    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
-        if (obj->hash == hash && !strcmp(obj->key, fullpath)) {
+    for (obj = slot->head; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, key)) {
             break;
         }
+        tbl->nwalks_get++; // debug: we walk one step in a chain of elements 
     }
 
     void *data = NULL;
@@ -388,62 +354,27 @@ static void *get(qhashtbl_t *tbl, const char *fullpath)
     return data;
 }
 
-/**
- * qhashtbl->get2(): Get a object from this table.
- *
- * @param tbl       qhashtbl_t container pointer.
- * @param name      key name.
- * @param size      if not NULL, oject size will be stored.
- * @param newmem    whether or not to allocate memory for the data.
- *
- * @return a pointer of data if the key is found, otherwise returns NULL.
- * @retval errno will be set in error condition.
- *  - ENOENT : No such key found.
- *  - EINVAL : Invalid argument.
- *  - ENOMEM : Memory allocation failure.
- *
- * @code
- *  qhashtbl_t *tbl = qHashtbl(1000);
- *  (...codes...)
- *
- *  // with newmem flag unset
- *  int size;
- *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, false);
- *
- *  // with newmem flag set
- *  int size;
- *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, true);
- *  if(obj != NULL) free(obj);
- * @endcode
- *
- */
+static void *get(qhashtbl_t *tbl, const char *fullpath)
+{
+    if (!fullpath)
+        return NULL;
+
+    int keylen = strlen(fullpath);
+    char *key = strdup (fullpath);
+
+    void * data = qhget (tbl, key, keylen);
+    free (key);
+    return data;
+}
+
 static void *get2(qhashtbl_t *tbl, const char *path, const char *name)
 {
     int keylen;
     char *key;
     genkey (path, name, &keylen, &key);
 
-    // get hash integer
-    uint32_t hash = qhashmurmur3_32(key, keylen);
-    int idx = hash % tbl->range;
-
-    //log_error ("qhastbl:get: key=[%s], keylen=%d, hash=%d, idx=%d\n", key, keylen, hash, idx);
-
-    // find key
-    qhnobj_t *obj;
-    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
-        if (obj->hash == hash && !strcmp(obj->key, key)) {
-            break;
-        }
-    }
-
-    void *data = NULL;
-    if (obj != NULL) {
-        data = obj->value;
-    }
-
-    if (data == NULL) errno = ENOENT;
-    //log_error ("qhastbl:get: data=%x\n", data);
+    void * data = qhget (tbl, key, keylen);
+    free (key);
     return data;
 }
 
@@ -462,7 +393,7 @@ static void *get2(qhashtbl_t *tbl, const char *path, const char *name)
 static bool remove_(qhashtbl_t *tbl, const char *fullpath)
 {
     int keylen = strlen (fullpath);
-    char *key = fullpath;
+    const char *key = fullpath;
 
     // get hash integer
     uint32_t hash = qhashmurmur3_32(key, keylen);
@@ -472,13 +403,24 @@ static bool remove_(qhashtbl_t *tbl, const char *fullpath)
 
     // find key
     bool found = false;
+    qhslot_t *slot = &tbl->slots[idx];
     qhnobj_t *prev = NULL;
     qhnobj_t *obj;
-    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+    for (obj = slot->head; obj != NULL; obj = obj->next) {
         if (obj->hash == hash && !strcmp(obj->key, key)) {
-            // adjust link
-            if (prev == NULL) tbl->slots[idx] = obj->next;
-            else prev->next = obj->next;
+            // adjust links
+            if (prev == NULL) {
+                // remove as very first
+                slot->head = obj->next;
+            } else {
+                // remove otherwise
+                prev->next = obj->next;
+            }
+
+            if (obj == slot->tail) {
+                // this was last element: update tail
+                slot->tail = prev;
+            }
 
             // remove
             free(obj->key);
@@ -516,11 +458,12 @@ static int size(qhashtbl_t *tbl)
  */
 void clear(qhashtbl_t *tbl)
 {
+    if (!tbl) return;
+    //debug(tbl, stdout, 0);
     int idx;
+    qhnobj_t *obj;
     for (idx = 0; idx < tbl->range && tbl->num > 0; idx++) {
-        if (tbl->slots[idx] == NULL) continue;
-        qhnobj_t *obj = tbl->slots[idx];
-        tbl->slots[idx] = NULL;
+        obj = tbl->slots[idx].head;
         while (obj != NULL) {
             qhnobj_t *next = obj->next;
             free(obj->key);
@@ -528,6 +471,8 @@ void clear(qhashtbl_t *tbl)
             obj = next;
             tbl->num--;
         }
+        tbl->slots[idx].head = NULL;
+        tbl->slots[idx].tail = NULL;
     }
 }
 
@@ -545,12 +490,12 @@ void debug(qhashtbl_t *tbl, FILE *out, bool detailed)
     }
     int len, lenmin=1000000, lenmax=0;
 
-    qhnobj_t obj;
+    qhnobj_t *obj;
     int idx;
     for (idx = 0; idx < tbl->range && tbl->num > 0; idx++) {
         len = 0;
         if (detailed) fprintf(out, "[%d]:", idx);
-        qhnobj_t *obj = tbl->slots[idx];
+        obj = tbl->slots[idx].head;
         while (obj != NULL) {
             qhnobj_t *next = obj->next;
             if (detailed) fprintf(out, "(%s,%p)" , obj->key, obj->value);
@@ -561,10 +506,13 @@ void debug(qhashtbl_t *tbl, FILE *out, bool detailed)
         if (len < lenmin) lenmin = len;
         if (len > lenmax) lenmax = len;
     }
+    fprintf(out, "Hash table %p\n", tbl);
     fprintf(out, "Hash table size = %d\n", tbl->range);
     fprintf(out, "Number of elements = %d\n", tbl->num);
     fprintf(out, "Shortest collision list size = %d\n", lenmin);
     fprintf(out, "Longest  collision list size = %d\n", lenmax);
+    fprintf(out, "get() calls = %d, walks = %d\n", tbl->ncalls_get, tbl->nwalks_get);
+    fprintf(out, "put() calls = %d, walks = %d\n", tbl->ncalls_put, tbl->nwalks_put);
     fflush(out);
 }
 
@@ -576,6 +524,7 @@ void debug(qhashtbl_t *tbl, FILE *out, bool detailed)
  */
 void free_(qhashtbl_t *tbl)
 {
+    if (!tbl) return;
     clear(tbl);
     if (tbl->slots != NULL) free(tbl->slots);
     free(tbl);
@@ -613,7 +562,7 @@ uint32_t qhashmurmur3_32(const void *data, size_t nbytes)
 
     const int nblocks = nbytes / 4;
     const uint32_t *blocks = (const uint32_t *)(data);
-    const uint8_t *tail = (const uint8_t *)(data + (nblocks * 4));
+    const uint8_t *tail = (const uint8_t *)data + (nblocks * 4);
 
     uint32_t h = 0;
 
diff --git a/src/core/qhashtbl.h b/src/core/qhashtbl.h
index a7a0be8..83777c6 100644
--- a/src/core/qhashtbl.h
+++ b/src/core/qhashtbl.h
@@ -41,6 +41,7 @@ extern "C" {
 
 
 typedef struct qhnobj_s qhnobj_t;  
+typedef struct qhslot_s qhslot_t;  
 typedef struct qhashtbl_s qhashtbl_t;
 
 struct qhnobj_s {
@@ -50,6 +51,12 @@ struct qhnobj_s {
     qhnobj_t *next;    /*!< for chaining next collision object */
 };
 
+// Head node in hash table 
+struct qhslot_s {
+    qhnobj_t *head;    /*!< The first collision object for gets */
+    qhnobj_t *tail;    /*!< The last collision object for puts */
+};
+
 struct qhashtbl_s {
     /* capsulated member functions */
     bool  (*put)    (qhashtbl_t *tbl, const char *fullpath, const void *data);
@@ -67,7 +74,13 @@ struct qhashtbl_s {
     /* private variables - do not access directly */
     int num;         /*!< number of objects in this table */
     int range;       /*!< hash range, vertical number of slots */
-    qhnobj_t **slots;   /*!< slot pointer container */
+    qhslot_t *slots; /*!< slot head node */
+
+    /* private debug variables */
+    int ncalls_get; // number of calls to get()
+    int nwalks_get; // number of walking steps in hash list in get()
+    int ncalls_put; // number of calls to put()
+    int nwalks_put; // number of walking steps in hash list in put()
 };
 
 qhashtbl_t* qhashtbl(int range);
diff --git a/src/core/transforms/adios_patchdata.c b/src/core/transforms/adios_patchdata.c
index aee7f70..75c5486 100644
--- a/src/core/transforms/adios_patchdata.c
+++ b/src/core/transforms/adios_patchdata.c
@@ -24,11 +24,14 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <stdbool.h>
+#include <string.h>
 #include <assert.h>
 
 #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"
 
@@ -50,7 +53,7 @@ inline static uint64_t adios_patch_data_bb_to_bb(void *dst, uint64_t dst_ragged_
     uint64_t volume;
 
     // Intersect the two bounding boxes
-    const ADIOS_SELECTION *inter_sel = adios_selection_intersect_bb_bb(dst_bb, src_bb);
+    ADIOS_SELECTION *inter_sel = adios_selection_intersect_bb_bb(dst_bb, src_bb);
 
     // If there is no intersection, stop now, nothing to do
     if (!inter_sel)
diff --git a/src/core/transforms/adios_transforms_common.c b/src/core/transforms/adios_transforms_common.c
index f362f61..62624b6 100644
--- a/src/core/transforms/adios_transforms_common.c
+++ b/src/core/transforms/adios_transforms_common.c
@@ -141,6 +141,7 @@
 #include "adios_internals.h"
 #include "adios_endianness.h"
 #include "adios_logger.h"
+#include "bp_utils.h"
 #include "core/common_adios.h"
 
 #include "adios_transforms_common.h"
@@ -214,7 +215,7 @@ uint64_t adios_transform_get_var_transformed_size(const struct adios_index_var_s
     int dim;
     uint64_t size = 1;
 
-    int is_global;
+    //int is_global;
     uint64_t *ldims, *gdims, *offsets;
 
     assert(var);
@@ -225,7 +226,7 @@ uint64_t adios_transform_get_var_transformed_size(const struct adios_index_var_s
     ldims = malloc(sizeof(uint64_t) * dims->count);
     gdims = malloc(sizeof(uint64_t) * dims->count);
     offsets = malloc(sizeof(uint64_t) * dims->count);
-    is_global = bp_get_dimension_generic_notime(dims, ldims, gdims, offsets, 0);
+    //is_global = bp_get_dimension_generic_notime(dims, ldims, gdims, offsets, 0);
     free(gdims);
     free(offsets);
 
diff --git a/src/core/transforms/adios_transforms_datablock.c b/src/core/transforms/adios_transforms_datablock.c
index 10790a9..7474ec4 100644
--- a/src/core/transforms/adios_transforms_datablock.c
+++ b/src/core/transforms/adios_transforms_datablock.c
@@ -10,6 +10,7 @@
 
 #include "public/adios_error.h"
 #include "public/adios_types.h"
+#include "common_read.h"
 
 #include "transforms/adios_transforms_common.h"
 #include "transforms/adios_transforms_read.h"
@@ -76,7 +77,7 @@ void adios_datablock_free(adios_datablock **datablock_ptr, int free_data) {
     adios_datablock *datablock = *datablock_ptr;
     if (datablock) {
         if (datablock->bounds)
-            common_read_selection_delete(datablock->bounds);
+            common_read_selection_delete((ADIOS_SELECTION*)datablock->bounds);
         if (free_data)
             MYFREE(datablock->data);
     }
diff --git a/src/core/transforms/adios_transforms_hooks.c b/src/core/transforms/adios_transforms_hooks.c
index 14c2c77..9dbc087 100644
--- a/src/core/transforms/adios_transforms_hooks.c
+++ b/src/core/transforms/adios_transforms_hooks.c
@@ -28,6 +28,7 @@
 // General plugin info inspection
 //
 
+// Transform ID -> plugin info retrieval
 static adios_transform_plugin_info_t * find_plugin_info(enum ADIOS_TRANSFORM_TYPE transform_type) {
     int i;
     for (i = 0; i < num_adios_transform_types; i++)
@@ -58,22 +59,20 @@ const char * adios_transform_plugin_desc(enum ADIOS_TRANSFORM_TYPE transform_typ
 
 int adios_transform_plugin_num_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type) {
     adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
-    if (aliases) return aliases->xmlAliasCount;
-    else         return NULL;
+    if (aliases) return 1;
+    else         return 0;
 }
 
 const char ** adios_transform_plugin_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type) {
     adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
-    if (aliases) return aliases->xmlAliases;
+    if (aliases) return &aliases->xmlAlias;
     else         return NULL;
 }
 
 const char * adios_transform_plugin_primary_xml_alias(enum ADIOS_TRANSFORM_TYPE transform_type) {
     adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
-    if (aliases && aliases->xmlAliasCount > 0)
-        return aliases->xmlAliases[0];
-    else
-        return NULL;
+    if (aliases) return aliases->xmlAlias;
+    else         return NULL;
 }
 
 ////////////////////////////////////////
@@ -98,7 +97,7 @@ enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_uid(const char *uid) {
 }
 
 ////////////////////////////////////////
-// Transform XML alias<->id conversion
+// Transform XML alias -> Transform ID conversion
 ////////////////////////////////////////
 
 /*
@@ -108,36 +107,20 @@ enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_uid(const char *uid) {
  *         transform type
  */
 enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_xml_alias(const char *xml_alias) {
-    int i, j;
-    for (i = adios_transform_none; i < num_adios_transform_types; i++) {
-        const adios_transform_plugin_xml_aliases_t *aliasesForType = &ADIOS_TRANSFORM_METHOD_ALIASES[i];
-        for (j = 0; j < aliasesForType->xmlAliasCount; j++) {
-            if (strcasecmp(xml_alias, aliasesForType->xmlAliases[j]) == 0)
-                return aliasesForType->type;
+    enum ADIOS_TRANSFORM_TYPE plugin_type;
+	int j;
+    for (plugin_type = adios_transform_none; plugin_type < num_adios_transform_types; plugin_type++) {
+        const int naliases = adios_transform_plugin_num_xml_aliases(plugin_type);
+        const char **aliases = adios_transform_plugin_xml_aliases(plugin_type);
+
+        for (j = 0; j < naliases; j++) {
+            if (strcasecmp(xml_alias, aliases[j]) == 0)
+                return plugin_type;
         }
     }
     return adios_transform_unknown;
 }
 
-/*
- * @param transform_type a transform type
- * @return a name that can be used to refer to that transform type within
- *         the ADIOS XML file, or "" if transform_type is not valid.
- */
-const char * adios_transform_xml_alias_by_type(enum ADIOS_TRANSFORM_TYPE transform_type) {
-    int i;
-    for (i = adios_transform_none; i < num_adios_transform_types; i++) {
-        const adios_transform_plugin_xml_aliases_t *aliasesForType = &ADIOS_TRANSFORM_METHOD_ALIASES[i];
-        if (transform_type == aliasesForType->type) {
-            if (aliasesForType->xmlAliasCount == 0)
-                return "";
-            else
-                return aliasesForType->xmlAliases[0];
-        }
-    }
-    return "";
-}
-
 /////////////////////////////////////////
 // Other transform inspection functions
 /////////////////////////////////////////
diff --git a/src/core/transforms/adios_transforms_hooks.h b/src/core/transforms/adios_transforms_hooks.h
index 09be53d..6a0f827 100644
--- a/src/core/transforms/adios_transforms_hooks.h
+++ b/src/core/transforms/adios_transforms_hooks.h
@@ -33,13 +33,6 @@ enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_uid(const char *uid);
  */
 enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_xml_alias(const char *xml_alias);
 
-/*
- * @param transform_type a transform type
- * @return a name that can be used to refer to that transform type within
- *         the ADIOS XML file, or "" if transform_type is not valid.
- */
-const char * adios_transform_xml_alias_by_type(enum ADIOS_TRANSFORM_TYPE transform_type);
-
 // Other inspection functions
 
 int is_transform_type_valid(enum ADIOS_TRANSFORM_TYPE transform_type);
diff --git a/src/core/transforms/adios_transforms_hooks_read.c b/src/core/transforms/adios_transforms_hooks_read.c
index 23682b2..bb557ee 100644
--- a/src/core/transforms/adios_transforms_hooks_read.c
+++ b/src/core/transforms/adios_transforms_hooks_read.c
@@ -54,6 +54,15 @@ void adios_transform_read_init() {
     adios_transforms_initialized = 1;
 }
 
+/* return 0 if the method is not implemented (functions generated with DECLARE_TRANSFORM_READ_METHOD_UNIMPL, or 1 if the method is implemented */
+int adios_transform_is_implemented (enum ADIOS_TRANSFORM_TYPE transform_type)
+{
+    assert(is_transform_type_valid(transform_type));
+    if (transform_type == adios_transform_none)
+        return 1; // method "none" is implemented
+    return TRANSFORM_READ_METHODS[transform_type].transform_is_implemented();
+}
+
 adios_datablock * adios_transform_subrequest_completed(adios_transform_read_request *reqgroup,
                                                        adios_transform_pg_read_request *pg_reqgroup,
                                                        adios_transform_raw_read_request *completed_subreq) {
diff --git a/src/core/transforms/adios_transforms_hooks_read.h b/src/core/transforms/adios_transforms_hooks_read.h
index 2abf363..83a1e0f 100644
--- a/src/core/transforms/adios_transforms_hooks_read.h
+++ b/src/core/transforms/adios_transforms_hooks_read.h
@@ -41,6 +41,8 @@ adios_datablock * adios_transform_read_reqgroup_completed(adios_transform_read_r
 
 // Transform read method registry entry
 typedef struct {
+    int (*transform_is_implemented) (void);
+
     int (*transform_generate_read_subrequests)(
             adios_transform_read_request *reqgroup,
             adios_transform_pg_read_request *pg_reqgroup);
@@ -68,6 +70,7 @@ typedef struct {
 
 // Transform method function declarations
 #define DECLARE_TRANSFORM_READ_METHOD(tmethod)                            \
+    int adios_transform_##tmethod##_is_implemented (void);                \
     int adios_transform_##tmethod##_generate_read_subrequests(            \
             adios_transform_read_request *reqgroup,                       \
             adios_transform_pg_read_request *pg_reqgroup);                \
@@ -83,6 +86,7 @@ typedef struct {
 
 // Transform method function registration
 #define TRANSFORM_READ_METHOD_HOOK_LIST(tmethod) \
+    adios_transform_##tmethod##_is_implemented, \
     adios_transform_##tmethod##_generate_read_subrequests, \
     adios_transform_##tmethod##_subrequest_completed, \
     adios_transform_##tmethod##_pg_reqgroup_completed, \
@@ -99,6 +103,9 @@ typedef struct {
                 #tmethod, func);
 
 #define DECLARE_TRANSFORM_READ_METHOD_UNIMPL(tmethod)                     \
+    int adios_transform_##tmethod##_is_implemented (void) { \
+        return 0;                                                         \
+    }                                                                     \
     int adios_transform_##tmethod##_generate_read_subrequests(            \
             adios_transform_read_request *reqgroup,                    \
             adios_transform_pg_read_request *pg_reqgroup) {                    \
diff --git a/src/core/transforms/adios_transforms_hooks_write.c b/src/core/transforms/adios_transforms_hooks_write.c
index 3df91ee..6b7e03c 100644
--- a/src/core/transforms/adios_transforms_hooks_write.c
+++ b/src/core/transforms/adios_transforms_hooks_write.c
@@ -53,6 +53,7 @@ void adios_transform_init() {
 // Delegate functions
 
 uint16_t adios_transform_get_metadata_size(struct adios_transform_spec *transform_spec) {
+    if (!transform_spec) return 0;
     assert(transform_spec->transform_type >= adios_transform_none && transform_spec->transform_type < num_adios_transform_types);
     return TRANSFORM_WRITE_METHODS[transform_spec->transform_type].transform_get_metadata_size(transform_spec);
 }
diff --git a/src/core/transforms/adios_transforms_read.c b/src/core/transforms/adios_transforms_read.c
index b1b1b8d..0fad60b 100644
--- a/src/core/transforms/adios_transforms_read.c
+++ b/src/core/transforms/adios_transforms_read.c
@@ -2,6 +2,7 @@
 
 #include "adios_bp_v1.h"
 #include "adios_internals.h"
+#include "common_read.h"
 #include "public/adios_selection.h"
 #include "public/adios_error.h"
 #include "public/adios_types.h"
@@ -16,6 +17,7 @@
 #include "transforms/adios_transforms_hooks_read.h"
 #include "transforms/adios_transforms_read.h"
 #include "transforms/adios_transforms_util.h"
+#include "transforms/adios_patchdata.h"
 
 #define MYFREE(p) {free(p); (p)=NULL;}
 
@@ -135,8 +137,7 @@ adios_transform_read_request * adios_transform_generate_read_reqgroup(const ADIO
     // Declares
     adios_transform_read_request *new_reqgroup;
     int blockidx, timestep, timestep_blockidx;
-    int curblocks, start_blockidx, end_blockidx;
-    int intersects;
+    int start_blockidx, end_blockidx;
     ADIOS_VARBLOCK *raw_vb, *orig_vb;
 
     enum ADIOS_FLAG swap_endianness = (fp->endianness == get_system_endianness()) ? adios_flag_no : adios_flag_yes;
@@ -177,7 +178,7 @@ adios_transform_read_request * adios_transform_generate_read_reqgroup(const ADIO
     timestep = from_steps;
     timestep_blockidx = 0;
     while (blockidx != end_blockidx) { //for (blockidx = startblock_idx; blockidx != endblock_idx; blockidx++) {
-        const ADIOS_SELECTION *pg_bounds_sel;
+        ADIOS_SELECTION *pg_bounds_sel;
         ADIOS_SELECTION *pg_intersection_sel;
 
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
@@ -340,7 +341,6 @@ static int apply_datablock_to_result_and_free(adios_datablock *datablock,
 #endif
 
     adios_datablock_free(&datablock, 1);
-    //return intersects;
     return used_count != 0;
 }
 
@@ -351,10 +351,6 @@ static int apply_datablock_to_result_and_free(adios_datablock *datablock,
  */
 static ADIOS_VARCHUNK * apply_datablock_to_chunk_and_free(adios_datablock *result, adios_transform_read_request *reqgroup) {
     ADIOS_VARCHUNK *chunk;
-    uint64_t *inter_goffset;
-    uint64_t *inter_offset_within_result;
-    uint64_t *inter_dims;
-
     uint64_t chunk_buffer_size;
     ADIOS_SELECTION *inter_sel;
 
@@ -423,7 +419,7 @@ void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups
     adios_transform_read_request *reqgroup;
     adios_transform_pg_read_request *pg_reqgroup;
     adios_transform_raw_read_request *subreq;
-    adios_datablock *result, *tmp_result;
+    adios_datablock *result;
 
     // Find the subrequest that matches the VARCHUNK that was just read (if any)
     int found = adios_transform_read_request_list_match_chunk(*reqgroups_head, *chunk, 1, &reqgroup, &pg_reqgroup, &subreq);
diff --git a/src/core/transforms/adios_transforms_reqgroup.c b/src/core/transforms/adios_transforms_reqgroup.c
index a28ad69..6c4acb9 100644
--- a/src/core/transforms/adios_transforms_reqgroup.c
+++ b/src/core/transforms/adios_transforms_reqgroup.c
@@ -489,7 +489,7 @@ int adios_transform_read_request_list_match_chunk(const adios_transform_read_req
                                                   adios_transform_raw_read_request **matching_subreq) {
     int found;
     adios_transform_read_request *cur;
-    for (cur = reqgroup_head; cur; cur = cur->next) {
+    for (cur = (adios_transform_read_request *)reqgroup_head; cur; cur = cur->next) {
         found = adios_transform_read_request_match_chunk(cur, chunk, skip_completed, matching_pg_reqgroup, matching_subreq);
         if (found)
             break;
diff --git a/src/core/transforms/adios_transforms_specparse.c b/src/core/transforms/adios_transforms_specparse.c
index 8f097cd..6d6b213 100644
--- a/src/core/transforms/adios_transforms_specparse.c
+++ b/src/core/transforms/adios_transforms_specparse.c
@@ -7,8 +7,10 @@
 
 #include <stdlib.h>
 #include <stdint.h>
+#include <string.h>
 #include <assert.h>
 #include "core/transforms/adios_transforms_specparse.h"
+#include "core/transforms/adios_transforms_hooks.h"
 
 inline static char * strsplit(char *input, char split) {
     char *pos = strchr(input, split);
@@ -34,10 +36,15 @@ inline static int strcount(char *input, char chr) {
 #define CALLOC_ARRAY(var, count) ((var) = (__typeof__(var))calloc((count), sizeof(*var)))
 #define CALLOC_VAR(var) CALLOC_ARRAY(var, 1)
 
-struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str) {
+//struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str) {
+struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str, 
+                                                         struct adios_transform_spec *spec_in) 
+{
     //struct adios_transform_spec *spec = (struct adios_transform_spec *)malloc(sizeof(struct adios_transform_spec));
-    struct adios_transform_spec *spec;
-    MALLOC_VAR(spec);
+    struct adios_transform_spec *spec = spec_in;
+    if (!spec_in) {
+        MALLOC_VAR(spec);
+    }
 
     *spec = (struct adios_transform_spec){
         .transform_type = adios_transform_none,
diff --git a/src/core/transforms/adios_transforms_specparse.h b/src/core/transforms/adios_transforms_specparse.h
index 279555d..e983afa 100644
--- a/src/core/transforms/adios_transforms_specparse.h
+++ b/src/core/transforms/adios_transforms_specparse.h
@@ -31,9 +31,11 @@ struct adios_transform_spec {
  * Parses the transform spec string (i.e. transform="zlib:5"), returning a struct
  * describing the result
  * @param transform_spec_str the transform spec string
+ * @param pre-allocated struct to fill in; if null this func allocates the memory
  * @return the parsed transform spec
  */
-struct adios_transform_spec * adios_transform_parse_spec(const char *transform_spec_str);
+struct adios_transform_spec * adios_transform_parse_spec(const char *transform_spec_str,
+                                                         struct adios_transform_spec *spec_in);
 
 /*
  * Copies a transform spec struct, creating a new, independent instance
diff --git a/src/core/transforms/adios_transforms_write.c b/src/core/transforms/adios_transforms_write.c
index 438ca37..dc8853e 100644
--- a/src/core/transforms/adios_transforms_write.c
+++ b/src/core/transforms/adios_transforms_write.c
@@ -90,6 +90,7 @@ static struct adios_dimension_struct * new_dimension() {
 }
 
 // TODO: Delete this function when the new version is confirmed working (i.e., tests with FORTRAN writes and C reads, and vice versa, all work)
+#if 0
 static int find_time_dimension_old(struct adios_dimension_struct *dim, struct adios_dimension_struct **time_dim, enum ADIOS_FLAG fortran_order_flag) {
     struct adios_dimension_struct *cur_dim;
     int i;
@@ -119,6 +120,7 @@ static int find_time_dimension_old(struct adios_dimension_struct *dim, struct ad
     if (time_dim) *time_dim = 0;
     return -1;
 }
+#endif
 
 static int is_dimension_item_zero(struct adios_dimension_item_struct *dim_item) {
     return dim_item->rank == 0 && dim_item->var == NULL && dim_item->attr == NULL;
@@ -130,6 +132,8 @@ static int is_time_dimension(struct adios_dimension_struct *dim) {
            dim->local_offset.time_index == adios_flag_yes;
 }
 
+#if 0 
+// This function is not used anywhere
 static int has_time_dimension(struct adios_dimension_struct *dim, int fortran_dim_order) {
     int has_time = 0;
     struct adios_dimension_struct *first_dim = dim;
@@ -157,12 +161,14 @@ static int has_time_dimension(struct adios_dimension_struct *dim, int fortran_di
 
     return has_time;
 }
+#endif
 
 // TODO: Delete this once the replacement is working correctly
 // If there is a time dimension the final dimensions will look like this:
 //   local:  t  l1 l2 l3 (or l1 l2 l3 t if fortran order)
 //   global: g1 g2 g3 0
 //   offset: o1 o2 o3 0
+#if 0
 static void adios_transform_attach_byte_array_dimensions_old(struct adios_group_struct *grp, struct adios_var_struct *var) {
     int i, new_ndim, new_time_dim_pos;
     uint64_t ldims[3];
@@ -217,14 +223,15 @@ static void adios_transform_attach_byte_array_dimensions_old(struct adios_group_
         adios_append_dimension(&var->dimensions, new_dim);
     }
 }
+#endif
 
 // Attaches to the given variable new metadata defining a 1D local array of bytes.
-static void adios_transform_attach_byte_array_dimensions(struct adios_group_struct *grp, struct adios_var_struct *var) {
+static void adios_transform_attach_byte_array_dimensions(struct adios_var_struct *var) {
     int i;
 
-    const int fortran_dim_order = (grp->adios_host_language_fortran == adios_flag_yes);
-    const int orig_ndim = count_dimensions(var->pre_transform_dimensions);
-    const int orig_has_time = has_time_dimension(var->pre_transform_dimensions, fortran_dim_order);
+    //const int fortran_dim_order = (grp->adios_host_language_fortran == adios_flag_yes);
+    //const int orig_ndim = count_dimensions(var->pre_transform_dimensions);
+    //const int orig_has_time = has_time_dimension(var->pre_transform_dimensions, fortran_dim_order);
 
     //const int new_ndim = (orig_has_time ? 2 : 1); // 1D byte array, plus a time dimension if the original had one
     //const int new_has_time = orig_has_time;
@@ -249,7 +256,7 @@ static void adios_transform_attach_byte_array_dimensions(struct adios_group_stru
     }
 }
 
-static void adios_transform_convert_var_to_byte_array(struct adios_group_struct *grp, struct adios_var_struct *var) {
+static void adios_transform_convert_var_to_byte_array(struct adios_var_struct *var) {
     // Save old metadata
     var->pre_transform_type = var->type;
     var->pre_transform_dimensions = var->dimensions;
@@ -260,7 +267,7 @@ static void adios_transform_convert_var_to_byte_array(struct adios_group_struct
     var->dimensions = 0;
 
     // Attach the new dimension to the variable
-    adios_transform_attach_byte_array_dimensions(grp, var);
+    adios_transform_attach_byte_array_dimensions(var);
 }
 
 ////////////////////////////////////////
@@ -283,11 +290,11 @@ static int is_timed_scalar(const struct adios_var_struct *var) {
  * the given transform spec. Also handles error conditions, such as the variable
  * being a scalar (which disallows any data transform).
  */
-struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *orig_var_grp,
-                                                     struct adios_var_struct *orig_var,
+struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *orig_var,
                                                      struct adios_transform_spec *transform_spec) {
     // First detect error conditions that prevent the transform from being applied
 
+    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))) {
@@ -318,7 +325,7 @@ struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *
     // variable into a 1D byte array.
 
     // Convert variable to 1D byte array
-    adios_transform_convert_var_to_byte_array(orig_var_grp, orig_var);
+    adios_transform_convert_var_to_byte_array(orig_var);
     log_debug("Data Transforms layer: Converted variable %s into byte array internally\n", orig_var->name);
 
     // Allocate the transform-specific metadata buffer
@@ -336,14 +343,13 @@ struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *
 
 // NCSU ALACRITY-ADIOS - Compute the pre-transform size of a variable, in bytes
 // Precondition: var is a non-scalar that has been transformed (transform_type != none)
-uint64_t adios_transform_get_pre_transform_var_size(struct adios_group_struct *group, struct adios_var_struct *var) {
+uint64_t adios_transform_get_pre_transform_var_size(struct adios_var_struct *var) {
     assert(var->dimensions);
     assert(var->type != adios_string);
     assert(var->transform_type != adios_transform_none);
     return adios_get_type_size(var->pre_transform_type, NULL) *
            adios_get_dimension_space_size(var,
-                                          var->pre_transform_dimensions,
-                                          group);
+                                          var->pre_transform_dimensions);
 }
 
 static inline uint64_t generate_unique_block_id(const struct adios_file_struct * fd, const struct adios_var_struct *var) {
@@ -351,6 +357,7 @@ static inline uint64_t generate_unique_block_id(const struct adios_file_struct *
 }
 
 // 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;
@@ -393,6 +400,7 @@ static int adios_transform_store_transformed_length_old(struct adios_file_struct
 
     return 1;
 }
+#endif
 
 /*
  * Stores the given transformed data length (number of bytes) into the appropriate place
@@ -505,7 +513,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 = 0;
+    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;
@@ -538,7 +546,7 @@ static void adios_transform_dereference_dimensions_characteristic(struct adios_i
 static void dereference_dimension_item(struct adios_dimension_item_struct *dst_dim_item, const struct adios_dimension_item_struct *src_dim_item) {
     dst_dim_item->var = NULL;
     dst_dim_item->attr = NULL;
-    dst_dim_item->rank = adios_get_dim_value((struct adios_dimension_item *)src_dim_item);
+    dst_dim_item->rank = adios_get_dim_value((struct adios_dimension_item_struct *)src_dim_item);
     dst_dim_item->time_index = src_dim_item->time_index;
 }
 
diff --git a/src/core/transforms/adios_transforms_write.h b/src/core/transforms/adios_transforms_write.h
index d7a2a40..96ad624 100644
--- a/src/core/transforms/adios_transforms_write.h
+++ b/src/core/transforms/adios_transforms_write.h
@@ -15,11 +15,10 @@
 /*
  * Returns the pre-transform size, in bytes, of a variable. Note: only works on
  * "dimensioned" variables (i.e., not a scalar or a string).
- * @param group the ADIOS group of the variable
  * @param var the variable to examine
  * @return the pre-transform size, in bytes, of var
  */
-uint64_t adios_transform_get_pre_transform_var_size(struct adios_group_struct *group, struct adios_var_struct *var);
+uint64_t adios_transform_get_pre_transform_var_size(struct adios_var_struct *var);
 
 /*
  * Modifies the variable definition appropriately for the case that the variable
@@ -27,8 +26,7 @@ uint64_t adios_transform_get_pre_transform_var_size(struct adios_group_struct *g
  * the variable type to a byte array, storing the old dimension/type metadata,
  * and setting appropriate flag fields.
  */
-struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *orig_var_grp,
-                                                     struct adios_var_struct *orig_var,
+struct adios_var_struct * adios_transform_define_var(struct adios_var_struct *orig_var,
                                                      struct adios_transform_spec *transform_spec);
 
 /*
diff --git a/src/core/transforms/plugindetect/detect_plugin_infos.h b/src/core/transforms/plugindetect/detect_plugin_infos.h
index f8ede5f..c382523 100644
--- a/src/core/transforms/plugindetect/detect_plugin_infos.h
+++ b/src/core/transforms/plugindetect/detect_plugin_infos.h
@@ -31,7 +31,7 @@
 
 #define _ARRAYLEN(arr) (sizeof(arr)/sizeof(arr[0]))
 #define _PLUGIN_ALIASES_RECORD(TYPEID, XMLALIAS) \
-    { adios_transform_##TYPEID, 1, (const char *[]){ XMLALIAS } },
+    { adios_transform_##TYPEID, (const char *)(XMLALIAS) },
 
 //
 // Actual table building
@@ -44,7 +44,7 @@
         _PLUGIN_INFO_RECORD(TYPEID, UID, DESC)
 
 adios_transform_plugin_info_t ADIOS_TRANSFORM_METHOD_INFOS[] = {
-    { adios_transform_none, "none", "No data transform"},
+    REGISTER_TRANSFORM_PLUGIN(none, "none", "none", "No data transform")
 
     #include "transforms/transform_plugins.h" // Include rows based on the plugin register statements
 };
@@ -59,7 +59,8 @@ adios_transform_plugin_info_t ADIOS_TRANSFORM_METHOD_INFOS[] = {
         _PLUGIN_ALIASES_RECORD(TYPEID, XMLALIAS)
 
 adios_transform_plugin_xml_aliases_t ADIOS_TRANSFORM_METHOD_ALIASES[] = {
-    REGISTER_TRANSFORM_PLUGIN(none, "none", "none", "none")
+    REGISTER_TRANSFORM_PLUGIN(none, "none", "none", "No data transform")
+
     #include "transforms/transform_plugins.h" // Include rows based on the plugin register statements
 };
 
diff --git a/src/core/transforms/plugindetect/plugin_info_types.h b/src/core/transforms/plugindetect/plugin_info_types.h
index 13b24ba..8ca9cfd 100644
--- a/src/core/transforms/plugindetect/plugin_info_types.h
+++ b/src/core/transforms/plugindetect/plugin_info_types.h
@@ -17,8 +17,7 @@ typedef struct {
 typedef struct {
     enum ADIOS_TRANSFORM_TYPE type;
 
-    int xmlAliasCount;
-    const char **xmlAliases;
+    const char *xmlAlias;
 } adios_transform_plugin_xml_aliases_t;
 
 #endif /* PLUGIN_INFO_TYPES_H_ */
diff --git a/src/core/util.c b/src/core/util.c
index de41f9a..4f8ed54 100644
--- a/src/core/util.c
+++ b/src/core/util.c
@@ -7,9 +7,10 @@
 
 #include "../config.h"
 #include "core/util.h"
+#include "core/bp_utils.h"
+#include "core/adios_endianness.h"
 #include "core/adios_logger.h"
 
-
 /* Reverse the order in an array in place.
    use swapping from Fortran/column-major order to ADIOS-read-api/C/row-major order and back
 */
@@ -386,8 +387,94 @@ void free_selection (ADIOS_SELECTION * sel)
     free (sel);
 }
 
+int unique (uint32_t * nids, int size)
+{
+    int i, j, k;
+    uint32_t temp;
 
+    // sort the nids first
+    for (i = 1; i < size; i++)
+    {
+        for (j = 0; j < size - i; j++)
+        {
+            if (nids[j] > nids[j + 1])
+            {
+                temp = nids[j];
+                nids[j] = nids[j + 1];
+                nids[j + 1] = temp;
+            }
+        }
+    }
+ 
+    // remove duplicates
+    i = 0;
+    k = 0;
+    while (i < size)
+    {
+        nids[k] = nids[i];
 
+        j = i + 1;
+        while (j < size && nids[i] == nids[j])
+        {
+            j++;
+        }
+   
+        if (j < size)
+        {
+            k++;
+            i = j;            
+        }
+        else
+        {
+            break;
+        }
+    }
+
+    return k + 1;
+}
+
+uint32_t nid_atoi ()
+{
+    int name_len;
+    char * nid_str = malloc (MPI_MAX_PROCESSOR_NAME);
+    uint32_t nid;
+
+    MPI_Get_processor_name (nid_str, &name_len);
+
+    while (*nid_str != '\0' && (!isdigit (*nid_str) || *nid_str == '0'))
+    {
+        nid_str++;
+    }
+
+    if (*nid_str == '\0')
+    {
+        // report an error
+    }
+
+    nid = atoi (nid_str);
+    free (nid_str);
+
+    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)
+{
+    int size;
+    uint32_t my_nid;
+
+    my_nid = nid_atoi ();
+
+    MPI_Comm_size (comm, &size);
+    nids = (uint32_t *) malloc (size * 4);
+
+    MPI_Allgather (&my_nid, 1, MPI_INT,
+                   nids, 1, MPI_INT,
+                   comm);
+    
+    return unique (nids, size);
+}
 
 /*******************************************************
    Processing parameter lists
@@ -396,7 +483,7 @@ static char * remove_whitespace (char *start, char *end)
 {
     char *s = start;
     char *e = end;
-    int orig_len = (int) (e-s);
+    //int orig_len = (int) (e-s);
     int final_len;
     char *res;
     // remove front whitespace (but do not go far beyond the end)
diff --git a/src/core/util.h b/src/core/util.h
index 148d523..ebedfad 100644
--- a/src/core/util.h
+++ b/src/core/util.h
@@ -2,6 +2,7 @@
 #define UTIL_H_
 
 #include <stdint.h>
+#include "public/adios_mpi.h"
 #include "public/adios_types.h"
 #include "public/adios_selection.h"
 
@@ -47,6 +48,8 @@ void list_free_read_request (read_request * h);
 int list_get_length (read_request * h);
 ADIOS_SELECTION * copy_selection (const ADIOS_SELECTION * sel);
 void free_selection (ADIOS_SELECTION * sel);
+// This helper routine returns a vector of unique NID's
+int get_nids (MPI_Comm comm, uint32_t * nids);
 
 /*******************************************************
    Processing parameter lists
diff --git a/src/public/adios.h b/src/public/adios.h
index cfd68c1..c0caadc 100644
--- a/src/public/adios.h
+++ b/src/public/adios.h
@@ -8,10 +8,11 @@
 #ifndef ADIOS_H
 #define ADIOS_H
 
+#include <stdint.h>
+
 #include "adios_mpi.h"
 #include "adios_types.h"
 #include "adios_error.h"
-#include <stdint.h>
 
 // ADIOS - Adaptable IO System
 
@@ -117,6 +118,11 @@ int64_t adios_define_var (int64_t group_id,
                           const char * local_offsets
                          );
 
+// 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)
+int adios_set_transform (int64_t var_id, const char *transform_type_str);
+
 int adios_define_attribute (int64_t group, 
                             const char * name,
                             const char * path, 
@@ -145,7 +151,87 @@ int adios_write_byid (int64_t fd_p, int64_t id, void * var);
 
 void adios_timing_write_xml (int64_t fd_p, const char* filename);
 
-
+// no-xml schema API
+// Define adios schema version
+// The function implements the same as "schema version="1.1 ""in xml
+int adios_define_schema_version (int64_t group_id, char * schema_version);
+
+// Assign mesh to a variable
+// The function implements the same as "var name="Var1" mesh="meshname" " in xml 
+int adios_define_var_mesh(int64_t group_id, const char * varname, const char * meshname);
+
+// Define centering of the variable value onto the mesh, centering is "cell" or "point"
+int adios_define_var_centering(int64_t group_id, const char * varname, const char * centering);
+
+// Define a external file where mesh variables are written 
+int adios_define_mesh_file(int64_t group_id, char * name, char * file);
+
+// The time-­steps points to time variables using steps, starting from step 0
+int adios_define_var_timesteps (const char * timesteps, int64_t group_id, const char * name);
+
+// The time-­steps points to time variables using real time, starting from time 
+// Exactly like the time steps except with real numbers
+int adios_define_var_timescale (const char * timescale, int64_t group_id, const char * name);
+
+// Describe the padding pattern for output images
+// If this number is 4, then the time-steps for images will be padded with 0 up to 4 digit numbers
+int adios_define_var_timeseriesformat (const char * timeseries, int64_t group_id, const char * name);
+
+// Use the concept of start, stride and count in all dimensions of a variable to identify a subset of a dataset
+int adios_define_var_hyperslab (const char * hyperslab, int64_t group_id, const char * name);
+
+// Describe if the mesh changes over time, and the option is "yes" or "no" 
+int adios_define_mesh_timevarying (const char * timevarying, int64_t group_id, const char * name);
+
+// The time-­steps points to time variables using steps, starting from step 0
+int adios_define_mesh_timesteps (const char * timesteps, int64_t group_id, const char * name);
+
+// The time-­steps points to time variables using real time, starting from time 0
+int adios_define_mesh_timescale (const char * timescale, int64_t group_id, const char * name);
+
+// Represent an integer for padding and formatting output image files
+// If this number is 4, then the time-steps for images will be padded with 0 up to 4 digit number
+int adios_define_mesh_timeseriesformat (const char * timeseries, int64_t group_id, const char * name);
+
+// Indicates where (which ADIOS group) mesh variables are stored
+int adios_define_mesh_group (const char * group, int64_t group_id, const char * name);
+
+// Defines a uniform mesh
+// For not requried attributes in this function, please use 0 instead
+int adios_define_mesh_uniform (char * dimensions, 
+                               char * origin, 
+                               char * spacing, 
+                               char * maximum, 
+                               char * nspace,
+                               int64_t group_id,
+                               const char * name);
+
+// Defines a rectilinear mesh
+// For not requried attributes in this function, please use 0 instead
+int adios_define_mesh_rectilinear (char * dimensions, 
+                                   char * coordinates,
+                                   char * nspace,
+                                   int64_t group_id,
+                                   const char * name);
+
+// Defines a structured mesh
+// For not requried attributes in this function, please use 0 instead
+int adios_define_mesh_structured (char * dimensions, 
+                                  char * points,
+                                  char * nspace,
+                                  int64_t group_id,
+                                  const char * name);
+
+// Define an unstructured mesh
+// For not requried attributes in this function, please use 0 instead
+int adios_define_mesh_unstructured (char * points,
+                                    char * data, 
+                                    char * count, 
+                                    char * cell_type,
+                                    char * npoints,
+                                    char * nspace,
+                                    int64_t group_id,
+                                    const char * name);
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/public/adios_error.h b/src/public/adios_error.h
index be7f65d..a4a5c55 100644
--- a/src/public/adios_error.h
+++ b/src/public/adios_error.h
@@ -8,6 +8,10 @@
 #ifndef __ADIOS_ERROR_H_
 #define __ADIOS_ERROR_H_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 enum ADIOS_ERRCODES {
     err_no_error                        = 0,
     err_no_memory                       = -1,
@@ -92,6 +96,7 @@ enum ADIOS_ERRCODES {
     err_invalid_argument                = -140,
 
     // Mesh reading errors
+    err_mesh_file_missing                     = -146, // mesh file is missing
     err_no_matching_mesh_var                  = -147, // no mesh is associated to var
     err_mesh_missing                          = -148, // mesh is missing in meshlist
     err_mesh_name_attr_missing                = -149, // mesh attr is missing
@@ -140,7 +145,13 @@ enum ADIOS_ERRCODES {
     err_mesh_structured_missing_points        = -197, // points are not defined
     err_mesh_structured_invalid_num_points    = -198, // number of points is invalid
 
-    err_unspecified                           = -200
+    // Transform layer errors
+    err_invalid_transform_type                = -300, // unknown transform is requested 
+
+    // Miscellaneous
+    err_fgr                                   = -900, // FGR lib error
+
+    err_unspecified                           = -1000
 };
 
 void adios_error (enum ADIOS_ERRCODES errcode, char *fmt, ...);
@@ -148,4 +159,8 @@ void adios_error_at_line (enum ADIOS_ERRCODES errcode, const char* filename, uns
 
 const char* adios_get_last_errmsg (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/src/public/adios_read_v1.h b/src/public/adios_read_v1.h
index af561de..ac3f98b 100644
--- a/src/public/adios_read_v1.h
+++ b/src/public/adios_read_v1.h
@@ -13,12 +13,12 @@
 #ifndef __ADIOS_READ_V1_H__
 #define __ADIOS_READ_V1_H__
 
+#include <stdint.h>
+
 #include "adios_mpi.h"
 #include "adios_read_v1_defs.h"
 #include "adios_types.h"
 
-#include <stdint.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -285,6 +285,10 @@ const char * adios_type_to_string (enum ADIOS_DATATYPES type);
  */
 int adios_type_size(enum ADIOS_DATATYPES type, void *data);
 
+/** Test function to print basic info about the file to stdout */
+void adios_print_fileinfo (ADIOS_FILE *fp);
+void adios_print_groupinfo (ADIOS_GROUP *gp);
+
 #endif  /*__INCLUDED_FROM_FORTRAN_API__*/
 
 #ifdef __cplusplus
diff --git a/src/public/adios_read_v1_defs.h b/src/public/adios_read_v1_defs.h
index b5f4ab3..15e548c 100644
--- a/src/public/adios_read_v1_defs.h
+++ b/src/public/adios_read_v1_defs.h
@@ -49,6 +49,7 @@
 #define adios_get_attr_byid adios_get_attr_byid_v1
 #define adios_type_to_string adios_type_to_string_v1
 #define adios_type_size adios_type_size_v1
+#define adios_print_fileinfo adios_print_fileinfo_v1
 
 
 #define err_end_of_file err_end_of_stream
diff --git a/src/public/adios_read_v2.h b/src/public/adios_read_v2.h
index 9093a2a..95b60e6 100644
--- a/src/public/adios_read_v2.h
+++ b/src/public/adios_read_v2.h
@@ -11,22 +11,23 @@
 #ifndef __ADIOS_READ_VER2_H__
 #define __ADIOS_READ_VER2_H__
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <stdint.h>
 
 #include "adios_mpi.h"
 #include "adios_types.h"
 #include "adios_selection.h"
 #include "adios_schema.h"
-#include <stdint.h>
+#include "adios_read_v2_fwd.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /*************************/
 /* Types used in the API */
 /*************************/
 
-typedef struct {
+struct _ADIOS_FILE {
         uint64_t fh;                /* File handler                                                   */
         int      nvars;             /* Number of variables in all groups (with full path)             */
         char     ** var_namelist;   /* Variable names in a char* array                                */
@@ -48,9 +49,9 @@ typedef struct {
 
         /* Internals */
         void     * internal_data;   /* Data for internal use                                          */
-} ADIOS_FILE;
+};
 
-typedef struct {
+struct _ADIOS_VARSTAT {
         void     * min;            /* minimum value in an array variable, = value for a scalar       */
         void     * max;            /* maximum value of an array variable (over all steps)            */
         double   * avg;            /* average value of an array variable (over all steps)            */
@@ -81,14 +82,12 @@ typedef struct {
             uint32_t ** frequencies;
             uint32_t *  gfrequencies;
         } *histogram;
+};
 
-} ADIOS_VARSTAT;
-
-
-typedef struct {
+struct _ADIOS_VARBLOCK {
     uint64_t * start;      /* offset start point in global array ('ndim' elements)         */
     uint64_t * count;      /* local sizes in global array ('ndim' elements)                */
-} ADIOS_VARBLOCK;
+};
 
 enum var_centering
 {
@@ -96,12 +95,12 @@ enum var_centering
     cell = 2              // unstructured mesh cell centering
 };
 
-typedef struct {
+struct _ADIOS_VARMESH {
     int meshid;
     enum var_centering centering;
-} ADIOS_VARMESH;
+};
 
-typedef struct {
+struct _ADIOS_VARINFO {
         int        varid;           /* variable index (0..ADIOS_FILE.nvars-1)                         */
         enum ADIOS_DATATYPES type;  /* type of variable                                               */
         int        ndim;            /* number of dimensions, 0 for scalars                            */
@@ -124,10 +123,9 @@ typedef struct {
                                        It is an array of 'sum_nblocks' elements                       */
         ADIOS_VARMESH *meshinfo;    /* structure in this file,
                                        retrieved in separate call: adios_inq_var_meshinfo()          */ 
-} ADIOS_VARINFO;
-
+};
 
-typedef struct {
+struct _ADIOS_VARCHUNK {
         int                   varid;    /* variable index (0..ADIOS_FILE.nvars-1)              */
         enum ADIOS_DATATYPES  type;     /* type of variable                                    */
         // NCSU ALACRITY-ADIOS - Added timestep information into varchunks
@@ -136,7 +134,7 @@ typedef struct {
         ADIOS_SELECTION     * sel;      /* sub-selection of requested selection                */
         void                * data;     /* pointer to data, at next adios_read_check() memory 
                                            will likely be overwritten                          */
-} ADIOS_VARCHUNK;
+};
 
 /* The list of the available read methods */
 enum ADIOS_READ_METHOD {
@@ -377,6 +375,11 @@ int adios_inq_var_blockinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
 */
 ADIOS_MESH * adios_inq_mesh_byid (ADIOS_FILE *fp, int meshid);
 
+/** fill in the complete mesh structure if mesh struct is stored in external file  
+    call adios_inq_mesh_byid() first to determine if external file is NULL
+*/
+int adios_complete_meshinfo (ADIOS_FILE *datafile, ADIOS_FILE *meshfile, ADIOS_MESH *meshinfo);
+
 /** Free memory used by an ADIOS_MESH struct */
 void adios_free_meshinfo (ADIOS_MESH *meshinfo);
 
@@ -564,6 +567,9 @@ double adios_stat_cov (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
  */
 void adios_reset_dimension_order (ADIOS_FILE *fp, int is_fortran);
 
+/** Test function to print basic info about the file to stdout */
+void adios_print_fileinfo (ADIOS_FILE *fp);
+
 #endif  /*__INCLUDED_FROM_FORTRAN_API__*/
 
 #ifdef __cplusplus
diff --git a/src/public/adios_read_v2_fwd.h b/src/public/adios_read_v2_fwd.h
new file mode 100644
index 0000000..62f61b1
--- /dev/null
+++ b/src/public/adios_read_v2_fwd.h
@@ -0,0 +1,43 @@
+/*
+ * 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) 2014.  Kitware, Inc. All rights reserved.
+ */
+
+/**********************************************************************/
+/* Forward declarations of the C structs used in the read API.  This  */
+/* header can be directly copied and used in interface code to allow  */
+/* classes that use the ADIOS structures in their interface to be     */
+/* consumed with no direct knowledge of ADIOS.                        */
+/**********************************************************************/
+#ifndef __ADIOS_READ_V2_FWD_H__
+#define __ADIOS_READ_V2_FWD_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _ADIOS_FILE;
+typedef struct _ADIOS_FILE ADIOS_FILE;
+
+struct _ADIOS_VARSTAT;
+typedef struct _ADIOS_VARSTAT ADIOS_VARSTAT;
+
+struct _ADIOS_VARBLOCK;
+typedef struct _ADIOS_VARBLOCK ADIOS_VARBLOCK;
+
+struct _ADIOS_VARMESH;
+typedef struct _ADIOS_VARMESH ADIOS_VARMESH;
+
+struct _ADIOS_VARINFO;
+typedef struct _ADIOS_VARINFO ADIOS_VARINFO;
+
+struct _ADIOS_VARCHUNK;
+typedef struct _ADIOS_VARCHUNK ADIOS_VARCHUNK;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/src/public/adios_schema.h b/src/public/adios_schema.h
index 17f6891..d66d842 100644
--- a/src/public/adios_schema.h
+++ b/src/public/adios_schema.h
@@ -1,6 +1,10 @@
 #ifndef ADIOS_SCHEMA_H
 #define ADIOS_SCHEMA_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 enum ADIOS_MESH_TYPE
 {
      ADIOS_MESH_UNIFORM      = 1
@@ -64,6 +68,7 @@ typedef struct
 typedef struct {   //type returned by adios_inq_mesh for read method
     int id;
     char * name;
+    char * file_name; // 0 means mesh struct from the same file, otherwise mesh struct from externel file 
     int time_varying;           //0 means not time-varying, 1 means time-varying
     enum ADIOS_MESH_TYPE type;
     union
@@ -75,4 +80,8 @@ typedef struct {   //type returned by adios_inq_mesh for read method
     };
 } ADIOS_MESH;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/src/public/adios_types.h b/src/public/adios_types.h
index d5864de..4052901 100644
--- a/src/public/adios_types.h
+++ b/src/public/adios_types.h
@@ -8,6 +8,10 @@
 #ifndef ADIOS_TYPES_H
 #define ADIOS_TYPES_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* global defines needed for the type creation/setup functions */
 enum ADIOS_DATATYPES {adios_unknown = -1             /* (size) */
 
@@ -40,4 +44,8 @@ enum ADIOS_BUFFER_ALLOC_WHEN {ADIOS_BUFFER_ALLOC_UNKNOWN
                              ,ADIOS_BUFFER_ALLOC_LATER
                              };
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/src/public/mpidummy.h b/src/public/mpidummy.h
index f873ead..ae0cbaf 100644
--- a/src/public/mpidummy.h
+++ b/src/public/mpidummy.h
@@ -11,13 +11,16 @@
 /*
    A dummy MPI 'implementation' for the BP READ API, to have an MPI-free version of the API
 */
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <stdint.h>
 #include <stdio.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef int MPI_Comm;
 typedef uint64_t MPI_Status;
 typedef int MPI_File;
@@ -38,7 +41,7 @@ typedef int MPI_Fint;
 #define MPI_SEEK_CUR                SEEK_CUR
 #define MPI_SEEK_END                SEEK_END
 #define MPI_BYTE                    1          /* I need the size of the type here */
-#define MPI_INFO_NULL               NULL
+#define MPI_INFO_NULL               0
 
 #define MPI_COMM_NULL               0
 #define MPI_COMM_WORLD              1
@@ -53,6 +56,7 @@ typedef int MPI_Fint;
 
 #define MPI_SUM                     0
 
+#define MPI_MAX_PROCESSOR_NAME      32
 int MPI_Init(int *argc, char ***argv);
 int MPI_Finalize();
 int MPI_Initialized( int* flag ) ;
@@ -63,10 +67,19 @@ int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm
 int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm);
 int MPI_Comm_rank(MPI_Comm comm, int *rank);
 int MPI_Comm_size(MPI_Comm comm, int *size);
+int MPI_Comm_free(MPI_Comm *comm);
 MPI_Comm MPI_Comm_f2c(MPI_Fint comm);
 
 int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) ;
 int MPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm);
+int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype,
+                  void *recvbuf, int recvcount, MPI_Datatype recvtype,
+                  MPI_Comm comm);
+
+int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm);
+int MPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm);
+
+
 
 int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh);
 int MPI_File_close(MPI_File *fh);
@@ -78,6 +91,12 @@ int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count);
 int MPI_Error_string(int errorcode, char *string, int *resultlen);
 int MPI_Comm_split ( MPI_Comm comm, int color, int key, MPI_Comm *comm_out );
 
+int MPI_Get_processor_name (char *name, int *resultlen);
+
 double MPI_Wtime();
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/src/read/read_bp.c b/src/read/read_bp.c
index e9cc54f..8b1bd1d 100644
--- a/src/read/read_bp.c
+++ b/src/read/read_bp.c
@@ -97,7 +97,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r);
                   (struct BP_file_handle *) malloc (sizeof (struct BP_file_handle));        \
             new_h->file_index = v->characteristics[start_idx + idx].file_index;             \
             new_h->next = 0;                                                                \
-            if (ch = strrchr (fh->fname, '/'))                                              \
+            if ( (ch = strrchr (fh->fname, '/')) )                                          \
             {                                                                               \
                 name_no_path = (char *) malloc (strlen (ch + 1) + 1);                       \
                 strcpy (name_no_path, ch + 1);                                              \
@@ -191,7 +191,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r);
                   (struct BP_file_handle *) malloc (sizeof (struct BP_file_handle));        \
             new_h->file_index = v->characteristics[start_idx + idx].file_index;             \
             new_h->next = 0;                                                                \
-            if (ch = strrchr (fh->fname, '/'))                                              \
+            if ((ch = strrchr (fh->fname, '/')))                                              \
             {                                                                               \
                 name_no_path = (char *) malloc (strlen (ch + 1) + 1);                       \
                 strcpy (name_no_path, ch + 1);                                              \
@@ -271,7 +271,7 @@ static void release_step (ADIOS_FILE *fp)
  */
 static BP_FILE * open_file (const char * fname, MPI_Comm comm)
 {
-    int i, rank, file_ok;
+    int rank, file_ok;
     BP_FILE * fh;
 
     MPI_Comm_rank (comm, &rank);
@@ -348,10 +348,7 @@ void build_ADIOS_FILE_struct (ADIOS_FILE * fp, BP_FILE * fh)
 
 static int get_new_step (ADIOS_FILE * fp, const char * fname, MPI_Comm comm, int last_tidx, float timeout_sec)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
     BP_FILE * new_fh;
-    int err, i;
     double t1 = adios_gettime();
 
     log_debug ("enter get_new_step\n");
@@ -519,10 +516,10 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
     BP_FILE * fh;
     ADIOS_SELECTION * sel;
     struct adios_index_var_struct_v1 * v;
-    int i, j, k, t, time, nsteps;
+    int i, j, t, time, nsteps;
     int64_t start_idx, stop_idx, idx;
     int ndim, has_subfile, file_is_fortran;
-    uint64_t size, * dims, tmpcount;
+    uint64_t * dims, tmpcount;
     uint64_t ldims[32], gdims[32], offsets[32];
     uint64_t datasize, dset_stride,var_stride, total_size=0, items_read;
     uint64_t * count, * start;
@@ -532,7 +529,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
     MPI_Status status;
     ADIOS_VARCHUNK * chunk;
     struct adios_var_header_struct_v1 var_header;
-    struct adios_var_payload_struct_v1 var_payload;
+    //struct adios_var_payload_struct_v1 var_payload;
 
 //    log_debug ("read_var_bb()\n");
     p = (BP_PROC *) fp->fh;
@@ -793,7 +790,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                 {
                     /* The slowest changing dimensions should not be read completely but
                        we still need to read only one block */
-                    int isize;
+                    uint64_t isize;
                     uint64_t size_in_dset = 0;
                     uint64_t offset_in_dset = 0;
                     uint64_t offset_in_var = 0;
@@ -856,8 +853,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                 }
                 else
                 {
-                    uint64_t stride_offset = 0;
-                    int isize;
+                    uint64_t isize;
                     uint64_t size_in_dset[10];
                     uint64_t offset_in_dset[10];
                     uint64_t offset_in_var[10];
@@ -1064,10 +1060,10 @@ int adios_read_bp_finalize_method ()
 static int open_stream (ADIOS_FILE * fp, const char * fname,
                         MPI_Comm comm, float timeout_sec)
 {
-    int i, rank, ret;
+    int rank;
     struct BP_PROC * p;
     BP_FILE * fh;
-    int err, stay_in_poll_loop = 1;
+    int stay_in_poll_loop = 1;
     int file_ok = 0;
     double t1 = adios_gettime();
 
@@ -1207,7 +1203,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 i, rank;
+    int rank;
     struct BP_PROC * p;
     BP_FILE * fh;
     ADIOS_FILE * fp;
@@ -1515,7 +1511,8 @@ typedef struct {
 } ADIOS_VARSTAT;
 #endif
     int i, j, c, count = 1, timestep;
-    int size, sum_size, sum_type, nsteps, prev_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;
     ADIOS_VARSTAT * vs;
@@ -1526,26 +1523,41 @@ typedef struct {
     varinfo->statistics = vs = (ADIOS_VARSTAT *) malloc (sizeof (ADIOS_VARSTAT));
     assert (vs);
 
-    vs->min = 0;
-    vs->max = 0;
-    vs->avg = 0;
-    vs->std_dev = 0;
+    vs->min = NULL;
+    vs->max = NULL;
+    vs->avg = NULL;
+    vs->std_dev = NULL;
+
+    if (per_step_stat) {
+        vs->steps = (struct ADIOS_STAT_STEP *) malloc (sizeof (struct ADIOS_STAT_STEP));
+        assert (vs->steps);
+        vs->steps->mins = NULL;
+        vs->steps->maxs = NULL;
+        vs->steps->avgs = NULL;
+        vs->steps->std_devs = NULL;
+    } else {
+        vs->steps = NULL;
+    }
 
-    vs->steps = (struct ADIOS_STAT_STEP *) malloc (sizeof (struct ADIOS_STAT_STEP));
-    assert (vs->steps);
-    vs->steps->mins = 0;
-    vs->steps->maxs = 0;
-    vs->steps->avgs = 0;
-    vs->steps->std_devs = 0;
+    if (per_block_stat) {
+        vs->blocks = (struct ADIOS_STAT_BLOCK *) malloc (sizeof (struct ADIOS_STAT_BLOCK));
+        assert (vs->blocks);
+        vs->blocks->mins = NULL;
+        vs->blocks->maxs = NULL;
+        vs->blocks->avgs = NULL;
+        vs->blocks->std_devs = NULL;
+    } else {
+        vs->blocks = NULL;
+    }
 
     //TODO
-    vs->blocks = 0;
-    vs->histogram = 0;
+    vs->histogram = NULL;
 
-    uint64_t gcnt = 0, * cnts;
+    uint64_t gcnt = 0, *cnts=NULL, *bcnts = NULL;
 
     double *gsum = NULL, *gsum_square = NULL;
-    double **sums = NULL, **sum_squares = NULL;
+    double **sums = NULL,  **sum_squares = NULL;
+    double **bsums = NULL, **bsum_squares = NULL;
 
     int16_t map[32];
     memset (map, -1, sizeof(map));
@@ -1565,45 +1577,87 @@ typedef struct {
     }
 
     nsteps = varinfo->nsteps;
+    nb = varinfo->sum_nblocks;
 
     if (map[adios_statistic_min] != -1)
     {
-        MALLOC(vs->steps->mins, nsteps * sizeof(void *), "minimum per timestep");
-        for (i = 0; i < nsteps; i++)
-        {
-            vs->steps->mins[i] = 0;
+        if (per_step_stat) {
+            MALLOC(vs->steps->mins, nsteps * sizeof(void *), "minimum per timestep");
+            for (i = 0; i < nsteps; i++)
+            {
+                vs->steps->mins[i] = NULL;
+            }
+        }
+        if (per_block_stat) {
+            MALLOC(vs->blocks->mins, nb * sizeof(void *), "minimum per writeblock");
+            for (i = 0; i < nb; i++)
+            {
+                vs->blocks->mins[i] = NULL;
+            }
         }
     }
 
     if (map[adios_statistic_max] != -1)
     {
-        MALLOC(vs->steps->maxs, nsteps * sizeof(void *), "maximum per timestep");
-        for (i = 0; i < nsteps; i++)
-        {
-            vs->steps->maxs[i] = 0;
+        if (per_step_stat) {
+            MALLOC(vs->steps->maxs, nsteps * sizeof(void *), "maximum per timestep");
+            for (i = 0; i < nsteps; i++)
+            {
+                vs->steps->maxs[i] = NULL;
+            }
+        }
+        if (per_block_stat) {
+            MALLOC(vs->blocks->maxs, nb * sizeof(void *), "maximum per writeblock");
+            for (i = 0; i < nb; i++)
+            {
+                vs->blocks->maxs[i] = NULL;
+            }
         }
     }
 
     if (map[adios_statistic_sum] != -1)
     {
-        MALLOC(sums, nsteps * sizeof(double *), "summation per timestep");
-        MALLOC(vs->steps->avgs, nsteps * sizeof(double *), "average per timestep");
+        if (per_step_stat) {
+            MALLOC(sums, nsteps * sizeof(double *), "summation per timestep");
+            MALLOC(vs->steps->avgs, nsteps * sizeof(double *), "average per timestep");
 
-        for (i = 0; i < nsteps; i++)
-        {
-            sums[i] = vs->steps->avgs[i] = 0;
+            for (i = 0; i < nsteps; i++)
+            {
+                sums[i] = vs->steps->avgs[i] = NULL;
+            }
+            CALLOC(cnts, nsteps, sizeof(uint64_t), "count of elements per timestep");
+        }
+        if (per_block_stat) {
+            MALLOC(bsums, nb * sizeof(double *), "summation per writeblock");
+            MALLOC(vs->blocks->avgs, nb * sizeof(double *), "average per writeblock");
+
+            for (i = 0; i < nb; i++)
+            {
+                bsums[i] = vs->blocks->avgs[i] = NULL;
+            }
+            CALLOC(bcnts, nb, sizeof(uint64_t), "count of elements per writeblock");
         }
-        CALLOC(cnts, nsteps, sizeof(uint64_t), "count of elements per timestep");
     }
 
     if (map[adios_statistic_sum_square] != -1)
     {
-        MALLOC(sum_squares, nsteps * sizeof(double *), "summation per timestep");
-        MALLOC(vs->steps->std_devs, nsteps * sizeof(double *), "standard deviation per timestep");
+        if (per_step_stat) {
+            MALLOC(sum_squares, nsteps * sizeof(double *), "summation per timestep");
+            MALLOC(vs->steps->std_devs, nsteps * sizeof(double *), "standard deviation per timestep");
 
-        for (i = 0; i < nsteps; i++)
-        {
-            vs->steps->std_devs[i] = sum_squares[i] = 0;
+            for (i = 0; i < nsteps; i++)
+            {
+                vs->steps->std_devs[i] = sum_squares[i] = NULL;
+            }
+        }
+        if (per_block_stat) {
+            MALLOC(bsum_squares, nb * sizeof(double *), "summation per writeblock");
+            MALLOC(vs->blocks->std_devs, nb * sizeof(double *), "standard deviation per writeblock");
+
+            for (i = 0; i < nb; i++)
+            {
+                vs->blocks->std_devs[i] = bsum_squares[i] = NULL;
+            }
         }
     }
 /*
@@ -1685,35 +1739,43 @@ typedef struct {
                 for (c = 0; c < count; c ++)
                     data[c] = bp_value_to_double((enum ADIOS_DATATYPES)type, stats[c][map[adios_statistic_min]].data);
 
-                if(!vs->min)
-                {
+                if(!vs->min) {
                     MALLOC (vs->min, count * size, "global minimum")
                     for (c = 0; c < count; c ++)
                            ((double * ) vs->min)[c] = data[c];
 
-                }
-                else
-                {
+                } else {
                     for (c = 0; c < count; c ++)
                         if (data[c] < ((double *) vs->min)[c])
                                ((double * ) vs->min)[c] = data[c];
                 }
 
-                if(!vs->steps->mins[timestep])
-                {
-                    MALLOC (vs->steps->mins[timestep], count * size, "minimum per timestep")
-                    for (c = 0; c < count; c ++)
-                    {
-                        ((double **) vs->steps->mins)[timestep][c] = data[c];
+                if (per_step_stat) {
+                    if(!vs->steps->mins[timestep]) {
+                        MALLOC (vs->steps->mins[timestep], count * size, "minimum per timestep")
+                        for (c = 0; c < count; c ++) {
+                            ((double **) vs->steps->mins)[timestep][c] = data[c];
+                        }
+                    } else {
+                        for (c = 0; c < count; c ++) {
+                            if (data[c] < ((double **) vs->steps->mins)[timestep][c]) {
+                                ((double **) vs->steps->mins)[timestep][c] = data[c];
+                            }
+                        }
                     }
                 }
-                else
-                {
-                    for (c = 0; c < count; c ++)
-                    {
-                        if (data[c] < ((double **) vs->steps->mins)[timestep][c])
-                        {
-                            ((double **) vs->steps->mins)[timestep][c] = data[c];
+
+                if (per_block_stat) {
+                    if(!vs->blocks->mins[i]) {
+                        MALLOC (vs->blocks->mins[i], count * size, "minimum per writeblock")
+                        for (c = 0; c < count; c ++) {
+                            ((double **) vs->blocks->mins)[i][c] = data[c];
+                        }
+                    } else {
+                        for (c = 0; c < count; c ++) {
+                            if (data[c] < ((double **) vs->blocks->mins)[i][c]) {
+                                ((double **) vs->blocks->mins)[i][c] = data[c];
+                            }
                         }
                     }
                 }
@@ -1736,15 +1798,30 @@ typedef struct {
                             ((double * ) vs->max)[c] = data[c];
                 }
 
-                if(!vs->steps->maxs[timestep]) {
-                    MALLOC (vs->steps->maxs[timestep], count * size, "minimum per timestep")
-                    for (c = 0; c < count; c ++)
-                        ((double **) vs->steps->maxs)[timestep][c] = data[c];
-
-                } else {
-                    for (c = 0; c < count; c ++)
-                        if (data[c] > ((double **) vs->steps->maxs)[timestep][c])
+                if (per_step_stat) {
+                    if(!vs->steps->maxs[timestep]) {
+                        MALLOC (vs->steps->maxs[timestep], count * size, "maximum per timestep")
+                        for (c = 0; c < count; c ++)
                             ((double **) vs->steps->maxs)[timestep][c] = data[c];
+
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            if (data[c] > ((double **) vs->steps->maxs)[timestep][c])
+                                ((double **) vs->steps->maxs)[timestep][c] = data[c];
+                    }
+                }
+
+                if (per_block_stat) {
+                    if(!vs->blocks->maxs[i]) {
+                        MALLOC (vs->blocks->maxs[i], count * size, "maximum per writeblock")
+                        for (c = 0; c < count; c ++)
+                            ((double **) vs->blocks->maxs)[i][c] = data[c];
+
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            if (data[c] > ((double **) vs->blocks->maxs)[i][c])
+                                ((double **) vs->blocks->maxs)[i][c] = data[c];
+                    }
                 }
             }
 
@@ -1757,21 +1834,35 @@ typedef struct {
                 if(!gsum) {
                     MALLOC(gsum, count * sum_size, "global summation")
                     for (c = 0; c < count; c ++)
-                           gsum[c] = data[c];
+                        gsum[c] = data[c];
 
                 } else {
                     for (c = 0; c < count; c ++)
                         gsum[c] = gsum[c] + data[c];
                 }
 
-                if(!sums[timestep]) {
-                    MALLOC(sums[timestep], count * sum_size, "summation per timestep")
-                    for (c = 0; c < count; c ++)
-                        sums[timestep][c] = data[c];
+                if (per_step_stat) {
+                    if(!sums[timestep]) {
+                        MALLOC(sums[timestep], count * sum_size, "summation per timestep")
+                        for (c = 0; c < count; c ++)
+                            sums[timestep][c] = data[c];
 
-                } else {
-                    for (c = 0; c < count; c ++)
-                        sums[timestep][c] = sums[timestep][c] + data[c];
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            sums[timestep][c] = sums[timestep][c] + data[c];
+                    }
+                }
+
+                if (per_block_stat) {
+                    if(!bsums[i]) {
+                        MALLOC(bsums[i], count * sum_size, "summation per writeblock")
+                        for (c = 0; c < count; c ++)
+                            bsums[i][c] = data[c];
+
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            bsums[i][c] = bsums[i][c] + data[c];
+                    }
                 }
             }
 
@@ -1788,42 +1879,87 @@ typedef struct {
 
                 } else {
                     for (c = 0; c < count; c ++)
-                           gsum_square[c] = gsum_square[c] + data[c];
+                        gsum_square[c] = gsum_square[c] + data[c];
                 }
 
-                if(!sum_squares[timestep]) {
-                    MALLOC(sum_squares[timestep], count * sum_size, "summation of square per timestep")
-                    for (c = 0; c < count; c ++)
-                        sum_squares[timestep][c] = data[c];
+                if (per_step_stat) {
+                    if(!sum_squares[timestep]) {
+                        MALLOC(sum_squares[timestep], count * sum_size, "summation of square per timestep")
+                        for (c = 0; c < count; c ++)
+                            sum_squares[timestep][c] = data[c];
 
-                } else {
-                    for (c = 0; c < count; c ++)
-                        sum_squares[timestep][c] = sum_squares[timestep][c] + data[c];
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            sum_squares[timestep][c] = sum_squares[timestep][c] + data[c];
+                    }
+                }
+
+                if (per_block_stat) {
+                    if(!bsum_squares[i]) {
+                        MALLOC(bsum_squares[i], count * sum_size, "summation of square per writeblock")
+                        for (c = 0; c < count; c ++)
+                            bsum_squares[i][c] = data[c];
+
+                    } else {
+                        for (c = 0; c < count; c ++)
+                            bsum_squares[i][c] = bsum_squares[i][c] + data[c];
+                    }
                 }
             }
 
             if (map[adios_statistic_cnt] != -1 && stats[0][map[adios_statistic_cnt]].data)
             {
-                cnts[timestep] += * ((uint32_t *) stats[0][map[adios_statistic_cnt]].data);
+                if (per_step_stat) {
+                    cnts[timestep] += * ((uint32_t *) stats[0][map[adios_statistic_cnt]].data);
+                }
+                if (per_block_stat) {
+                    bcnts[i] += * ((uint32_t *) stats[0][map[adios_statistic_cnt]].data);
+                }
                 gcnt += * (uint32_t *) stats[0][map[adios_statistic_cnt]].data;
             }
         }
 
-        if(vs->min && (map[adios_statistic_sum] != -1) && (map[adios_statistic_sum_square] != -1)) {
-            // min, max, summation exists only for arrays
-            // Calculate average / timestep
+        if (per_step_stat) {
+            if(vs->min && (map[adios_statistic_sum] != -1) && (map[adios_statistic_sum_square] != -1)) {
+                // min, max, summation exists only for arrays
+                // Calculate average / timestep
 
-            for(timestep = 0; timestep < nsteps; timestep ++) {
-                MALLOC(vs->steps->avgs[timestep], count * sum_size, "average per timestep")
-                for (c = 0; c < count; c ++)
-                    vs->steps->avgs[timestep][c] = sums[timestep][c] / cnts[timestep];
+                for(timestep = 0; timestep < nsteps; timestep ++) {
+                    MALLOC(vs->steps->avgs[timestep], count * sum_size, "average per timestep")
+                    for (c = 0; c < count; c ++)
+                        vs->steps->avgs[timestep][c] = sums[timestep][c] / cnts[timestep];
 
-                MALLOC(vs->steps->std_devs[timestep], count * sum_size, "standard deviation per timestep")
-                for (c = 0; c < count; c ++)
-                    vs->steps->std_devs[timestep][c] = sqrt((sum_squares[timestep][c] / cnts[timestep]) - (vs->steps->avgs[timestep][c] * vs->steps->avgs[timestep][c]));
+                    MALLOC(vs->steps->std_devs[timestep], count * sum_size, "standard deviation per timestep")
+                    for (c = 0; c < count; c ++)
+                        vs->steps->std_devs[timestep][c] = 
+                            sqrt((sum_squares[timestep][c] / cnts[timestep]) - 
+                            (vs->steps->avgs[timestep][c] * vs->steps->avgs[timestep][c]));
+
+                    free (sums[timestep]);
+                    free (sum_squares[timestep]);
+                }
+            }
+        }
+
+        // Calculate per-block average 
+        if (per_block_stat) {
+            if(vs->min && (map[adios_statistic_sum] != -1) && (map[adios_statistic_sum_square] != -1)) 
+            {
+                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]));
 
-                free (sums[timestep]);
-                free (sum_squares[timestep]);
+                    free (bsums[i]);
+                    free (bsum_squares[i]);
+                }
             }
         }
 
@@ -1831,20 +1967,20 @@ typedef struct {
         if(vs->min && gsum && (map[adios_statistic_sum] != -1) && (map[adios_statistic_sum_square] != -1)) {
             MALLOC(vs->avg, count * sum_size, "global average")
 
-            if(gcnt > 0)
-                for (c = 0; c < count; c ++)
-                    vs->avg[c] = gsum[c] / gcnt;
-            else
-                for (c = 0; c < count; c ++)
-                    vs->avg[c] = gsum[c];
+                if(gcnt > 0)
+                    for (c = 0; c < count; c ++)
+                        vs->avg[c] = gsum[c] / gcnt;
+                else
+                    for (c = 0; c < count; c ++)
+                        vs->avg[c] = gsum[c];
 
             MALLOC(vs->std_dev, count * sum_size, "global average")
-            if(vs->avg && gcnt > 0)
-                for (c = 0; c < count; c ++)
-                    vs->std_dev[c] = sqrt(gsum_square[c] / gcnt - (vs->avg[c] * vs->avg[c]));
-            else
-                for (c = 0; c < count; c ++)
-                    vs->std_dev[c] = 0;
+                if(vs->avg && gcnt > 0)
+                    for (c = 0; c < count; c ++)
+                        vs->std_dev[c] = sqrt(gsum_square[c] / gcnt - (vs->avg[c] * vs->avg[c]));
+                else
+                    for (c = 0; c < count; c ++)
+                        vs->std_dev[c] = 0;
         }
     }
     else
@@ -1869,7 +2005,6 @@ typedef struct {
             }
 
             struct adios_index_characteristics_stat_struct * stats = var_root->characteristics[i].stats[0];
-            struct adios_index_characteristics_hist_struct * hist = stats[map[adios_statistic_hist]].data;
 
             if (map[adios_statistic_finite] != -1 && (* ((uint8_t *) stats[map[adios_statistic_finite]].data) == 0))
                 continue;
@@ -1887,14 +2022,28 @@ typedef struct {
                     memcpy(vs->min, stats[map[adios_statistic_min]].data, size);
                 }
 
-                if(!vs->steps->mins[timestep])
-                {
-                    MALLOC (vs->steps->mins[timestep], size, "minimum per timestep")
-                    memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
+                if (per_step_stat) {
+                    if(!vs->steps->mins[timestep])
+                    {
+                        MALLOC (vs->steps->mins[timestep], size, "minimum per timestep")
+                        memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
+                    }
+                    else if (adios_lt(original_var_type, stats[map[adios_statistic_min]].data, vs->steps->mins[timestep]))
+                    {
+                        memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
+                    }
                 }
-                else if (adios_lt(original_var_type, stats[map[adios_statistic_min]].data, vs->steps->mins[timestep]))
-                {
-                    memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
+
+                if (per_block_stat) {
+                    if(!vs->blocks->mins[i])
+                    {
+                        MALLOC (vs->blocks->mins[i], size, "minimum per writeblock")
+                        memcpy(vs->blocks->mins[i], stats[map[adios_statistic_min]].data, size);
+                    }
+                    else if (adios_lt(original_var_type, stats[map[adios_statistic_min]].data, vs->blocks->mins[i]))
+                    {
+                        memcpy(vs->blocks->mins[i], stats[map[adios_statistic_min]].data, size);
+                    }
                 }
             }
 
@@ -1911,14 +2060,28 @@ typedef struct {
                     memcpy(vs->max, stats[map[adios_statistic_max]].data, size);
                 }
 
-                if(!vs->steps->maxs[timestep])
-                {
-                    MALLOC (vs->steps->maxs[timestep], size, "maximum per timestep")
-                    memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
+                if (per_step_stat) {
+                    if(!vs->steps->maxs[timestep])
+                    {
+                        MALLOC (vs->steps->maxs[timestep], size, "maximum per timestep")
+                        memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
+                    }
+                    else if (adios_lt(original_var_type, vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data))
+                    {
+                        memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
+                    }
                 }
-                else if (adios_lt(original_var_type, vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data))
-                {
-                    memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
+
+                if (per_block_stat) {
+                    if(!vs->blocks->maxs[i])
+                    {
+                        MALLOC (vs->blocks->maxs[i], size, "maximum per writeblock")
+                        memcpy(vs->blocks->maxs[i], stats[map[adios_statistic_max]].data, size);
+                    }
+                    else if (adios_lt(original_var_type, stats[map[adios_statistic_max]].data, vs->blocks->maxs[i]))
+                    {
+                        memcpy(vs->blocks->maxs[i], stats[map[adios_statistic_max]].data, size);
+                    }
                 }
             }
 
@@ -1934,14 +2097,28 @@ typedef struct {
                     *gsum = *gsum + * ((double *) stats[map[adios_statistic_sum]].data);
                 }
 
-                if(!sums[timestep])
-                {
-                    MALLOC(sums[timestep], sum_size, "summation per timestep")
-                    memcpy(sums[timestep], stats[map[adios_statistic_sum]].data, sum_size);
+                if (per_step_stat) {
+                    if(!sums[timestep])
+                    {
+                        MALLOC(sums[timestep], sum_size, "summation per timestep")
+                        memcpy(sums[timestep], stats[map[adios_statistic_sum]].data, sum_size);
+                    }
+                    else
+                    {
+                        *sums[timestep] = *sums[timestep] + * ((double *) stats[map[adios_statistic_sum]].data);
+                    }
                 }
-                else
-                {
-                    *sums[timestep] = *sums[timestep] + * ((double *) stats[map[adios_statistic_sum]].data);
+
+                if (per_block_stat) {
+                    if(!bsums[i])
+                    {
+                        MALLOC(bsums[i], sum_size, "summation per writeblock")
+                        memcpy(bsums[i], stats[map[adios_statistic_sum]].data, sum_size);
+                    }
+                    else
+                    {
+                        *bsums[i] = *bsums[i] + * ((double *) stats[map[adios_statistic_sum]].data);
+                    }
                 }
             }
 
@@ -1958,14 +2135,28 @@ typedef struct {
                     *gsum_square = *gsum_square + * ((double *) stats[map[adios_statistic_sum_square]].data);
                 }
 
-                if(!sum_squares[timestep])
-                {
-                    MALLOC(sum_squares[timestep], sum_size, "summation of square per timestep")
-                    memcpy(sum_squares[timestep], stats[map[adios_statistic_sum_square]].data, sum_size);
+                if (per_step_stat) {
+                    if(!sum_squares[timestep])
+                    {
+                        MALLOC(sum_squares[timestep], sum_size, "summation of square per timestep")
+                        memcpy(sum_squares[timestep], stats[map[adios_statistic_sum_square]].data, sum_size);
+                    }
+                    else
+                    {
+                        *sum_squares[timestep] = *sum_squares[timestep] + * ((double *) stats[map[adios_statistic_sum_square]].data);
+                    }
                 }
-                else
-                {
-                    *sum_squares[timestep] = *sum_squares[timestep] + * ((double *) stats[map[adios_statistic_sum_square]].data);
+
+                if (per_block_stat) {
+                    if(!bsum_squares[i])
+                    {
+                        MALLOC(bsum_squares[i], sum_size, "summation of square per writeblock")
+                        memcpy(bsum_squares[i], stats[map[adios_statistic_sum_square]].data, sum_size);
+                    }
+                    else
+                    {
+                        *bsum_squares[i] = *bsum_squares[i] + * ((double *) stats[map[adios_statistic_sum_square]].data);
+                    }
                 }
             }
 //TODO
@@ -1983,29 +2174,56 @@ typedef struct {
 */
             if (map[adios_statistic_cnt] != -1 && stats[map[adios_statistic_cnt]].data)
             {
-                cnts[timestep] += * (uint32_t *) stats[map[adios_statistic_cnt]].data;
+                if (per_step_stat) {
+                    cnts[timestep] += * (uint32_t *) stats[map[adios_statistic_cnt]].data;
+                }
+                if (per_block_stat) {
+                    bcnts[i] = * (uint32_t *) stats[map[adios_statistic_cnt]].data;
+                }
                 gcnt += * (uint32_t *) stats[map[adios_statistic_cnt]].data;
             }
         }
 
-        if(nsteps > 0 && vs->min
-           && (map[adios_statistic_sum] != -1)
-           && (map[adios_statistic_sum_square] != -1)
-          )
-        {
-            // min, max, summation exists only for arrays
-            // Calculate average / timestep
-            for(timestep = 0; timestep < nsteps; timestep ++)
+        if (per_step_stat) {
+            if(nsteps > 0 && vs->min
+                    && (map[adios_statistic_sum] != -1)
+                    && (map[adios_statistic_sum_square] != -1)
+              )
+            {
+                // min, max, summation exists only for arrays
+                // Calculate average / timestep
+                for(timestep = 0; timestep < nsteps; timestep ++)
+                {
+                    MALLOC(vs->steps->avgs[timestep], sum_size, "average per timestep")
+                    *(vs->steps->avgs[timestep]) = *(sums[timestep]) / cnts[timestep];
+
+                    MALLOC(vs->steps->std_devs[timestep], sum_size, "standard deviation per timestep")
+                    *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep]
+                                - ((*(vs->steps->avgs[timestep]) * (*(vs->steps->avgs[timestep])))));
+
+                    free (sums[timestep]);
+                    free (sum_squares[timestep]);
+                }
+            }
+        }
+
+        // Calculate per-block  average
+        if (per_block_stat) {
+            if(vs->min && (map[adios_statistic_sum] != -1) && (map[adios_statistic_sum_square] != -1))
             {
-                MALLOC(vs->steps->avgs[timestep], sum_size, "average per timestep")
-                *(vs->steps->avgs[timestep]) = *(sums[timestep]) / cnts[timestep];
+                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])))));
 
-                MALLOC(vs->steps->std_devs[timestep], sum_size, "standard deviation per timestep")
-                *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep]
-                             - ((*(vs->steps->avgs[timestep]) * (*(vs->steps->avgs[timestep])))));
+                    free (bsums[i]);
+                    free (bsum_squares[i]);
+                }
 
-                free (sums[timestep]);
-                free (sum_squares[timestep]);
             }
         }
 
@@ -2041,17 +2259,13 @@ typedef struct {
         vs->max = varinfo->value; // scalars have value but not max
     }
 
-    if (sums && gsum)
-    {
-        free (sums);
-        free (gsum);
-    }
+    if (sums) free(sums);
+    if (bsums) free(bsums);
+    if (gsum) free(gsum);
 
-    if (sum_squares && gsum_square)
-    {
-        free (sum_squares);
-        free (gsum_square);
-    }
+    if (sum_squares) free (sum_squares);
+    if (bsum_squares) free (bsum_squares);
+    if (gsum_square) free (gsum_square);
 
     return 0;
 }
@@ -2059,7 +2273,7 @@ typedef struct {
 // NCSU ALACRITY-ADIOS - Factored out VARBLOCK inquiry function to permit sourcing
 static ADIOS_VARBLOCK * inq_var_blockinfo(const ADIOS_FILE * fp, const ADIOS_VARINFO * varinfo, int use_pretransform_dimensions) {
     struct BP_PROC * p = (struct BP_PROC *) fp->fh;
-    int i, file_is_fortran, timedim;
+    int i, file_is_fortran;
     uint64_t * ldims, * gdims, * offsets;
     BP_FILE * fh;
     struct adios_index_var_struct_v1 * var_root;
@@ -2188,11 +2402,8 @@ ADIOS_TRANSINFO * adios_read_bp_inq_var_transinfo(const ADIOS_FILE *fp, const AD
 }
 
 // NCSU ALACRITY-ADIOS - Adding an inq function to get original (pre-transform) blockinfo for variables from storage
-int adios_read_bp_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
-    struct BP_PROC * p = (struct BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
-    struct adios_index_var_struct_v1 * var_root;
-
+int adios_read_bp_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) 
+{
     ti->orig_blockinfo = inq_var_blockinfo(fp, vi, 1); // 1 -> use original, pretransform dimensions
     return 0;
 }
@@ -2215,11 +2426,9 @@ int adios_read_bp_staged1_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const AD
 
 uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios_index_var_struct_v1 * v)
 {
-    BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
     ADIOS_SELECTION * sel = r->sel;
     uint64_t datasize = bp_get_type_size (v->type, "");
-    int i, time, pgidx, ndims;
+    int i, pgidx, ndims;
 
     if (sel->type == ADIOS_SELECTION_BOUNDINGBOX)
     {
@@ -2289,7 +2498,7 @@ int adios_read_bp_schedule_read_byid (const ADIOS_FILE * fp, const ADIOS_SELECTI
     read_request * r;
     ADIOS_SELECTION * nullsel = 0;
     struct adios_index_var_struct_v1 * v;
-    int i, type_size, ndim, ns, file_is_fortran, mapped_varid;
+    int i, ndim, ns, file_is_fortran, mapped_varid;
     uint64_t * dims = 0;
 
     assert (fp);
@@ -2396,6 +2605,8 @@ 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);
+        r->sel = NULL;
         free(r);
 
         common_read_free_chunk (chunk);
@@ -2411,7 +2622,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
     BP_FILE * fh = (BP_FILE *) p->fh;
-    read_request * newreq, * h = 0;
+    read_request * h = 0;
     ADIOS_SELECTION * sel = r->sel;
     struct adios_index_var_struct_v1 * v;
     int type_size, n_elements, ndim;
@@ -2442,7 +2653,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
         log_debug ("pos = ");
         for (i = 0; i < ndim; i++)
         {
-            log_debug_cont ("%lu ", pos[i]);
+            log_debug_cont ("%llu ", pos[i]);
         }
         log_debug_cont ("\n");
 
@@ -2479,7 +2690,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
         log_debug ("subbb = ");
         for (i = 0; i < ndim; i++)
         {
-            log_debug_cont ("%lu ", subbb[i]);
+            log_debug_cont ("%llu ", subbb[i]);
         }
         log_debug_cont ("\n");
 
@@ -2526,7 +2737,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
             log_debug ("bb: (");
             for (i = 0; i < ndim; i++)
             {
-                log_debug_cont ("%lu", newreq->sel->u.bb.start[i]);
+                log_debug_cont ("%llu", newreq->sel->u.bb.start[i]);
                 if (i != ndim - 1)
                 {
                     log_debug_cont (",");
@@ -2535,7 +2746,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
             log_debug_cont (") (");
             for (i = 0; i < ndim; i++)
             {
-                log_debug_cont ("%lu", newreq->sel->u.bb.start[i] + newreq->sel->u.bb.count[i] - 1);
+                log_debug_cont ("%llu", newreq->sel->u.bb.start[i] + newreq->sel->u.bb.count[i] - 1);
                 if (i != ndim - 1)
                 {
                     log_debug_cont (",");
@@ -2631,7 +2842,6 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
     BP_PROC * p;
     read_request * r;
     ADIOS_VARCHUNK * varchunk;
-    int type_size;
 /*
  *  RETURN:         0: all chunks have been returned previously,
  *                     no need to call again (chunk is NULL, too)
@@ -2673,7 +2883,7 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
         // memory is large enough to contain the data
         if (chunk_buffer_size >= p->local_read_request_list->datasize)
         {
-            log_debug ("adios_read_bp_check_reads(): memory is large enough to contain the data (%d)\n",
+            log_debug ("adios_read_bp_check_reads(): memory is large enough to contain the data (%llu)\n",
                        p->local_read_request_list->datasize);
             assert (p->local_read_request_list->datasize);
             p->b = realloc (p->b, p->local_read_request_list->datasize);
@@ -2698,7 +2908,7 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
         }
         else // memory is smaller than what it takes to read the entire thing in.
         {
-            log_debug ("adios_read_bp_check_reads(): memory is not large enough to contain the data (%d)\n",
+            log_debug ("adios_read_bp_check_reads(): memory is not large enough to contain the data (%llu)\n",
                        p->local_read_request_list->datasize);
             read_request * subreqs = split_req (fp, p->local_read_request_list, chunk_buffer_size);
             assert (subreqs);
@@ -2744,8 +2954,7 @@ 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, offset, count;
-    struct BP_GROUP * gh;
+    int i;
     BP_PROC * p = (BP_PROC *) fp->fh;
     BP_FILE * fh = (BP_FILE *) p->fh;
     struct adios_index_attribute_struct_v1 * attr_root;
@@ -2949,7 +3158,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
             ADIOS_VARCHUNK *vc;
             read_request * r;
             uint64_t start, count;
-            int status, varid = 0;
+            int varid = 0;
             v1 = fh->vars_root;
             while (v1 && v1 != var_root)
             {
@@ -3045,18 +3254,18 @@ 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, int **nvars_per_group, int **nattrs_per_group)
+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;
-    int i, j, k, offset;
+    int i, j, offset;
 
     p = (BP_PROC *) fp->fh;
     fh = (BP_FILE *) p->fh;
 
     * ngroups = fh->gvar_h->group_count;
 
-    alloc_namelist (group_namelist, fh->gvar_h->group_count);
+    *group_namelist = (char **) malloc (sizeof (char *) * fh->gvar_h->group_count);
     for (i = 0; i < fh->gvar_h->group_count; i++)
     {
         (*group_namelist)[i] = malloc (strlen (fh->gvar_h->namelist[i]) + 1);
@@ -3065,7 +3274,7 @@ void adios_read_bp_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***gr
         memcpy ((*group_namelist)[i], fh->gvar_h->namelist[i], strlen (fh->gvar_h->namelist[i]) + 1);
     }
 
-    * nvars_per_group = (int *) malloc (fh->gvar_h->group_count * sizeof (int));
+    * nvars_per_group = (uint32_t *) malloc (fh->gvar_h->group_count * sizeof (uint32_t));
     assert (* nvars_per_group);
 
     for (i = 0; i < fh->gvar_h->group_count; i++)
@@ -3073,7 +3282,7 @@ void adios_read_bp_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***gr
         (* nvars_per_group)[i] = fh->gvar_h->var_counts_per_group[i];
     }
 
-    * nattrs_per_group = (int *) malloc (fh->gattr_h->group_count * sizeof (int));
+    * nattrs_per_group = (uint32_t *) malloc (fh->gattr_h->group_count * sizeof (uint32_t));
     assert (* nattrs_per_group);
 
     for (i = 0; i < fh->gvar_h->group_count; i++)
@@ -3109,7 +3318,7 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
     BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     //struct adios_index_characteristic_struct_v1 ch;
-    int retval = 0, ndim, k, dummy, file_is_fortran;
+    int retval = 0, ndim, k;
     uint64_t gdims[32];
 
     p = (BP_PROC *) fp->fh;
@@ -3267,11 +3476,10 @@ 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;;
     struct adios_index_var_struct_v1 * v;
-    int i, j, k, t, varid, start_idx, stop_idx, idx, c;
-    int ndim, time, has_subfile, file_is_fortran;
-    uint64_t size, * dims;
-    uint64_t ldims[32], gdims[32], offsets[32], datasize;
-    int is_global = 0, size_of_type;
+    int j, varid, start_idx, idx;
+    int ndim, has_subfile;
+    uint64_t ldims[32], gdims[32], offsets[32];
+    int size_of_type;
     uint64_t slice_offset, slice_size;
     void * data;
     ADIOS_VARCHUNK * chunk;
@@ -3280,7 +3488,6 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
 
     adios_errno = 0;
 
-    file_is_fortran = is_fortran_file (fh);
     has_subfile = has_subfiles (fh);
     data = r->data;
     varid = r->varid; //varid = map_req_varid (fp, r->varid); // NCSU ALACRITY-ADIOS: Bugfix: r->varid has already been mapped
diff --git a/src/read/read_bp_staged.c b/src/read/read_bp_staged.c
index fac9664..11d207c 100644
--- a/src/read/read_bp_staged.c
+++ b/src/read/read_bp_staged.c
@@ -18,6 +18,7 @@
 #include <pthread.h>
 #include <assert.h>
 #include <errno.h>
+#include <sys/time.h>
 #include "public/adios_types.h"
 #include "public/adios_read.h"
 #include "public/adios_error.h"
@@ -178,7 +179,7 @@ static void _buffer_read (char * buffer, uint64_t * buffer_offset
 
 static int calc_data_size (BP_PROC * p)
 {
-    int i, size = 0;
+    int size = 0;
     read_request * h = p->local_read_request_list;
 
     // count
@@ -207,16 +208,15 @@ static void get_data_addr (const ADIOS_FILE * fp, int varid,
     BP_PROC * p = (BP_PROC *) fp->fh;
     BP_FILE * fh = (BP_FILE *) p->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;
-    int ndim, time, has_subfile, file_is_fortran;
-    uint64_t size, * dims = 0;
+    int j, idx, t;
+    int start_idx, stop_idx;
+    int ndim, time, file_is_fortran;
+    uint64_t * dims = 0;
     uint64_t ldims[32], gdims[32], offsets[32];
     uint64_t * start, * count;
     int nsteps, is_global = 0, flag;
 
     file_is_fortran = is_fortran_file (fh);
-    has_subfile = has_subfiles (fh);
     v = bp_find_var_byid (fh, varid);
 
     /* Get dimensions and flip if caller != writer language */
@@ -395,12 +395,10 @@ static void sort_read_requests (BP_PROC * p)
     pvt->split_read_request_list = n;
 }
 
+/*
 static void send_read_data1 (BP_PROC * p)
 {
     bp_proc_pvt_struct * pvt = (bp_proc_pvt_struct *) p->priv;
-    void * data = 0;
-    uint64_t ds;
-    int i, counter = 0;
     read_request * r = p->local_read_request_list;
     rr_pvt_struct * rr_pvt;
 
@@ -419,6 +417,7 @@ static void send_read_data1 (BP_PROC * p)
         r = r->next;
     }
 }
+*/
 
 static void send_read_data (BP_PROC * p)
 {
@@ -485,6 +484,7 @@ e group
     free (offsets);
 }
 
+/*
 static void get_read_data1 (BP_PROC * p)
 {
     bp_proc_pvt_struct * pvt = (bp_proc_pvt_struct *) p->priv;
@@ -504,6 +504,7 @@ static void get_read_data1 (BP_PROC * p)
         }
     }
 }
+*/
 
 /* Receive read data from aggregator */
 static void get_read_data (BP_PROC * p)
@@ -512,7 +513,6 @@ static void get_read_data (BP_PROC * p)
     char * b = 0, * recv_buff = 0;
     int * sizes = 0, * offsets = 0;
     int size = 0;
-    MPI_Status status;
     read_request * r = p->local_read_request_list;
 
     if (pvt->rank == pvt->aggregator_rank)
@@ -554,9 +554,7 @@ static void get_read_data (BP_PROC * p)
 
 static void parse_buffer (BP_PROC * p, char * b, int src)
 {
-    read_request * h = p->local_read_request_list;
-    int i, j, type, count, varid, ndims, size = calc_data_size (p);
-    void * buf;
+    int i, count;
     read_request * r;
     rr_pvt_struct * rr_pvt;
 
@@ -629,24 +627,21 @@ static read_request * split_read_requests (const ADIOS_FILE * fp, read_request *
     BP_PROC * p = (BP_PROC *) fp->fh;
     BP_FILE * fh = (BP_FILE *) p->fh;
     struct adios_index_var_struct_v1 * v;
-    int i, j, k, idx, t, varid, nsteps, time, dummy;
-    int start_time, stop_time, start_idx, stop_idx, f_idx;
-    int ndim, has_subfile, file_is_fortran;
-    uint64_t size, * dims = 0;
+    int i, j, idx, t, varid, nsteps, time, dummy;
+    int start_idx, stop_idx;
+    int ndim, file_is_fortran;
+    uint64_t * dims = 0;
     uint64_t ldims[32], gdims[32], offsets[32];
     uint64_t * start, * count;
     int is_global = 0, flag;
-    ADIOS_SELECTION * sel;
     read_request * h = 0;
     rr_pvt_struct * rr_pvt = (rr_pvt_struct *) r->priv;
     assert (rr_pvt);
 
     varid = r->varid;
-    sel = r->sel;
     start = r->sel->u.bb.start;
     count = r->sel->u.bb.count;
     file_is_fortran = is_fortran_file (fh);
-    has_subfile = has_subfiles (fh);
     v = bp_find_var_byid (fh, varid);
 
     bp_get_and_swap_dimensions (fh, v, file_is_fortran,
@@ -812,8 +807,6 @@ static read_request * split_read_requests (const ADIOS_FILE * fp, read_request *
             else if (hole_break == 0)
             {
                 int isize;
-                uint64_t size_in_dset = 0;
-                uint64_t offset_in_dset = 0;
 
                 isize = offsets[0] + ldims[0];
                 if (start[0] >= offsets[0])
@@ -838,7 +831,6 @@ static read_request * split_read_requests (const ADIOS_FILE * fp, read_request *
                     if (isize < start[0] + count[0])
                     {
                         n->sel->u.bb.count[0] = ldims[0];
-                    //    size_in_dset = ldims[0];
                     }
                     else
                     {
@@ -846,13 +838,11 @@ static read_request * split_read_requests (const ADIOS_FILE * fp, read_request *
                         n->sel->u.bb.count[0] = count[0] + start[0] - offsets[0];
                     }
                     n->sel->u.bb.start[0] = offsets[0];
-                    //offset_in_dset = 0;
                 }
 
             }
             else
             {
-                uint64_t stride_offset = 0;
                 int isize;
                 uint64_t size_in_dset[10];
                 uint64_t offset_in_dset[10];
@@ -957,8 +947,8 @@ static void read_chunk (const ADIOS_FILE * fp,
     MPI_Status status;
     int has_subfile;
 
-struct timeval t0, t1;
-gettimeofday (&t0, NULL);
+    //struct timeval t0, t1;
+    //gettimeofday (&t0, NULL);
 
     has_subfile = has_subfiles (fh);
 
@@ -978,7 +968,7 @@ gettimeofday (&t0, NULL);
 
             new_h->file_index = file_idx;
             new_h->next = 0;
-            if (ch = strrchr (fh->fname, '/'))
+            if ( (ch = strrchr (fh->fname, '/')))
             {
                 name_no_path = malloc (strlen (ch + 1) + 1);
                 strcpy (name_no_path, ch + 1);
@@ -1038,9 +1028,8 @@ gettimeofday (&t0, NULL);
 
     fh->b->offset = 0;
 
-    gettimeofday (&t1, NULL);
-
-//    printf ("read chunk time = %f \n", t1.tv_sec - t0.tv_sec + (double)(t1.tv_usec - t0.tv_usec)/1000000 );
+    //gettimeofday (&t1, NULL);
+    //printf ("read chunk time = %f \n", t1.tv_sec - t0.tv_sec + (double)(t1.tv_usec - t0.tv_usec)/1000000 );
 }
 
 /* 
@@ -1049,22 +1038,19 @@ The read request link list needs to be sorted beforehand
 static void do_read (const ADIOS_FILE * fp)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
     bp_proc_pvt_struct * pvt = (bp_proc_pvt_struct *) p->priv;
-    void * data = 0;
-    int i, counter = 0;
     int file_idx;
     uint64_t offset, payload_size;
-struct timeval t0;
-struct timeval t1;
-double t2, t3, t4, t5;
+    //struct timeval t0;
+    //struct timeval t1;
+    //double t2, t3, t4, t5;
 
     read_request * s = pvt->split_read_request_list, * f_start = s, * f_end = s;
     read_request * o_start = s, * o_end = s, * o_prev_end = 0, * parent = 0;
 
-    gettimeofday (&t0, NULL);
+    //gettimeofday (&t0, NULL);
 
-    t2 = MPI_Wtime();
+    //t2 = MPI_Wtime();
 
     while (f_start)
     {
@@ -1102,7 +1088,7 @@ double t2, t3, t4, t5;
 //printf ("o_start.offset = %llu\n", o_start->ra->offset);
 //printf ("o_prev_end.offset = %llu\n", o_prev_end->ra->offset);
 
-            t4 = MPI_Wtime ();
+            //t4 = MPI_Wtime ();
             // read a chunk from file into internal buffer
             read_chunk (fp, 
                         ((rr_pvt_struct *) o_start->priv)->file_idx, 
@@ -1111,7 +1097,7 @@ double t2, t3, t4, t5;
                          - ((rr_pvt_struct *) o_start->priv)->offset + payload_size
                        );
 
-            t5 = MPI_Wtime ();
+            //t5 = MPI_Wtime ();
 //    printf ("read chunk = %f \n", t5 - t4);
 
             s = o_start;
@@ -1131,11 +1117,11 @@ double t2, t3, t4, t5;
         f_start = f_end;
     }
 
-    gettimeofday (&t1, NULL);
-    t3 = MPI_Wtime ();
+    //gettimeofday (&t1, NULL);
+    //t3 = MPI_Wtime ();
 
-//    printf ("while time = %f \n", t1.tv_sec - t0.tv_sec + (double)(t1.tv_usec - t0.tv_usec)/1000000 );
-//    printf ("while time = %f \n", t3 - t2);
+    //printf ("while time = %f \n", t1.tv_sec - t0.tv_sec + (double)(t1.tv_usec - t0.tv_usec)/1000000 );
+    //printf ("while time = %f \n", t3 - t2);
 }
 
 /* r - the original read rquest
@@ -1153,8 +1139,8 @@ static void read_buffer (const ADIOS_FILE * fp,
     struct adios_index_var_struct_v1 * v;
     uint64_t * s_start, * s_count;
     uint64_t * start, * count;
-    int i, j, k, idx, t, time, ndim, dummy;
-    int varid, start_idx, stop_idx, has_subfile, file_is_fortran;
+    int i, j, idx, t, time, ndim, dummy;
+    int varid, start_idx, stop_idx, file_is_fortran;
     uint64_t ldims[MAX_DIMS], gdims[MAX_DIMS], offsets[MAX_DIMS];
     uint64_t datasize, dset_stride, var_stride, total_size = 0, items_read;
     int is_global = 0, size_unit, break_dim, idx_check1, idx_check2;
@@ -1169,7 +1155,6 @@ static void read_buffer (const ADIOS_FILE * fp,
     s_start = s->sel->u.bb.start;
     s_count = s->sel->u.bb.count;
     file_is_fortran = is_fortran_file (fh);
-    has_subfile = has_subfiles (fh);
     ndim = r->sel->u.bb.ndim;
     size_unit = bp_get_type_size (v->type,
                                   v->characteristics [0].value
@@ -1410,7 +1395,6 @@ static void read_buffer (const ADIOS_FILE * fp,
             }
             else
             {
-                uint64_t stride_offset = 0;
                 int isize;
                 uint64_t size_in_dset[MAX_DIMS];
                 uint64_t offset_in_dset[MAX_DIMS];
@@ -1530,7 +1514,6 @@ static void broadcast_fh_buffer (ADIOS_FILE * fp)
     BP_FILE * fh = (BP_FILE *) p->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;
-    struct adios_index_attribute_struct_v1 * attrs_root = fh->attrs_root;
     char * buffer;
     uint64_t buffer_size, buffer_offset = 0;
     int i, j, nsteps;
@@ -1554,9 +1537,9 @@ static void broadcast_fh_buffer (ADIOS_FILE * fp)
         _buffer_write (&buffer, &buffer_size, &buffer_offset,
                        &fh->mfooter.pgs_count, 8); //vars_count 
         _buffer_write (&buffer, &buffer_size, &buffer_offset, 
-                       &fh->mfooter.vars_count, 2); //vars_count 
+                       &fh->mfooter.vars_count, 4); //vars_count 
         _buffer_write (&buffer, &buffer_size, &buffer_offset,
-                       &fh->mfooter.attrs_count, 2); //attrs_count 
+                       &fh->mfooter.attrs_count, 4); //attrs_count 
 
         for (i = 0; i < fh->gvar_h->group_count; i++)
         {
@@ -1566,7 +1549,7 @@ static void broadcast_fh_buffer (ADIOS_FILE * fp)
             _buffer_write (&buffer, &buffer_size, &buffer_offset,
                            fh->gvar_h->namelist[i], len); // namelist
             _buffer_write (&buffer, &buffer_size, &buffer_offset, 
-                           &fh->gvar_h->var_counts_per_group[i], 2); // var_counts_per_group
+                           &fh->gvar_h->var_counts_per_group[i], sizeof(uint32_t)); // var_counts_per_group
         }
 
         _buffer_write (&buffer, &buffer_size, &buffer_offset,
@@ -1574,7 +1557,7 @@ static void broadcast_fh_buffer (ADIOS_FILE * fp)
         for (i = 0; i < fh->gattr_h->group_count; i++)
         {
             _buffer_write (&buffer, &buffer_size, &buffer_offset, 
-                           &fh->gattr_h->attr_counts_per_group[i], 2); // attr_counts_per_group
+                           &fh->gattr_h->attr_counts_per_group[i], sizeof(uint32_t)); // attr_counts_per_group
         }
 
         for (i = 0; i < fh->mfooter.vars_count; i++)
@@ -1626,9 +1609,8 @@ static void broadcast_fh_buffer (ADIOS_FILE * fp)
         vars_root = fh->vars_root;
         while (vars_root)
         {
-uint64_t bo = buffer_offset;
             _buffer_write (&buffer, &buffer_size, &buffer_offset, 
-                           &vars_root->id, 2); // id
+                           &vars_root->id, 4); // id
 
             len = strlen (vars_root->group_name);
             _buffer_write (&buffer, &buffer_size, &buffer_offset, 
@@ -1708,7 +1690,7 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
 
     if (!isAggregator (p))
     {
-        uint16_t len, group_count, var_counts_per_group;
+        uint16_t len; 
 
         buffer_offset = 0;
 
@@ -1722,11 +1704,11 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
 
         _buffer_read (buffer, &buffer_offset, &fh->gvar_h->group_count, 2); //group_count 
         _buffer_read (buffer, &buffer_offset, &fh->mfooter.pgs_count, 8); //pgs_count 
-        _buffer_read (buffer, &buffer_offset, &fh->mfooter.vars_count, 2); //vars_count 
-        _buffer_read (buffer, &buffer_offset, &fh->mfooter.attrs_count, 2); //attrs_count 
+        _buffer_read (buffer, &buffer_offset, &fh->mfooter.vars_count, 4); //vars_count 
+        _buffer_read (buffer, &buffer_offset, &fh->mfooter.attrs_count, 4); //attrs_count 
 
         fh->gvar_h->namelist = (char **) malloc (fh->gvar_h->group_count * sizeof (char *));
-        fh->gvar_h->var_counts_per_group = (uint16_t *) malloc (fh->gvar_h->group_count * 2);
+        fh->gvar_h->var_counts_per_group = (uint32_t *) malloc (fh->gvar_h->group_count * sizeof(uint32_t));
 
         for (i = 0; i < fh->gvar_h->group_count; i++)
         {
@@ -1735,7 +1717,7 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
             _buffer_read (buffer, &buffer_offset, fh->gvar_h->namelist[i], len); // namelist
             fh->gvar_h->namelist[i][len] = '\0';
 
-            _buffer_read (buffer, &buffer_offset, &fh->gvar_h->var_counts_per_group[i], 2); // var_counts_per_group
+            _buffer_read (buffer, &buffer_offset, &fh->gvar_h->var_counts_per_group[i], sizeof(uint32_t)); // var_counts_per_group
         }
 
         fh->gattr_h = (struct BP_GROUP_ATTR *) malloc (sizeof (struct BP_GROUP_ATTR));
@@ -1744,12 +1726,12 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
 
         _buffer_read (buffer, &buffer_offset, &fh->gattr_h->group_count, 2); //group_count 
 
-        fh->gattr_h->attr_counts_per_group = (uint16_t *) malloc (fh->gattr_h->group_count * 2);
+        fh->gattr_h->attr_counts_per_group = (uint32_t *) malloc (fh->gattr_h->group_count * sizeof(uint32_t));
         fh->gattr_h->namelist = fh->gvar_h->namelist;
 
         for (i = 0; i < fh->gattr_h->group_count; i++)
         {
-            _buffer_read (buffer, &buffer_offset, &fh->gattr_h->attr_counts_per_group[i], 2); // attr_counts_per_group
+            _buffer_read (buffer, &buffer_offset, &fh->gattr_h->attr_counts_per_group[i], sizeof(uint32_t)); // attr_counts_per_group
         }
 
         fh->gvar_h->var_namelist = (char **) malloc (fh->mfooter.vars_count * sizeof (char *));
@@ -1818,7 +1800,7 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
             assert (v);
             fh->vars_table[i] = v;
 
-            _buffer_read (buffer, &buffer_offset, &v->id, 2);
+            _buffer_read (buffer, &buffer_offset, &v->id, 4);
 
             _buffer_read (buffer, &buffer_offset, &len, 2);
             v->group_name = (char *) malloc (len + 1);
@@ -2020,7 +2002,6 @@ ADIOS_FILE * adios_read_bp_staged_open (const char * fname, MPI_Comm comm, enum
 static void free_proc_struct (BP_PROC * p)
 {
     bp_proc_pvt_struct * pvt = (bp_proc_pvt_struct *) p->priv;
-    read_request * h = p->local_read_request_list, * n;
 
     /* We need to free split_read_request_list cause
      * people might do two back-to-back sets of
@@ -2150,7 +2131,7 @@ static void init_read (BP_PROC * p)
 
 ADIOS_FILE * adios_read_bp_staged_open_file (const char * fname, MPI_Comm comm)
 {
-    int i, rank;
+    int rank;
     struct BP_PROC * p;
     BP_FILE * fh;
     ADIOS_FILE * fp;
@@ -2329,11 +2310,9 @@ int adios_read_bp_staged_schedule_read_byid (const ADIOS_FILE * fp,
 int adios_read_bp_staged_perform_reads (const ADIOS_FILE *fp, int blocking)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
-    BP_FILE * fh = (BP_FILE *) p->fh;
     bp_proc_pvt_struct * pvt = (bp_proc_pvt_struct *) p->priv;
     read_request * r, * h;
     int i, count, varid, ndims, total_size, size;
-    rr_pvt_struct * rrs;
     void * buf;
 
     // First populate the read request private struct for
@@ -2488,18 +2467,18 @@ void adios_read_bp_staged_reset_dimension_order (const ADIOS_FILE *fp, int is_fo
     adios_read_bp_reset_dimension_order (fp, is_fortran);
 }
 
-void adios_read_bp_staged_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group)
+void adios_read_bp_staged_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;
-    int i, j, k, offset;
+    int i, j, offset;
 
     p = (BP_PROC *) fp->fh;
     fh = (BP_FILE *) p->fh;
 
     * ngroups = fh->gvar_h->group_count;
 
-    alloc_namelist (group_namelist, fh->gvar_h->group_count);
+    *group_namelist = (char **) malloc (sizeof (char *) * fh->gvar_h->group_count);
     for (i = 0; i < fh->gvar_h->group_count; i++)
     {
         (*group_namelist)[i] = malloc (strlen (fh->gvar_h->namelist[i]) + 1);
@@ -2509,7 +2488,7 @@ void adios_read_bp_staged_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, cha
 namelist[i]) + 1);
     }
 
-    * nvars_per_group = (int *) malloc (fh->gvar_h->group_count * sizeof (int));
+    * nvars_per_group = (uint32_t *) malloc (fh->gvar_h->group_count * sizeof (uint32_t));
     assert (* nvars_per_group);
 
     for (i = 0; i < fh->gvar_h->group_count; i++)
@@ -2517,7 +2496,7 @@ namelist[i]) + 1);
         (* nvars_per_group)[i] = fh->gvar_h->var_counts_per_group[i];
     }
 
-    * nattrs_per_group = (int *) malloc (fh->gattr_h->group_count * sizeof (int));
+    * nattrs_per_group = (uint32_t *) malloc (fh->gattr_h->group_count * sizeof (uint32_t));
     assert (* nattrs_per_group);
 
     for (i = 0; i < fh->gvar_h->group_count; i++)
@@ -2551,7 +2530,7 @@ int adios_read_bp_staged_is_var_timed (const ADIOS_FILE *fp, int varid)
     BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
     struct adios_index_characteristic_struct_v1 ch;
-    int retval = 0, ndim, k, dummy, file_is_fortran;
+    int retval = 0, ndim, k;
     uint64_t gdims[32];
 
     p = (BP_PROC *) fp->fh;
diff --git a/src/read/read_bp_staged1.c b/src/read/read_bp_staged1.c
index 311e33b..9b55047 100644
--- a/src/read/read_bp_staged1.c
+++ b/src/read/read_bp_staged1.c
@@ -110,7 +110,7 @@ void adios_read_bp_staged1_reset_dimension_order (const ADIOS_FILE *fp, int is_f
 
 }
 
-void adios_read_bp_staged1_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group)
+void adios_read_bp_staged1_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist,  uint32_t **nvars_per_group,  uint32_t **nattrs_per_group)
 {
 
 }
@@ -3716,8 +3716,8 @@ static void broadcast_fh_buffer (struct BP_FILE * fh)
         _buffer_write (&buffer, &buffer_size, &buffer_offset, &p->num_aggregators, 4); // n_sf
         _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->gvar_h->group_count, 2); //group_count 
         _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->mfooter.pgs_count, 8); //vars_count 
-        _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->mfooter.vars_count, 2); //vars_count 
-        _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->mfooter.attrs_count, 2); //attrs_count 
+        _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->mfooter.vars_count, 4); //vars_count 
+        _buffer_write (&buffer, &buffer_size, &buffer_offset, &fh->mfooter.attrs_count, 4); //attrs_count 
 
         for (i = 0; i < fh->gvar_h->group_count; i++)
         {
@@ -3770,7 +3770,7 @@ static void broadcast_fh_buffer (struct BP_FILE * fh)
         vars_root = fh->vars_root;
         while (vars_root)
         {
-            _buffer_write (&buffer, &buffer_size, &buffer_offset, &vars_root->id, 2); // id
+            _buffer_write (&buffer, &buffer_size, &buffer_offset, &vars_root->id, 4); // id
 
             len = strlen (vars_root->group_name);
             _buffer_write (&buffer, &buffer_size, &buffer_offset, &len, 2); // group_name len
@@ -3853,8 +3853,8 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
 
         _buffer_read (buffer, &buffer_offset, &fh->gvar_h->group_count, 2); //group_count 
         _buffer_read (buffer, &buffer_offset, &fh->mfooter.pgs_count, 8); //pgs_count 
-        _buffer_read (buffer, &buffer_offset, &fh->mfooter.vars_count, 2); //vars_count 
-        _buffer_read (buffer, &buffer_offset, &fh->mfooter.attrs_count, 2); //attrs_count 
+        _buffer_read (buffer, &buffer_offset, &fh->mfooter.vars_count, 4); //vars_count 
+        _buffer_read (buffer, &buffer_offset, &fh->mfooter.attrs_count, 4); //attrs_count 
 
         fh->gvar_h->namelist = (char **) malloc (fh->gvar_h->group_count * sizeof (char *));
         fh->gvar_h->var_counts_per_group = (uint16_t *) malloc (fh->gvar_h->group_count * 2);
@@ -3946,7 +3946,7 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
             v = (struct adios_index_var_struct_v1 *) malloc (sizeof (struct adios_index_var_struct_v1));
             assert (v);
 uint64_t bo = buffer_offset;
-            _buffer_read (buffer, &buffer_offset, &v->id, 2);
+            _buffer_read (buffer, &buffer_offset, &v->id, 4);
 
             _buffer_read (buffer, &buffer_offset, &len, 2);
             v->group_name = (char *) malloc (len + 1);
diff --git a/src/read/read_dataspaces.c b/src/read/read_dataspaces.c
index 0e5e5b8..f198979 100644
--- a/src/read/read_dataspaces.c
+++ b/src/read/read_dataspaces.c
@@ -79,7 +79,7 @@ static inline double time_get()
 
 #define MAX_DS_NAMELEN 128
 /* Maximum number of different filenames allowed per process during the whole run */
-#define MAXNFILE 10 
+#define MAXNFILE 20 
 /*#define DATASPACES_NO_VERSIONING   define it at configure as -DDATASPACES_NO_VERSIONING in CFLAGS */
 /* Length of the 1D array representing the file in DataSpaces (contains metadata) */
 #define FILEINFO_BUFLEN 128
@@ -88,6 +88,7 @@ static int chunk_buffer_size = 1024*1024*16; // 16MB default size for reading in
 static char *chunk_buffer = 0;
 
 static int poll_interval_msec = 10; // how much to wait between polls when timeout is used
+static int enable_read_meta_collective = 1; // when enabled, meta data reading becomes collective. One reader process would fetch meta data from DataSpaces and broadcast to other procseses using MPI_Bcast
 
 struct dataspaces_fileversions_struct { // current opened version of each stream/file
     char      * filename[MAXNFILE];
@@ -102,7 +103,7 @@ struct dataspaces_var_struct { // describes one variable (of one group)
     enum ADIOS_DATATYPES   type;
     int                    hastime; // 0: no, 1:yes (time dimension is not stored in dataspaces)
     int                    ndims;
-    uint64_t               dims[3]; // we have max 3 dims in DataSpaces
+    uint64_t               dims[MAX_DS_NDIM]; // we have max MAX_DS_NDIM dims in DataSpaces
     void                 * value;
 };
 
@@ -144,7 +145,16 @@ struct dataspaces_data_struct { // accessible as fp->fh
 static int adios_read_dataspaces_get (const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank, 
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data);
+                                uint64_t * offset, uint64_t * readsize, uint64_t * dims, void * data);
+static int adios_read_dataspaces_get_meta(const char * varname, enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data);
+static int adios_read_dataspaces_get_meta_collective(const char * varname,
+                                enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm);
 
 static char* get_chunk_buffer()
 {
@@ -158,6 +168,20 @@ static char* get_chunk_buffer()
     return chunk_buffer;
 }
 
+static int get_meta(const char * varname,
+                    enum ADIOS_DATATYPES vartype,
+                    int version, int rank,
+                    int ndims, int is_fortran_ordering,
+                    uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm)
+{
+    if (enable_read_meta_collective) {
+        return adios_read_dataspaces_get_meta_collective(varname, vartype, version,
+            rank, ndims, is_fortran_ordering, offset, readsize, data, comm);
+    } else {
+        return adios_read_dataspaces_get_meta(varname, vartype, version, rank, ndims,
+            is_fortran_ordering, offset, readsize, data);
+    }
+}
 
 /* If init is used, we connect to DATASPACES here, otherwise we connect in fopen.
    If multiple fopen..fclose cycles are used, init/finalize must be used too to
@@ -206,7 +230,11 @@ int adios_read_dataspaces_init_method (MPI_Comm comm, PairStruct * params)
                 log_error ("Invalid 'poll_interval' parameter given to the DATASPACES "
                             "read method: '%s'\n", p->value);
             }
-        } else {
+        } else if (!strcasecmp (p->name, "disable_collective_read_meta")) {
+            errno = 0;
+            enable_read_meta_collective = 0;
+            log_debug("Set 'disable_collective_read_meta' for DATASPACES read method\n");
+        } else { 
             log_error ("Parameter name %s is not recognized by the DATASPACES read "
                         "method\n", p->name);
         }
@@ -221,7 +249,7 @@ int adios_read_dataspaces_init_method (MPI_Comm comm, PairStruct * params)
             appid = 2;
         log_debug("-- %s, rank %d: connect to dataspaces with nproc=%d and appid=%d\n", 
                     __func__, rank, nproc, appid);
-        err = dspaces_init(nproc, appid);
+        err = dspaces_init(nproc, appid, &comm, NULL);
         if (err < 0) {
             adios_error (err_connection_failed, "Failed to connect with DATASPACES\n");
             return err_connection_failed;
@@ -305,8 +333,8 @@ static int ds_unpack_group_info (ADIOS_FILE *fp, char * buf)
     int datasize;
     struct dataspaces_var_struct * vars;
     struct dataspaces_attr_struct * attrs;
-    uint64_t dims[3]; // all variables has 3 dimension values in the index 
-    int didx[3]; // dimension reordering 
+    uint64_t dims[MAX_DS_NDIM]; // all variables has MAX_DS_NDIM dimension values in the index 
+    int didx[MAX_DS_NDIM]; // dimension reordering 
     struct dataspaces_data_struct * ds = (struct dataspaces_data_struct *) fp->fh;
     int buf_len = ds->group_index_len;
     
@@ -403,7 +431,7 @@ static int ds_unpack_group_info (ADIOS_FILE *fp, char * buf)
         vars[i].ndims = *(int*)b; 
         b += sizeof(int);
         log_debug("        ndims w/o time = %d, b = %d\n", vars[i].ndims, b);
-        for (j=0; j < 3; j++) {
+        for (j=0; j < MAX_DS_NDIM; j++) {
             dims[j] = *(uint64_t*)b; 
             b += 8;
             log_debug("          unordered dim[%d] = %lld, b = %d\n", j, dims[j], b);
@@ -496,7 +524,9 @@ static int get_groupdata (ADIOS_FILE *fp)
 
     /* Try to get group metadata from DataSpaces. If it does not exists, we get an error, which means
        the data does not exist. */
-    int offset[] = {0,0,0}, readsize[3] = {ds->group_index_len,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    offset[0] = 0; readsize[0] = ds->group_index_len;
+    int ndim = 1;
     char * group_info_buf = malloc (ds->group_index_len);
     if (!group_info_buf) {
             adios_error (err_no_memory, 
@@ -507,10 +537,10 @@ static int get_groupdata (ADIOS_FILE *fp)
     int err;
     char ds_name[MAX_DS_NAMELEN];
     snprintf (ds_name, MAX_DS_NAMELEN, "GROUP@%s/%s",fp->path, ds->group_name);
-    log_debug("-- %s, rank %d: Get variable %s with size %d\n", __func__, 
+    log_debug("-- %s, rank %d: Get variable %s with size %lld\n", __func__, 
               ds->mpi_rank, ds_name, readsize[0]);
-    err = adios_read_dataspaces_get (ds_name, adios_byte, ds->current_step, ds->mpi_rank, 
-                                     1, 0, offset, readsize, group_info_buf);
+    err = get_meta (ds_name, adios_byte, ds->current_step, ds->mpi_rank, 
+                     ndim, 0, offset, readsize, group_info_buf, ds->comm);
     if (err) {
         adios_error (err_invalid_group, "Invalid group name %s for file %s. "
                      "Entity %s could not be retrieved from DataSpaces\n",
@@ -563,7 +593,8 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
     /* Try to get variable with fname. If it does not exists, we get an error, which means
        the data does not exist. So we return an error just like with real files */
     struct dataspaces_data_struct * ds = (struct dataspaces_data_struct *) fp->fh;
-    int offset[] = {0,0,0}, readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    int ndim;
     char file_info_buf[FILEINFO_BUFLEN];
     int version_info_buf[2]; // 0: last version, 1: terminated?
     int err, i;
@@ -589,9 +620,10 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
         step_status = STEP_OK;
 
         log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_vname);
-        readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
-        err = adios_read_dataspaces_get (ds_vname, adios_integer, 0, ds->mpi_rank, 1, 0, 
-                                         offset, readsize, version_info_buf);
+        ndim = 1;
+        offset[0] = 0; readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
+        err = get_meta (ds_vname, adios_integer, 0, ds->mpi_rank, ndim, 0, 
+                         offset, readsize, version_info_buf, ds->comm);
 
         if (!err) {
             int last_version = version_info_buf[0];
@@ -623,8 +655,8 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
                 // Loop until we find what we need or go past the last version
                 do {
                     log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_fname);
-                    err = adios_read_dataspaces_get (ds_fname, adios_byte, step, ds->mpi_rank, 
-                                                     1, 0, offset, readsize, file_info_buf);
+                    err = get_meta(ds_fname, adios_byte, step, ds->mpi_rank, 
+                                 ndim, 0, offset, readsize, file_info_buf, ds->comm);
                     step++; // value will go over the target with 1
                 } while (err && step <= max_check_version);
 
@@ -886,7 +918,8 @@ int adios_read_dataspaces_peek_ahead (ADIOS_FILE *fp)
     log_debug("peek ahead from version %d of filename=%s, last available step %d\n", 
               ds->current_step, fp->path, fp->last_step);
 
-    int offset[] = {0,0,0}, readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    int ndim;
     int version_info_buf[2]; // 0: last version, 1: terminated?
     int err;
     char ds_vname[MAX_DS_NAMELEN];
@@ -894,9 +927,10 @@ int adios_read_dataspaces_peek_ahead (ADIOS_FILE *fp)
     snprintf(ds_vname, MAX_DS_NAMELEN, "VERSION@%s",fp->path);
 
     log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_vname);
-    readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
-    err = adios_read_dataspaces_get (ds_vname, adios_integer, 0, ds->mpi_rank, 1, 0, 
-            offset, readsize, version_info_buf);
+    ndim = 1;
+    offset[0] = 0; readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
+    err = get_meta(ds_vname, adios_integer, 0, ds->mpi_rank, ndim, 0, 
+            offset, readsize, version_info_buf, ds->comm);
 
     if (!err) {
         int last_version = version_info_buf[0];
@@ -1085,32 +1119,34 @@ int adios_read_dataspaces_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const AD
 static int adios_read_dataspaces_get (const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank,
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data)
+                                uint64_t * offset, uint64_t * readsize, uint64_t * dims, void * data)
 {
 
     struct obj_data *od;
     int elemsize = common_read_type_size(vartype, NULL);
     int i, err;
-    int didx[3];
-    int lb[3] = {0,0,0};
-    int ub[3] = {0,0,0};
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
 
     // reorder DS dimensions to Fortran/C dimensions
     ds_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
-    for (i=0; i<3; i++) {
+    for (i=0; i<ndims; i++) {
         lb[i] = offset[didx[i]];
         ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = dims[didx[i]];
     }
 
-    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%d,%d,%d) ub=(%d,%d,%d)}\n",
-        __func__, rank, varname, version, lb[0], lb[1], lb[2], 
-        ub[0], ub[1], ub[2]);
+    ds_int64s_to_str(ndims, gdims, gdims_str);
+    ds_int64s_to_str(ndims, lb, lb_str);
+    ds_int64s_to_str(ndims, ub, ub_str);
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s) gdims=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str, gdims_str);
+
+    dspaces_define_gdim (varname, ndims, gdims);
+    err =  dspaces_get (varname, version, elemsize,
+                ndims, lb, ub, data); 
 
-    err =  dspaces_get (varname, version, elemsize, 
-                     lb[0], lb[1], lb[2],
-                     ub[0], ub[1], ub[2],
-                     data
-                    );
     /*if (err == -ENOMEM) {
         adios_error (err_no_memory, "Not enough memory for DATASPACES to perform dspaces_get()");  
         return err_no_memory;
@@ -1123,6 +1159,112 @@ static int adios_read_dataspaces_get (const char * varname, enum ADIOS_DATATYPES
     return 0;
 }
 
+static int adios_read_dataspaces_get_meta(const char * varname, enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data)
+{
+
+    int elemsize = common_read_type_size(vartype, NULL);
+    int i, err;
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
+
+    // reorder DS dimensions to Fortran/C dimensions
+    ds_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
+    for (i=0; i<ndims; i++) {
+        lb[i] = offset[didx[i]];
+        ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = (ub[i]-lb[i]+1) * dspaces_get_num_space_server();
+    }
+
+    ds_int64s_to_str(ndims, lb, lb_str);
+    ds_int64s_to_str(ndims, ub, ub_str); 
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str);
+
+    dspaces_define_gdim(varname, ndims, gdims);
+    err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data);
+    /*if (err == -ENOMEM) {
+        adios_error (err_no_memory, "Not enough memory for DATASPACES to perform dspaces_get()");  
+        return err_no_memory;
+    } 
+    else*/ if (err) {
+        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
+        return err_corrupted_variable;
+    }
+
+    return 0;
+}
+
+static int adios_read_dataspaces_get_meta_collective(const char * varname,
+                                enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm)
+{
+    int elemsize = common_read_type_size(vartype, NULL);
+    int i, err;
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
+    size_t datasize;
+    size_t padsize = common_read_type_size(adios_integer, NULL);
+    void *buf;
+    int *pad;
+    int root = 0;
+
+    // calculate size of the meta data 
+    for (i = 0, datasize = 1; i < ndims; i++) {
+        datasize *= (readsize[i]*elemsize);
+    }
+    buf = malloc(padsize + datasize);
+
+    // reorder DS dimensions to Fortran/C dimensions
+    ds_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
+    for (i=0; i<ndims; i++) {
+        lb[i] = offset[didx[i]];
+        ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = (ub[i]-lb[i]+1) * dspaces_get_num_space_server();
+    }
+
+    ds_int64s_to_str(ndims, lb, lb_str);
+    ds_int64s_to_str(ndims, ub, ub_str);
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str);
+
+    if (rank == root) {
+        dspaces_define_gdim(varname, ndims, gdims);
+        err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data);
+
+        // set pad to indicate if root rank successfully fetch the meta data
+        pad = (int*)buf;
+        pad[0] = err;
+        // copy meta data
+        memcpy(buf+padsize, data, datasize);
+    }
+
+    // broadcast the meta data        
+    if (MPI_Bcast(buf, datasize+padsize, MPI_BYTE, root, comm) == MPI_SUCCESS) {
+        if (rank != root) {
+            pad = (int*)buf;
+            err = pad[0];
+            memcpy(data, buf+padsize, datasize);
+        }
+    } else {
+        err = -1;
+    }
+
+    free(buf);
+
+    if (err) {
+        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
+        return err_corrupted_variable;
+    }
+
+    return 0;
+}
 
 int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp, 
                                               const ADIOS_SELECTION * sel, 
@@ -1134,7 +1276,7 @@ int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp,
     struct dataspaces_data_struct * ds = (struct dataspaces_data_struct *) fp->fh;
     struct dataspaces_var_struct * var = &ds->vars[varid];
     read_request * r;
-    uint64_t s[10], c[10], ld0, off0;
+    uint64_t *s, *c, ld0, off0;
     uint64_t reqsize;
     int i;
 
@@ -1197,7 +1339,7 @@ int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp,
 
                 /* We cannot do this with DataSpaces yet (fp->nwriter == 1) */
                 /* Read the whole variable */
-                memcpy (s, 0, 10*sizeof(uint64_t));
+                s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
                 r->sel = common_read_selection_boundingbox(var->ndims, s, var->dims);
                 for (i=0; i<var->ndims; i++) 
                     reqsize *= var->dims[i];
@@ -1209,8 +1351,9 @@ int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp,
                    Let's do a simple 1D domain decomposition
                    FIXME: should be smarter and do multi-dim decomp if needed
                 */
-                memcpy (s, 0, 10*sizeof(uint64_t));
-                memcpy (c, var->dims, 10*sizeof(uint64_t));
+                s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
+                c = (uint64_t *) malloc (var->ndims * sizeof(uint64_t));
+                memcpy (c, var->dims, var->ndims*sizeof(uint64_t));
                 if (var->ndims) {
                     ld0 = var->dims[0]/ds->nproc;
                     if (ld0 != 0) {
@@ -1243,7 +1386,7 @@ int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp,
         } // switch
     } else {
         // NULL selection means the whole variable
-        memcpy (s, 0, 10*sizeof(uint64_t));
+        s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
         r->sel = common_read_selection_boundingbox(var->ndims, s, var->dims);
         for (i=0; i<var->ndims; i++) 
             reqsize *= var->dims[i];
@@ -1276,13 +1419,18 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
     struct dataspaces_data_struct * ds = (struct dataspaces_data_struct *) fp->fh;
     struct dataspaces_var_struct * var = &ds->vars[r->varid];
     //int64_t total_size;
-    int offset[3] = {0,0,0};
-    int readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM], dims[MAX_DS_NDIM];
+    char offset_str[256], readsize_str[256];
     int elemsize;
     int err;
-    int i,k,ndims,tidx;
+    int i,k,tidx;
     char ds_name[MAX_DS_NAMELEN];
 
+    // set global dimension
+    for (i = 0; i < var->ndims; i++) {
+        dims[i] = var->dims[i];
+    }
+
     if (!ds->chunk)
         ds->chunk = (ADIOS_VARCHUNK *) malloc (sizeof (ADIOS_VARCHUNK));
     if (!ds->chunk) {
@@ -1323,23 +1471,19 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
 
     if (r->sel->type == ADIOS_SELECTION_BOUNDINGBOX)
     {
-        // transform uint64_t array to int array for DataSpaces
         for (i=0; i<var->ndims; i++) {
-            offset[i]    = (int) r->sel->u.bb.start[i];
-            readsize[i]  = (int) r->sel->u.bb.count[i];
+            offset[i]    = r->sel->u.bb.start[i];
+            readsize[i]  = r->sel->u.bb.count[i];
         }
 
-        log_debug("-- %s, rank %d: get data: varname=%s start=(%lld,%lld,%lld) count=(%lld,%lld,%lld)}\n",
-                __func__, ds->mpi_rank, ds_name, 
-                r->sel->u.bb.start[0], r->sel->u.bb.start[1], r->sel->u.bb.start[2], 
-                r->sel->u.bb.count[0], r->sel->u.bb.count[1], r->sel->u.bb.count[2]);
-        log_debug("-- %s, rank %d: get data: varname=%s offset=(%d,%d,%d) readsize=(%d,%d,%d)}\n",
-                __func__, ds->mpi_rank, ds_name, offset[0], offset[1], offset[2], 
-                readsize[0], readsize[1], readsize[2]);
+        ds_int64s_to_str(var->ndims, offset, offset_str);
+        ds_int64s_to_str(var->ndims, readsize, readsize_str);
+        log_debug("-- %s, rank %d: get data: varname=%s offset=(%s) readsize=(%s)\n",
+                __func__, ds->mpi_rank, ds_name, offset_str, readsize_str);
 
         err = adios_read_dataspaces_get (ds_name, var->type, ds->current_step, ds->mpi_rank, 
                 var->ndims, futils_is_called_from_fortran(),
-                offset, readsize, ds->chunk->data);
+                offset, readsize, dims, ds->chunk->data);
     }
     else if (r->sel->type == ADIOS_SELECTION_POINTS)
     {
@@ -1348,13 +1492,13 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
         while (!err && k < r->sel->u.points.npoints) {
             // pick and read k-th point individually
             for (i=0; i<var->ndims; i++) {
-                offset[i]    = (int) r->sel->u.points.points[k*var->ndims+i];
+                offset[i]    = r->sel->u.points.points[k*var->ndims+i];
                 readsize[i]  = 1;
             }
 
             err = adios_read_dataspaces_get (ds_name, var->type, ds->current_step, ds->mpi_rank, 
                     var->ndims, futils_is_called_from_fortran(),
-                    offset, readsize, ds->chunk->data+k*elemsize);
+                    offset, readsize, dims, ds->chunk->data+k*elemsize);
             k++;
         }
     }
@@ -1406,6 +1550,9 @@ int adios_read_dataspaces_perform_reads (const ADIOS_FILE *fp, int blocking)
         // remove head from list
         r = ds->req_list;
         ds->req_list = ds->req_list->next;
+        // FIXME: if we allocated start/count arrays in schedule read for r->sel,
+        // we need to manually free them here
+        common_read_selection_delete(r->sel);
         free(r);
         ds->nreq--;
     }
@@ -1456,53 +1603,71 @@ int adios_read_dataspaces_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK **
 }
 
 
-/* Tell the DataSpaces order of dimensions for a 1-3 dim array written from Fortran or C.
+/* Tell the DataSpaces order of dimensions for a 1-MAX_DS_NDIM dim array written from Fortran or C.
    unpack=1: the reverse of packing (to retrieve the original order).
-   didx should be an int [3] array in any case.
+   didx should be an int [MAX_DS_NDIM] array in any case.
 */
 void ds_dimension_ordering(int ndims, int is_app_fortran, int unpack, int *didx)
 {
-    /* Order of dimensions: in DataSpaces: slow, fast, slowest
-       Fortran: i,j,k --> j, i, k  = lb[1], lb[0], lb[2]
-                i,j   --> j, i     = lb[1], lb[0], lb[2]=1
-                i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1
-       C:       i,j,k --> j, k, i  = lb[1], lb[2], lb[0]
-                i,j   --> i, j     = lb[0], lb[1], lb[2]=1
-                i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1 (same as Fortran)
-
-       unpack: C(i,j,k) ordering applied twice does not result in the original order
-               so we need to have a reverse mapping for this case.
-               For all the other cases, applying twice results in the same order
-               even for packing from Fortran and unpacking to C, and vice versa.
-               F(i,j,k) -(pack)-> DS(j,i,k) -(unpack)-> C(k,j,i) or F(i,j,k)
-               C(i,j,k) -(pack)-> DS(j,k,i) -(unpack)-> C(i,j,k) or F(k,j,i)
-               F(i,j)   -(pack)-> DS(j,i)   -(unpack)-> C(j,i)   or F(i,j)
-               C(i,j)   -(pack)-> DS(i,j)   -(unpack)-> C(i,j)   or F(j,i)
-               F(i)     -(pack)-> DS(1,i)   -(unpack)-> C(i,(1)) or F(i,(1))
-               C(i)     -(pack)-> DS(1,i)   -(unpack)-> C(i,(1)) or F(i,(1))
+    /* Order of dimensions: in DataSpaces: fast --> slow --> slowest
+       For example: 
+       Fortran: i,j,k --> i, j, k  = lb[0], lb[1], lb[2]
+                i,j   --> i, j     = lb[0], lb[1]
+                i     --> i        = lb[0]
+       C:       i,j,k --> k, j, i  = lb[2], lb[1], lb[0]
+                i,j   --> j, i     = lb[1], lb[0]
+                i     --> i        = lb[0] 
     */
+    int i;
+    // initialize didx[]
+    for (i = 0; i < MAX_DS_NDIM; i++) {
+        didx[i] = i;
+    }
 
-    if (ndims == 0) {
-        didx[0] = 0; didx[1] = 1; didx[2] = 2;
-    } else if (is_app_fortran || ndims == 1) {
-        /* Flip 1st and 2nd dimension for DataSpaces representation
-           for any Fortran writings and for any 1D array :
-           Fortran: i,j,k --> j, i, k  = lb[1], lb[0], lb[2]
-           C:       i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1 
-        */
-        didx[0] = 1; didx[1] = 0; didx[2] = 2;
-    } else if (ndims == 2) {
-        /* C: i,j   --> i, j     = lb[0], lb[1], lb[2]=1 */
-        didx[0] = 0; didx[1] = 1; didx[2] = 2;
-    } else { // (ndims == 3) 
-        if (!unpack) {
-            /* C: i,j,k --> j, k, i  = lb[1], lb[2], lb[0] */
-            didx[0] = 1; didx[1] = 2; didx[2] = 0;
-        } else {
-            /* DataSpaces x,y,z --> z,x,y  (ijk->kij, or jki->ijk) */
-            didx[0] = 2; didx[1] = 0; didx[2] = 1;
+    if (ndims == 0) return; 
+    if (is_app_fortran) {
+        for (i = 0; i < ndims; i++) {
+            didx[i] = i;
+        }
+    } else {
+        for (i = 0; i < ndims; i++) {
+            didx[i] = ndims-1-i;
         }
     }
+
+    return;
+}
+
+void ds_ints_to_str (int ndim, int *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!ndim) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%d", values[0]);
+    for (i=1; i<ndim; i++)
+    {
+        sprintf (v,",%d", values[i]);
+        strcat (s,v);
+    }
+}
+
+void ds_int64s_to_str(int ndim, uint64_t *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!ndim) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%llu", values[0]);
+    for (i=1; i<ndim; i++)
+    {
+        sprintf (v,",%llu", values[i]);
+        strcat (s,v);
+    }
 }
 
 int adios_read_dataspaces_get_attr_byid (const ADIOS_FILE * fp, int attrid, 
@@ -1536,7 +1701,7 @@ void adios_read_dataspaces_reset_dimension_order (const ADIOS_FILE *fp, int is_f
 }
 
 void adios_read_dataspaces_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, 
-            char ***group_namelist, int **nvars_per_group, int **nattrs_per_group) 
+            char ***group_namelist, uint32_t **nvars_per_group, uint32_t **nattrs_per_group) 
 {
     struct dataspaces_data_struct * ds;
     if (fp) {
diff --git a/src/read/read_dimes.c b/src/read/read_dimes.c
index e50234f..dd8a72c 100644
--- a/src/read/read_dimes.c
+++ b/src/read/read_dimes.c
@@ -77,7 +77,7 @@ static inline double time_get()
 
 #define MAX_DS_NAMELEN 128
 /* Maximum number of different filenames allowed per process during the whole run */
-#define MAXNFILE 10 
+#define MAXNFILE 20 
 /*#define DATASPACES_NO_VERSIONING   define it at configure as -DDATASPACES_NO_VERSIONING in CFLAGS */
 /* Length of the 1D array representing the file in DataSpaces (contains metadata) */
 #define FILEINFO_BUFLEN 128
@@ -87,6 +87,9 @@ static char *chunk_buffer = 0;
 
 static int poll_interval_msec = 10; // how much to wait between polls when timeout is used
 
+static int enable_read_meta_collective = 1; // when enabled, meta data reading becomes collective. One reader process would fetch meta data from DataSpaces and broadcast to other procseses using MPI_Bcast
+static int check_read_status = 2; // 0: disable, 1: at every step (not supported yet), 2: at finalize (default value)
+
 struct dimes_fileversions_struct { // current opened version of each stream/file
     char      * filename[MAXNFILE];
     int         version[MAXNFILE];  /* for versioning of one given filename */
@@ -100,7 +103,7 @@ struct dimes_var_struct { // describes one variable (of one group)
     enum ADIOS_DATATYPES   type;
     int                    hastime; // 0: no, 1:yes (time dimension is not stored in dataspaces)
     int                    ndims;
-    uint64_t               dims[3]; // we have max 3 dims in DataSpaces
+    uint64_t               dims[MAX_DS_NDIM]; // we have max MAX_DS_NDIM dims in DataSpaces
     void                 * value;
 };
 
@@ -142,11 +145,41 @@ struct dimes_data_struct { // accessible as fp->fh
 static int adios_read_dimes_get_meta(const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank, 
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data);
+                                uint64_t * offset, uint64_t * readsize, void * data);
 static int adios_read_dimes_get_data(const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank, 
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data);
+                                uint64_t * offset, uint64_t * readsize, uint64_t * dims,
+                                void * data);
+static int adios_read_dimes_get_meta_collective(const char * varname,
+                                enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm);
+
+static int update_read_status_var(ADIOS_FILE *fp, struct dimes_data_struct *ds) {
+    char ds_vname[MAX_DS_NAMELEN];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    int elemsize, ndim;
+    int read_status_buf[1] = {-1};
+    int read_status_buf_len = 1;
+
+    if (ds->mpi_rank == 0) {
+        // Put READ_STATUS at fn information into space
+        read_status_buf[0] = ds->current_step;
+        snprintf (ds_vname, MAX_DS_NAMELEN, "READ_STATUS@%s", fp->path);
+        log_debug("%s: rank= %d put %s buf= {%d} into space\n",
+                __func__, ds->mpi_rank, ds_vname, read_status_buf[0]);
+        elemsize = sizeof(int); ndim = 1;
+        lb[0] = 0; ub[0] = read_status_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_vname, ndim, gdims);
+        dspaces_put(ds_vname, 0, elemsize, ndim, lb, ub, read_status_buf);
+        dspaces_put_sync();
+    }
+
+    return 0;
+}
 
 static char* get_chunk_buffer()
 {
@@ -160,6 +193,21 @@ static char* get_chunk_buffer()
     return chunk_buffer;
 }
 
+static int get_meta(const char * varname,
+                    enum ADIOS_DATATYPES vartype,
+                    int version, int rank,
+                    int ndims, int is_fortran_ordering,
+                    uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm)
+{
+    if (enable_read_meta_collective) {
+        return adios_read_dimes_get_meta_collective(varname, vartype, version,
+            rank, ndims, is_fortran_ordering, offset, readsize, data, comm);
+    } else {
+        return adios_read_dimes_get_meta(varname, vartype, version, rank, ndims,
+            is_fortran_ordering, offset, readsize, data);
+    }
+}
+
 
 /* If init is used, we connect to DATASPACES here, otherwise we connect in fopen.
    If multiple fopen..fclose cycles are used, init/finalize must be used too to
@@ -169,7 +217,7 @@ int adios_read_dimes_init_method (MPI_Comm comm, PairStruct * params)
 { 
     int  nproc, drank, dpeers;
     int  rank, err;
-    int  appid, max_chunk_size, pollinterval, was_set;
+    int  appid, max_chunk_size, pollinterval, was_set, check_read;
     MPI_Comm_rank(comm, &rank);
     MPI_Comm_size(comm, &nproc);
 
@@ -208,6 +256,23 @@ int adios_read_dimes_init_method (MPI_Comm comm, PairStruct * params)
                 log_error ("Invalid 'poll_interval' parameter given to the DIMES "
                             "read method: '%s'\n", p->value);
             }
+        } else if (!strcasecmp (p->name, "disable_collective_read_meta")) {
+            errno = 0;
+            enable_read_meta_collective = 0;
+            log_debug("Set 'disable_collective_read_meta' for DIMES read method\n"); 
+        } else if (!strcasecmp (p->name, "check_read_status")) {
+            errno = 0;
+            check_read = strtol(p->value, NULL, 10);
+            if (!errno && (check_read == 0 || check_read == 2)) {
+                check_read_status = check_read;
+                log_debug("check_read_status set to %d for DIMES read method\n",
+                    check_read_status);
+            } else {
+                log_error("Invalid 'check_read_status' parameter given to the DIMES "
+                            "read method: '%s'\n", p->value);
+                log_error("check_read_status=<value>, 0: disable, 1: at every step "
+                            " (not supported yet), 2: at finalize (default value).\n");
+            }
         } else {
             log_error ("Parameter name %s is not recognized by the DIMES read "
                         "method\n", p->name);
@@ -223,7 +288,7 @@ int adios_read_dimes_init_method (MPI_Comm comm, PairStruct * params)
             appid = 2;
         log_debug("-- %s, rank %d: connect to dataspaces with nproc=%d and appid=%d\n", 
                     __func__, rank, nproc, appid);
-        err = dspaces_init(nproc, appid);
+        err = dspaces_init(nproc, appid, &comm, NULL);
         if (err < 0) {
             adios_error (err_connection_failed, "Failed to connect with DATASPACES\n");
             return err_connection_failed;
@@ -307,8 +372,8 @@ static int dimes_unpack_group_info (ADIOS_FILE *fp, char * buf)
     int datasize;
     struct dimes_var_struct * vars;
     struct dimes_attr_struct * attrs;
-    uint64_t dims[3]; // all variables has 3 dimension values in the index 
-    int didx[3]; // dimension reordering 
+    uint64_t dims[MAX_DS_NDIM]; // all variables has MAX_DS_NDIM dimension values in the index 
+    int didx[MAX_DS_NDIM]; // dimension reordering 
     struct dimes_data_struct * ds = (struct dimes_data_struct *) fp->fh;
     int buf_len = ds->group_index_len;
     
@@ -405,7 +470,7 @@ static int dimes_unpack_group_info (ADIOS_FILE *fp, char * buf)
         vars[i].ndims = *(int*)b; 
         b += sizeof(int);
         log_debug("        ndims w/o time = %d, b = %d\n", vars[i].ndims, b);
-        for (j=0; j < 3; j++) {
+        for (j=0; j < MAX_DS_NDIM; j++) {
             dims[j] = *(uint64_t*)b; 
             b += 8;
             log_debug("          unordered dim[%d] = %lld, b = %d\n", j, dims[j], b);
@@ -498,7 +563,9 @@ static int get_groupdata (ADIOS_FILE *fp)
 
     /* Try to get group metadata from DataSpaces. If it does not exists, we get an error, which means
        the data does not exist. */
-    int offset[] = {0,0,0}, readsize[3] = {ds->group_index_len,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    offset[0] = 0; readsize[0] = ds->group_index_len;
+    int ndim = 1;
     char * group_info_buf = malloc (ds->group_index_len);
     if (!group_info_buf) {
             adios_error (err_no_memory, 
@@ -511,8 +578,8 @@ static int get_groupdata (ADIOS_FILE *fp)
     snprintf (ds_name, MAX_DS_NAMELEN, "GROUP@%s/%s",fp->path, ds->group_name);
     log_debug("-- %s, rank %d: Get variable %s with size %d\n", __func__, 
               ds->mpi_rank, ds_name, readsize[0]);
-    err = adios_read_dimes_get_meta(ds_name, adios_byte, ds->current_step, ds->mpi_rank, 
-                                     1, 0, offset, readsize, group_info_buf);
+    err = get_meta(ds_name, adios_byte, ds->current_step, ds->mpi_rank, 
+                 ndim, 0, offset, readsize, group_info_buf, ds->comm);
     if (err) {
         adios_error (err_invalid_group, "Invalid group name %s for file %s. "
                      "Entity %s could not be retrieved from DataSpaces\n",
@@ -565,7 +632,8 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
     /* Try to get variable with fname. If it does not exists, we get an error, which means
        the data does not exist. So we return an error just like with real files */
     struct dimes_data_struct * ds = (struct dimes_data_struct *) fp->fh;
-    int offset[] = {0,0,0}, readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    int ndim;
     char file_info_buf[FILEINFO_BUFLEN];
     int version_info_buf[2]; // 0: last version, 1: terminated?
     int err, i;
@@ -574,6 +642,7 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
     double t1 = adios_gettime();
     enum STEP_STATUS step_status = STEP_OK;
 
+    adios_errno = err_no_error; // clear error values now
     snprintf(ds_vname, MAX_DS_NAMELEN, "VERSION@%s",fp->path);
     snprintf(ds_fname, MAX_DS_NAMELEN, "FILE@%s",fp->path);
     //log_debug("-- %s, rank %d: Get variable %s\n", __func__, ds->mpi_rank, ds_fname);
@@ -591,9 +660,10 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
         step_status = STEP_OK;
 
         log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_vname);
-        readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
-        err = adios_read_dimes_get_meta(ds_vname, adios_integer, 0, ds->mpi_rank, 1, 0, 
-                                         offset, readsize, version_info_buf);
+        ndim = 1;
+        offset[0] = 0; readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
+        err = get_meta (ds_vname, adios_integer, 0, ds->mpi_rank, ndim, 0,
+                         offset, readsize, version_info_buf, ds->comm);
 
         if (!err) {
             int last_version = version_info_buf[0];
@@ -613,28 +683,21 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
                     // we may stay in poll loop
                 }
             } else {
-                // Try to get the version the user wants
-                if (which_version == LAST_VERSION)
-                    step = last_version;
+                // By API design: Try to get the version the user wants: next or last
+                // By DIMES design: we can only give the last version no matter what
+                step = last_version;
                 readsize[0] = FILEINFO_BUFLEN; // FILE%name is FILEINFO_BUFLEN bytes long
+                stay_in_poll_loop = 0;
 
                 int max_check_version = last_version;
-                if (which_version == NEXT_VERSION) 
-                    max_check_version = step;
 
-                // Loop until we find what we need or go past the last version
-                do {
-                    log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_fname);
-                    err = adios_read_dimes_get_meta(ds_fname, adios_byte, step, ds->mpi_rank, 
-                                                     1, 0, offset, readsize, file_info_buf);
-                    step++; // value will go over the target with 1
-                } while (err && step <= max_check_version);
+                log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_fname);
+                err = get_meta(ds_fname, adios_byte, step, ds->mpi_rank, 
+                        ndim, 0, offset, readsize, file_info_buf, ds->comm);
 
                 if (!err) {
-                    /* Found object with this access version */
-                    step--; // undo the last increment above
+                    /* Found object with this access version. Get file info. Update fp */
                     ds->current_step = step;
-                    stay_in_poll_loop = 0;
                     log_debug("   rank %d: step %d of '%s' exists\n", 
                             ds->mpi_rank, ds->current_step, ds_fname);
 
@@ -644,36 +707,29 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
                         fp->current_step = ds->current_step;
                         fp->last_step = last_version;
 
-                        /* Get the variables and attributes the (only) group separately */
+                        /* Get the variables and attribute of the (only) group separately */
                         err = get_groupdata (fp);
                         if (err) {
-                            // something went wrong with the group(s)
+                            // something went wrong with the group(s) metadata
                             step_status = STEP_OTHERERROR;
+                            adios_error (err_unspecified, "DIMES method: Unexpected state: "
+                                    "found last version %d of dataset %s but then could not "
+                                    "parse the group metadata.\n", step, fp->path);
                         }
                     } else {
                         // something went wrong with the file metadata
                         step_status = STEP_OTHERERROR;
+                        adios_error (err_unspecified, "DIMES method: Unexpected state: "
+                                "found last version %d of dataset %s but then could not "
+                                "parse the file metadata.\n", step, fp->path);
                     }
 
                 } else {
-                    if (which_version == NEXT_VERSION) 
-                    {
-                        if (step < last_version) {
-                            step_status = STEP_STEPDISAPPEARED;
-                            stay_in_poll_loop = 0;
-                        } else {
-                            step_status = STEP_STEPNOTREADY;
-                            // we may stay in poll loop
-                        }
-                    } 
-                    else if (which_version == LAST_VERSION || 
-                             which_version == NEXT_AVAILABLE_VERSION) 
-                    {
-                        step_status = STEP_OTHERERROR;
-                        stay_in_poll_loop = 0;
-                        log_warn ("DIMES method: Unexpected state: found last version %d"
-                                "of dataset but then could not read it.\n", step);
-                    }
+                    // We got VERSION@ with a given step, but failed to get FILE@
+                    // for that step. This is an unknown error. 
+                    step_status = STEP_OTHERERROR;
+                    adios_error (err_unspecified, "DIMES method: Unexpected state: found last version %d"
+                            "of dataset %s but then could not get the metadata for it.\n", step, fp->path);
                 }
             }
 
@@ -716,6 +772,9 @@ static int get_step (ADIOS_FILE *fp, int step, enum WHICH_VERSION which_version,
             adios_error (err_step_disappeared, 
                     "Step %d in stream '%s' is not available anymore\n", step, fp->path);
             break;
+    case STEP_OTHERERROR:
+            // These were handled at their places
+            break;
     default:
             adios_errno = err_no_error; // clear temporary error during polling
             break;
@@ -888,7 +947,8 @@ int adios_read_dimes_peek_ahead (ADIOS_FILE *fp)
     log_debug("peek ahead from version %d of filename=%s, last available step %d\n", 
               ds->current_step, fp->path, fp->last_step);
 
-    int offset[] = {0,0,0}, readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM];
+    int ndim;
     int version_info_buf[2]; // 0: last version, 1: terminated?
     int err;
     char ds_vname[MAX_DS_NAMELEN];
@@ -896,9 +956,10 @@ int adios_read_dimes_peek_ahead (ADIOS_FILE *fp)
     snprintf(ds_vname, MAX_DS_NAMELEN, "VERSION@%s",fp->path);
 
     log_debug("   rank %d: dspaces_get %s\n", ds->mpi_rank, ds_vname);
-    readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
-    err = adios_read_dimes_get_meta(ds_vname, adios_integer, 0, ds->mpi_rank, 1, 0, 
-            offset, readsize, version_info_buf);
+    ndim = 1;
+    offset[0] = 0; readsize[0] = 2; //*sizeof(int); // VERSION%name is 2 integers only
+    err = get_meta(ds_vname, adios_integer, 0, ds->mpi_rank, ndim, 0,
+            offset, readsize, version_info_buf, ds->comm);
 
     if (!err) {
         int last_version = version_info_buf[0];
@@ -975,6 +1036,9 @@ void adios_read_dimes_release_step (ADIOS_FILE *fp)
     struct dimes_attr_struct * attrs = 
                 (struct dimes_attr_struct *) ds->attrs;
 
+    if (check_read_status == 2) {
+        update_read_status_var(fp, ds);
+    }
     /* Release read lock locked in fopen */
     unlock_file (fp, ds);
 
@@ -1084,32 +1148,33 @@ int adios_read_dimes_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_V
 static int adios_read_dimes_get_data(const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank,
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data)
+                                uint64_t * offset, uint64_t * readsize, uint64_t * dims,
+                                void * data)
 {
 
     struct obj_data *od;
     int elemsize = common_read_type_size(vartype, NULL);
     int i, err;
-    int didx[3];
-    int lb[3] = {0,0,0};
-    int ub[3] = {0,0,0};
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
 
     // reorder DS dimensions to Fortran/C dimensions
     dimes_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
-    for (i=0; i<3; i++) {
+    for (i=0; i<ndims; i++) {
         lb[i] = offset[didx[i]];
         ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = dims[didx[i]];
     }
 
-    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%d,%d,%d) ub=(%d,%d,%d)}\n",
-        __func__, rank, varname, version, lb[0], lb[1], lb[2], 
-        ub[0], ub[1], ub[2]);
+    dimes_int64s_to_str(ndims, lb, lb_str);
+    dimes_int64s_to_str(ndims, ub, ub_str);
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str);
 
-    err =  dimes_get (varname, version, elemsize, 
-                     lb[0], lb[1], lb[2],
-                     ub[0], ub[1], ub[2],
-                     data
-                    );
+    dimes_define_gdim (varname, ndims, gdims);
+    err = dimes_get (varname, version, elemsize,
+                ndims, lb, ub, data);
     /*if (err == -ENOMEM) {
         adios_error (err_no_memory, "Not enough memory for DATASPACES to perform dspaces_get()");  
         return err_no_memory;
@@ -1125,32 +1190,31 @@ static int adios_read_dimes_get_data(const char * varname, enum ADIOS_DATATYPES
 static int adios_read_dimes_get_meta(const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank,
                                 int ndims, int is_fortran_ordering, 
-                                int * offset, int * readsize, void * data)
+                                uint64_t * offset, uint64_t * readsize, void * data)
 {
 
     struct obj_data *od;
     int elemsize = common_read_type_size(vartype, NULL);
     int i, err;
-    int didx[3];
-    int lb[3] = {0,0,0};
-    int ub[3] = {0,0,0};
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
 
     // reorder DS dimensions to Fortran/C dimensions
     dimes_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
-    for (i=0; i<3; i++) {
+    for (i=0; i<ndims; i++) {
         lb[i] = offset[didx[i]];
         ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = (ub[i]-lb[i]+1) * dspaces_get_num_space_server();
     }
 
-    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%d,%d,%d) ub=(%d,%d,%d)}\n",
-        __func__, rank, varname, version, lb[0], lb[1], lb[2], 
-        ub[0], ub[1], ub[2]);
+    dimes_int64s_to_str(ndims, lb, lb_str);
+    dimes_int64s_to_str(ndims, ub, ub_str);
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str);
 
-    err =  dspaces_get (varname, version, elemsize, 
-                     lb[0], lb[1], lb[2],
-                     ub[0], ub[1], ub[2],
-                     data
-                    );
+    dspaces_define_gdim(varname, ndims, gdims);
+    err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data); 
     /*if (err == -ENOMEM) {
         adios_error (err_no_memory, "Not enough memory for DATASPACES to perform dspaces_get()");  
         return err_no_memory;
@@ -1163,6 +1227,74 @@ static int adios_read_dimes_get_meta(const char * varname, enum ADIOS_DATATYPES
     return 0;
 }
 
+static int adios_read_dimes_get_meta_collective(const char * varname,
+                                enum ADIOS_DATATYPES vartype,
+                                int version, int rank,
+                                int ndims, int is_fortran_ordering,
+                                uint64_t * offset, uint64_t * readsize, void * data, MPI_Comm comm)
+{
+    int elemsize = common_read_type_size(vartype, NULL);
+    int i, err;
+    int didx[MAX_DS_NDIM];
+    uint64_t gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM];
+    char gdims_str[256], lb_str[256], ub_str[256];
+    size_t datasize;
+    size_t padsize = common_read_type_size(adios_integer, NULL);
+    void *buf;
+    int *pad;
+    int root = 0;
+
+    // calculate size of the meta data 
+    for (i = 0, datasize = 1; i < ndims; i++) {
+        datasize *= (readsize[i]*elemsize);
+    }
+
+    buf = malloc(padsize + datasize);
+
+    // reorder DS dimensions to Fortran/C dimensions
+    dimes_dimension_ordering (ndims, is_fortran_ordering, 0 /*pack*/, didx);
+    for (i=0; i<ndims; i++) {
+        lb[i] = offset[didx[i]];
+        ub[i] = offset[didx[i]]+readsize[didx[i]]-1;
+        gdims[i] = (ub[i]-lb[i]+1) * dspaces_get_num_space_server();
+    }
+    
+    dimes_int64s_to_str(ndims, lb, lb_str);
+    dimes_int64s_to_str(ndims, ub, ub_str);
+    log_debug("-- %s, rank %d: get data: varname=%s version=%d, lb=(%s) ub=(%s)\n",
+        __func__, rank, varname, version, lb_str, ub_str);
+
+    if (rank == root) {
+        dspaces_define_gdim(varname, ndims, gdims);
+        err =  dspaces_get (varname, version, elemsize, ndims, lb, ub, data);
+
+        // set pad to indicate if root rank successfully fetch the meta data
+        pad = (int*)buf;
+        pad[0] = err;
+        // copy meta data
+        memcpy(buf+padsize, data, datasize);
+    }
+
+    // broadcast the meta data        
+    if (MPI_Bcast(buf, datasize+padsize, MPI_BYTE, root, comm) == MPI_SUCCESS) {
+        if (rank != root) {
+            pad = (int*)buf;
+            err = pad[0];
+            memcpy(data, buf+padsize, datasize);
+        }
+    } else {
+        err = -1;
+    }
+
+    free(buf);
+
+    if (err) {
+        adios_error (err_corrupted_variable, "DATASPACES failed to read variable %s.\n", varname);
+        return err_corrupted_variable;
+    }
+
+    return 0;
+}
 
 int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp, 
                                               const ADIOS_SELECTION * sel, 
@@ -1174,7 +1306,7 @@ int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp,
     struct dimes_data_struct * ds = (struct dimes_data_struct *) fp->fh;
     struct dimes_var_struct * var = &ds->vars[varid];
     read_request * r;
-    uint64_t s[10], c[10], ld0, off0;
+    uint64_t *s, *c, ld0, off0;
     uint64_t reqsize;
     int i;
 
@@ -1237,7 +1369,7 @@ int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp,
 
                 /* We cannot do this with DataSpaces yet (fp->nwriter == 1) */
                 /* Read the whole variable */
-                memcpy (s, 0, 10*sizeof(uint64_t));
+                s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
                 r->sel = common_read_selection_boundingbox(var->ndims, s, var->dims);
                 for (i=0; i<var->ndims; i++) 
                     reqsize *= var->dims[i];
@@ -1249,8 +1381,9 @@ int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp,
                    Let's do a simple 1D domain decomposition
                    FIXME: should be smarter and do multi-dim decomp if needed
                 */
-                memcpy (s, 0, 10*sizeof(uint64_t));
-                memcpy (c, var->dims, 10*sizeof(uint64_t));
+                s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
+                c = (uint64_t *) malloc (var->ndims * sizeof(uint64_t));
+                memcpy (c, var->dims, var->ndims*sizeof(uint64_t));
                 if (var->ndims) {
                     ld0 = var->dims[0]/ds->nproc;
                     if (ld0 != 0) {
@@ -1283,7 +1416,7 @@ int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp,
         } // switch
     } else {
         // NULL selection means the whole variable
-        memcpy (s, 0, 10*sizeof(uint64_t));
+        s = (uint64_t *) calloc (var->ndims, sizeof(uint64_t));
         r->sel = common_read_selection_boundingbox(var->ndims, s, var->dims);
         for (i=0; i<var->ndims; i++) 
             reqsize *= var->dims[i];
@@ -1316,13 +1449,18 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
     struct dimes_data_struct * ds = (struct dimes_data_struct *) fp->fh;
     struct dimes_var_struct * var = &ds->vars[r->varid];
     //int64_t total_size;
-    int offset[3] = {0,0,0};
-    int readsize[3] = {1,1,1};
+    uint64_t offset[MAX_DS_NDIM], readsize[MAX_DS_NDIM], dims[MAX_DS_NDIM];
+    char offset_str[256], readsize_str[256];
     int elemsize;
     int err;
-    int i,k,ndims,tidx;
+    int i,k,tidx;
     char ds_name[MAX_DS_NAMELEN];
 
+    // set global dimension
+    for (i = 0; i < var->ndims; i++) {
+        dims[i] = var->dims[i];
+    }
+
     if (!ds->chunk)
         ds->chunk = (ADIOS_VARCHUNK *) malloc (sizeof (ADIOS_VARCHUNK));
     if (!ds->chunk) {
@@ -1363,21 +1501,18 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
     {
         // transform uint64_t array to int array for DataSpaces
         for (i=0; i<var->ndims; i++) {
-            offset[i]    = (int) r->sel->u.bb.start[i];
-            readsize[i]  = (int) r->sel->u.bb.count[i];
+            offset[i]    = r->sel->u.bb.start[i];
+            readsize[i]  = r->sel->u.bb.count[i];
         }
 
-        log_debug("-- %s, rank %d: get data: varname=%s start=(%lld,%lld,%lld) count=(%lld,%lld,%lld)}\n",
-                __func__, ds->mpi_rank, ds_name, 
-                r->sel->u.bb.start[0], r->sel->u.bb.start[1], r->sel->u.bb.start[2], 
-                r->sel->u.bb.count[0], r->sel->u.bb.count[1], r->sel->u.bb.count[2]);
-        log_debug("-- %s, rank %d: get data: varname=%s offset=(%d,%d,%d) readsize=(%d,%d,%d)}\n",
-                __func__, ds->mpi_rank, ds_name, offset[0], offset[1], offset[2], 
-                readsize[0], readsize[1], readsize[2]);
+        dimes_int64s_to_str(var->ndims, offset, offset_str);
+        dimes_int64s_to_str(var->ndims, readsize, readsize_str);
+        log_debug("-- %s, rank %d: get data: varname=%s offset=(%s) readsize=(%s)\n",
+                __func__, ds->mpi_rank, ds_name, offset_str, readsize_str);
 
         err = adios_read_dimes_get_data(ds_name, var->type, ds->current_step, ds->mpi_rank, 
                 var->ndims, futils_is_called_from_fortran(),
-                offset, readsize, ds->chunk->data);
+                offset, readsize, dims, ds->chunk->data);
     }
     else if (r->sel->type == ADIOS_SELECTION_POINTS)
     {
@@ -1386,13 +1521,13 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
         while (!err && k < r->sel->u.points.npoints) {
             // pick and read k-th point individually
             for (i=0; i<var->ndims; i++) {
-                offset[i]    = (int) r->sel->u.points.points[k*var->ndims+i];
+                offset[i]    = r->sel->u.points.points[k*var->ndims+i];
                 readsize[i]  = 1;
             }
 
             err = adios_read_dimes_get_data(ds_name, var->type, ds->current_step, ds->mpi_rank, 
                     var->ndims, futils_is_called_from_fortran(),
-                    offset, readsize, ds->chunk->data+k*elemsize);
+                    offset, readsize, dims, ds->chunk->data+k*elemsize);
             k++;
         }
     }
@@ -1444,6 +1579,9 @@ int adios_read_dimes_perform_reads (const ADIOS_FILE *fp, int blocking)
         // remove head from list
         r = ds->req_list;
         ds->req_list = ds->req_list->next;
+        // FIXME: if we allocated start/count arrays in schedule read for r->sel,
+        // we need to manually free them here
+        common_read_selection_delete(r->sel);
         free(r);
         ds->nreq--;
     }
@@ -1494,53 +1632,71 @@ int adios_read_dimes_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk
 }
 
 
-/* Tell the DataSpaces order of dimensions for a 1-3 dim array written from Fortran or C.
+/* Tell the DataSpaces order of dimensions for a 1 - MAX_DS_NDIM dim array written from Fortran or C.
    unpack=1: the reverse of packing (to retrieve the original order).
-   didx should be an int [3] array in any case.
+   didx should be an int [MAX_DS_NDIM] array in any case.
 */
 void dimes_dimension_ordering(int ndims, int is_app_fortran, int unpack, int *didx)
 {
-    /* Order of dimensions: in DataSpaces: slow, fast, slowest
-       Fortran: i,j,k --> j, i, k  = lb[1], lb[0], lb[2]
-                i,j   --> j, i     = lb[1], lb[0], lb[2]=1
-                i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1
-       C:       i,j,k --> j, k, i  = lb[1], lb[2], lb[0]
-                i,j   --> i, j     = lb[0], lb[1], lb[2]=1
-                i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1 (same as Fortran)
-
-       unpack: C(i,j,k) ordering applied twice does not result in the original order
-               so we need to have a reverse mapping for this case.
-               For all the other cases, applying twice results in the same order
-               even for packing from Fortran and unpacking to C, and vice versa.
-               F(i,j,k) -(pack)-> DS(j,i,k) -(unpack)-> C(k,j,i) or F(i,j,k)
-               C(i,j,k) -(pack)-> DS(j,k,i) -(unpack)-> C(i,j,k) or F(k,j,i)
-               F(i,j)   -(pack)-> DS(j,i)   -(unpack)-> C(j,i)   or F(i,j)
-               C(i,j)   -(pack)-> DS(i,j)   -(unpack)-> C(i,j)   or F(j,i)
-               F(i)     -(pack)-> DS(1,i)   -(unpack)-> C(i,(1)) or F(i,(1))
-               C(i)     -(pack)-> DS(1,i)   -(unpack)-> C(i,(1)) or F(i,(1))
+    /* Order of dimensions: in DataSpaces: fast --> slow --> slowest
+       For example: 
+       Fortran: i,j,k --> i, j, k  = lb[0], lb[1], lb[2]
+                i,j   --> i, j     = lb[0], lb[1]
+                i     --> i        = lb[0]
+       C:       i,j,k --> k, j, i  = lb[2], lb[1], lb[0]
+                i,j   --> j, i     = lb[1], lb[0]
+                i     --> i        = lb[0] 
     */
-
-    if (ndims == 0) {
-        didx[0] = 0; didx[1] = 1; didx[2] = 2;
-    } else if (is_app_fortran || ndims == 1) {
-        /* Flip 1st and 2nd dimension for DataSpaces representation
-           for any Fortran writings and for any 1D array :
-           Fortran: i,j,k --> j, i, k  = lb[1], lb[0], lb[2]
-           C:       i     --> 1, i     = lb[1]=1, lb[0], lb[2]=1 
-        */
-        didx[0] = 1; didx[1] = 0; didx[2] = 2;
-    } else if (ndims == 2) {
-        /* C: i,j   --> i, j     = lb[0], lb[1], lb[2]=1 */
-        didx[0] = 0; didx[1] = 1; didx[2] = 2;
-    } else { // (ndims == 3) 
-        if (!unpack) {
-            /* C: i,j,k --> j, k, i  = lb[1], lb[2], lb[0] */
-            didx[0] = 1; didx[1] = 2; didx[2] = 0;
-        } else {
-            /* DataSpaces x,y,z --> z,x,y  (ijk->kij, or jki->ijk) */
-            didx[0] = 2; didx[1] = 0; didx[2] = 1;
+    int i;
+    // initialize didx[]
+    for (i = 0; i < MAX_DS_NDIM; i++) {
+        didx[i] = i;
+    }
+    
+    if (ndims == 0) return;
+    if (is_app_fortran) {
+        for (i = 0; i < ndims; i++) {
+            didx[i] = i;
+        }
+    } else {
+        for (i = 0; i < ndims; i++) {
+            didx[i] = ndims-1-i;
         }
     }
+
+    return;
+}
+
+void dimes_ints_to_str (int ndim, int *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!ndim) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%d", values[0]);
+    for (i=1; i<ndim; i++)
+    {
+        sprintf (v,",%d", values[i]);
+        strcat (s,v);
+    }
+}
+
+void dimes_int64s_to_str(int ndim, uint64_t *values, char *s)
+{
+    int i;
+    char v[32];
+    if (!ndim) {
+        s[0] = '\0';
+        return;
+    }
+    sprintf(s,"%llu", values[0]);
+    for (i=1; i<ndim; i++)
+    {
+        sprintf (v,",%llu", values[i]);
+        strcat (s,v);
+    }
 }
 
 int adios_read_dimes_get_attr_byid (const ADIOS_FILE * fp, int attrid, 
@@ -1574,7 +1730,7 @@ void adios_read_dimes_reset_dimension_order (const ADIOS_FILE *fp, int is_fortra
 }
 
 void adios_read_dimes_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, 
-            char ***group_namelist, int **nvars_per_group, int **nattrs_per_group) 
+            char ***group_namelist, uint32_t **nvars_per_group, uint32_t **nattrs_per_group) 
 {
     struct dimes_data_struct * ds;
     if (fp) {
diff --git a/src/read/read_flexpath.c b/src/read/read_flexpath.c
index a73eb75..787bbc7 100644
--- a/src/read/read_flexpath.c
+++ b/src/read/read_flexpath.c
@@ -39,6 +39,7 @@
 #include "public/adios_read_v2.h"
 #include "core/adios_read_hooks.h"
 #include "core/adios_logger.h"
+#include "core/common_read.h"
 #include "public/adios_error.h"
 #include "core/flexpath.h"
 
@@ -68,7 +69,7 @@ typedef struct _bridge_info
     EVsource var_source;
     EVsource op_source;
     int their_num;
-    char * contact;
+    char *contact;
     int created;
     int opened;
     int step;
@@ -78,13 +79,10 @@ typedef struct _bridge_info
 typedef struct _flexpath_var_chunk
 {
     int has_data;
-    int rank;
+    int rank; // the writer's rank this chunk represents. not used or needed right now
     void *data;
     void *user_buf;
-    uint64_t *local_bounds; // nodims
-    uint64_t *global_bounds; // ndims
-    uint64_t *global_offsets; // ndims
-} flexpath_var_chunk, *flexpath_var_chunk_p;
+} flexpath_var_chunk;
 
 typedef struct _flexpath_var
 {
@@ -95,8 +93,8 @@ typedef struct _flexpath_var
     enum ADIOS_DATATYPES type;
     uint64_t type_size; // type size, not arrays size
 
-    int time_dim; // -1 means no time dimension
-    int num_dims;
+    int time_dim; // -1 means it is not a time dimension
+    int ndims;
     uint64_t *global_dims; // ndims size (if ndims>0)
     uint64_t *local_dims; // for local arrays
     uint64_t array_size; // not relevant for scalars
@@ -115,8 +113,8 @@ typedef struct _flexpath_var
 
 typedef struct _flexpath_reader_file
 {
-    char * file_name;
-    char * group_name; // assuming one group per file right now.
+    char *file_name;
+    char *group_name; // assuming one group per file right now.
 
     EVstone stone;
 
@@ -166,38 +164,8 @@ flexpath_read_data* fp_read_data = NULL;
 
 /********** Helper functions. **********/
 
-static double dgettimeofday( void )
+void build_bridge(bridge_info* bridge) 
 {
-#ifdef HAVE_GETTIMEOFDAY
-    double timestamp;
-    struct timeval now;
-    gettimeofday(&now, NULL);
-    timestamp = now.tv_sec + now.tv_usec* 1.0e-6 ;
-    return timestamp;
-#else
-    return -1;
-#endif
-}
-
-static uint64_t 
-get_timestamp_mili()
-{
-    struct timespec stamp;
-#ifdef __MACH__
-    clock_serv_t cclock;
-    mach_timespec_t mts;
-    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
-    clock_get_time(cclock, &mts);
-    mach_port_deallocate(mach_task_self(), cclock);
-    stamp.tv_sec = mts.tv_sec;
-    stamp.tv_nsec = mts.tv_nsec;
-#else
-    clock_gettime(CLOCK_MONOTONIC, &stamp);
-#endif
-    return ((stamp.tv_sec * 1000000000) + stamp.tv_nsec)/1000000;
-}
-
-void build_bridge(bridge_info* bridge) {
     attr_list contact_list = attr_list_from_string(bridge->contact);
     if(bridge->created == 0){
 	bridge->bridge_stone =
@@ -282,16 +250,29 @@ new_flexpath_reader_file(const char *fname)
 
 enum ADIOS_DATATYPES
 ffs_type_to_adios_type(const char *ffs_type)
+
 {
-    if(!strcmp("integer", ffs_type))
+    char *bracket = "[";
+    size_t posfound = strcspn(ffs_type, bracket);
+    char *filtered_type = NULL;
+    if (strlen(ffs_type) == strlen(bracket)) {
+        filtered_type = strdup(ffs_type);
+    }
+    else {
+        filtered_type = malloc(posfound+1);
+        memset(filtered_type, '\0', posfound+1);
+        filtered_type = strncpy(filtered_type, ffs_type, posfound);       
+    }
+
+    if (!strcmp("integer", filtered_type))
 	return adios_integer;
-    else if(!strcmp("float", ffs_type))
+    else if(!strcmp("float", filtered_type))
 	return adios_real;
-    else if(!strcmp("string", ffs_type))
+    else if(!strcmp("string", filtered_type))
 	return adios_string;
-    else if(!strcmp("double", ffs_type))
+    else if(!strcmp("double", filtered_type))
 	return adios_double;
-    else if(!strcmp("char", ffs_type))
+    else if(!strcmp("char", filtered_type))
 	return adios_byte;
     else
 	return adios_unknown;
@@ -306,7 +287,7 @@ convert_var_info(flexpath_var * fpvar,
     int i;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;    
     v->type = fpvar->type;
-    v->ndim = fpvar->num_dims;
+    v->ndim = fpvar->ndims;
     // needs to change. Has to get information from write.
     v->nsteps = 1;
     v->nblocks = malloc(sizeof(int)*v->nsteps);
@@ -319,7 +300,8 @@ convert_var_info(flexpath_var * fpvar,
 	int value_size = fpvar->type_size;	
 	v->value = malloc(value_size);
 	if(!v->value) {
-	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
+	    adios_error(err_no_memory, 
+			"Cannot allocate buffer in adios_read_flexpath_inq_var()");
 	    return NULL;
 	}
 	flexpath_var_chunk * chunk = &fpvar->chunks[0];
@@ -328,11 +310,12 @@ convert_var_info(flexpath_var * fpvar,
     }else{ // arrays
 	v->dims = (uint64_t*)malloc(v->ndim * sizeof(uint64_t));
 	if(!v->dims) {
-	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
+	    adios_error(err_no_memory, 
+			"Cannot allocate buffer in adios_read_flexpath_inq_var()");
 	    return NULL;
 	}
-	// broken.  fix.
-	int cpysize = fpvar->num_dims*sizeof(uint64_t);
+	// broken.  fix. -- why did I put this comment here?
+	int cpysize = fpvar->ndims*sizeof(uint64_t);
 	if(fpvar->global_dims){
 	    v->global = 1;
 	    memcpy(v->dims, fpvar->global_dims, cpysize);
@@ -344,30 +327,11 @@ convert_var_info(flexpath_var * fpvar,
     return v;
 }
 
-// compare used-provided varname with the full path name of variable
-static int
-compare_var_name (const char *varname, const flexpath_var *v)
-{
-    if (varname[0] == '/') { // varname is full path
-        char fullpath[256];
-        if(!strcmp(v->varpath, "/")) {
-            sprintf(fullpath, "/%s", v->varname);
-        }
-        else {
-            sprintf(fullpath, "%s/%s", v->varpath, v->varname);
-        }
-        return strcmp(fullpath, varname);
-    }
-    else { // varname doesn't include path
-        return strcmp(v->varname, varname);
-    }
-}
-
 flexpath_var *
 find_fp_var(flexpath_var * var_list, const char * varname)
 {
     while(var_list){
-	if(!compare_var_name(varname, var_list)){
+	if(!strcmp(varname, var_list->varname)){
 	    return var_list;
 	}
 	var_list = var_list->next;
@@ -444,11 +408,31 @@ calc_ffspacket_size(FMField *f, attr_list attrs, void *buffer)
     return size;
 }
 
+void
+print_displacement(array_displacements *disp, int myrank)
+{
+    printf("rank: %d, writer displacements for writer: %d\n", myrank, disp->writer_rank);
+    printf("\tndims: %d, pos: %d\n", disp->ndims, (int)disp->pos);
+    
+    int i;
+    printf("\tstarts: ");
+    for (i = 0; i<disp->ndims; i++) {
+	printf("%d ", (int)disp->start[i]);
+    }
+    printf("\n");
+    printf("\tcounts: ");
+    for (i = 0; i<disp->ndims; i++) {
+	printf("%d ", (int)disp->count[i]);
+    }
+    printf("\n");
+}
+
 /*
  * Finds the array displacements for a writer identified by its rank.
  */
 array_displacements*
-find_displacement(array_displacements* list, int rank, int num_displ){
+find_displacement(array_displacements *list, int rank, int num_displ)
+{
     int i;
     for(i=0; i<num_displ; i++){
 	if(list[i].writer_rank == rank)
@@ -551,17 +535,17 @@ int
 need_writer(
     flexpath_reader_file *fp, 
     int writer, 
-    const ADIOS_SELECTION* sel, 
+    const ADIOS_SELECTION *sel, 
     evgroup_ptr gp, 
-    char* varname) 
+    char *varname) 
 {    
     //select var from group
-    global_var * gvar = find_gbl_var(gp->vars, varname, gp->num_vars);
+    global_var *gvar = find_gbl_var(gp->vars, varname, gp->num_vars);
 
     //for each dimension
     int i=0;
     offset_struct var_offsets = gvar->offsets[0];
-    for(i=0; i< var_offsets.offsets_per_rank; i++){      
+    for (i=0; i< var_offsets.offsets_per_rank; i++) {      
 	int pos = writer*(var_offsets.offsets_per_rank) + i;
 
         uint64_t sel_offset = sel->u.bb.start[i];
@@ -570,14 +554,17 @@ need_writer(
         uint64_t rank_offset = var_offsets.local_offsets[pos];
         uint64_t rank_size = var_offsets.local_dimensions[pos];        
 	
-        if((rank_offset <= sel_offset) && (rank_offset + rank_size - 1 >=sel_offset)) {
+	/* printf("need writer rank: %d writer: %d sel_start: %d sel_count: %d rank_offset: %d rank_size: %d\n", */
+	/*        fp->rank, writer, (int)sel_offset, (int)sel_size, (int)rank_offset, (int)rank_size); */
+
+        if ((rank_offset <= sel_offset) && (rank_offset + rank_size - 1 >=sel_offset)) {
 	     log_debug("matched overlap type 1\n");
         }
 
-        else if((rank_offset <= sel_offset + sel_size - 1) && \
+        else if ((rank_offset <= sel_offset + sel_size - 1) && \
 		(rank_offset+rank_size>=sel_offset+sel_size-1)) {
-        }else if((sel_offset <= rank_offset) && (rank_offset+rank_size<= sel_offset+sel_size-1)) {
-        }else {
+        } else if ((sel_offset <= rank_offset) && (rank_offset+rank_size<= sel_offset+sel_size-1)) {
+        } else {
             return 0;
         }
     }
@@ -631,7 +618,9 @@ setup_flexpath_vars(FMField *f, int *num)
 	flexpath_var *temp = vars;
 	curr_var->next = temp;
 	vars = curr_var;
-	var_count++;
+	if (strncmp(f->field_name, "FPDIM", 5)) {
+	    var_count++;
+	}
 	f++;
     }
     *num = var_count;
@@ -771,6 +760,9 @@ group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
     evgroup *msg = (evgroup*)vevent;
     ADIOS_FILE *adiosfile = client_data;
     flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    if (fp->group_name == NULL) {
+        fp->group_name = strdup(msg->group_name);
+    }
     fp->gp = msg;
     int i;
     for(i = 0; i<msg->num_vars; i++){
@@ -782,9 +774,9 @@ group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
 	    uint64_t *local_offsets = offset->local_offsets;
 	    uint64_t *global_dimensions = offset->global_dimensions;
 
-	    fpvar->num_dims = offset->offsets_per_rank;
-	    fpvar->global_dims = malloc(sizeof(uint64_t)*fpvar->num_dims);
-	    memcpy(fpvar->global_dims, global_dimensions, sizeof(uint64_t)*fpvar->num_dims);
+	    fpvar->ndims = offset->offsets_per_rank;
+	    fpvar->global_dims = malloc(sizeof(uint64_t)*fpvar->ndims);
+	    memcpy(fpvar->global_dims, global_dimensions, sizeof(uint64_t)*fpvar->ndims);
 	}else{
 	    adios_error(err_corrupted_variable, 
 			"Mismatch between global variables and variables specified %s.",
@@ -803,10 +795,6 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
     ADIOS_FILE *adiosfile = client_data;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
 
-    double data_end = dgettimeofday();
-    if(fp->time_in == 0.00)
-	fp->time_in = data_end; // used for perf measurements only
-
     int condition;
     int writer_rank;          
     int flush_id;
@@ -816,9 +804,6 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
     get_int_attr(attrs, attr_atom_from_string(FP_RANK_ATTR_NAME), &writer_rank); 
     get_int_attr(attrs, attr_atom_from_string("fp_flush_id"), &flush_id);
 
-
-    double format_start = dgettimeofday();
-
     FMContext context = CMget_FMcontext(cm);
     void *base_data = FMheader_skip(context, vevent);
     FMFormat format = FMformat_from_ID(context, vevent);  
@@ -841,7 +826,9 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 	adiosfile->var_namelist = malloc(var_count * sizeof(char *));
 	int i = 0;
 	while(f->field_name != NULL) {
-	    adiosfile->var_namelist[i++] = strdup(f->field_name);
+	    if (strncmp(f->field_name, "FPDIM", 5)) {	    
+		adiosfile->var_namelist[i++] = strdup(f->field_name);
+	    }
 	    f++;
 	}
 	adiosfile->nvars = var_count;
@@ -862,7 +849,7 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
     	}
 
 	int num_dims = get_ndims_attr(f->field_name, attrs);
-    	var->num_dims = num_dims;
+    	var->ndims = num_dims;
 
 	flexpath_var_chunk *curr_chunk = &var->chunks[0];
 
@@ -871,14 +858,13 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 	    if(var->sel->type == ADIOS_SELECTION_WRITEBLOCK){
 		if(num_dims == 0){ // writeblock selection for scalar
 		    if(var->sel->u.block.index == writer_rank){
-			void *tmp_data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
+			void *tmp_data = get_FMfieldAddr_by_name(f, 
+								 f->field_name, 
+								 base_data);
 			memcpy(var->chunks[0].user_buf, tmp_data, f->field_size);
 		    }
 		}
 		else { // writeblock selection for arrays
-		    /* if(var->num_dims == 0){ */
-		    /* 	var->global_dims = malloc(sizeof(uint64_t)*num_dims); */
-		    /* } */
 		    if(var->sel->u.block.index == writer_rank){
 			var->array_size = var->type_size;
 			int i;
@@ -895,38 +881,45 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 			    get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
 	
 			    FMField *temp_field = find_field_by_name(dim, f);
-			    if(!temp_field){
+			    if (!temp_field) {
 				adios_error(err_corrupted_variable,
 					    "Could not find fieldname: %s\n",
 					    dim);
-			    }
-			    else{    			    
-				int *temp_data = get_FMfieldAddr_by_name(temp_field,
-									 temp_field->field_name,
-									 base_data);			    
+			    } else {    			    
+				int *temp_data = get_FMfieldAddr_by_name
+				    (
+					temp_field,
+					temp_field->field_name,
+					base_data
+				    );
+
 				uint64_t dim = (uint64_t)(*temp_data);
 				var->array_size = var->array_size * dim;
 			    }
 			}    	       
-			void *arrays_data  = get_FMPtrField_by_name(f, f->field_name, base_data, 1);
+			void *arrays_data  = get_FMPtrField_by_name(f, 
+								    f->field_name, 
+								    base_data, 
+								    1);
 			memcpy(var->chunks[0].user_buf, arrays_data, var->array_size);
 		    }
 		}
 	    }
-	    else if(var->sel->type == ADIOS_SELECTION_BOUNDINGBOX){
-		if(num_dims == 0){ // scalars; throw error
-		    adios_error(err_offset_required, 
-				"Only scalars can be scheduled with write_block selection.\n");
-		}
-		else{ // arrays
+	    else if (var->sel->type == ADIOS_SELECTION_BOUNDINGBOX) {
+
+		if (var->ndims > 0) { // arrays
 		    int i;
 		    global_var *gv = find_gbl_var(fp->gp->vars,
 						  var->varname,
-						  fp->gp->num_vars);                
-		    array_displacements * disp = find_displacement(var->displ,
-								   writer_rank,
-								   var->num_displ);
-		    if(disp){ // does this writer hold a chunk we've asked for, for this var?
+						  fp->gp->num_vars);
+
+		    array_displacements *disp = find_displacement(var->displ,
+								  writer_rank,
+								  var->num_displ);
+		    if (disp) { // does this writer hold a chunk we've asked for
+
+		      //print_displacement(disp, fp->rank);
+
 			uint64_t *temp = gv->offsets[0].local_dimensions;
 			int offsets_per_rank = gv->offsets[0].offsets_per_rank;
 			uint64_t *writer_sizes = &temp[offsets_per_rank * writer_rank];
@@ -946,7 +939,7 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 							 f->field_size,
 							 0,
 							 writer_array,
-							 reader_array+reader_start_pos);		    
+							 reader_array+reader_start_pos);
 		    }
 		}
 	    }
@@ -1054,6 +1047,7 @@ 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){
@@ -1098,8 +1092,6 @@ adios_read_flexpath_open(const char * fname,
     /* Gather the contact info from the other readers
        and write it to a file. Create a ready file so
        that the writer knows it can parse this file. */
-    double setup_start = dgettimeofday();
-
     char writer_ready_filename[200];
     char writer_info_filename[200];
     char reader_ready_filename[200];
@@ -1191,8 +1183,6 @@ adios_read_flexpath_open(const char * fname,
     /* Init with a writer to get initial scalar
        data so we can handle inq_var calls and
        also populate the ADIOS_FILE struct. */
-
-    double bridge_start = MPI_Wtime();
     if(fp->size < num_bridges){
     	int mystart = (num_bridges/fp->size) * fp->rank;
     	int myend = (num_bridges/fp->size) * (fp->rank+1);
@@ -1257,15 +1247,20 @@ void adios_read_flexpath_release_step(ADIOS_FILE *adiosfile) {
     flexpath_var *tmpvars = fp->var_list;
     while(tmpvars){
 
-	if(tmpvars->num_dims > 0){
+	if(tmpvars->ndims > 0){
 	    free(tmpvars->global_dims);	   
-	    tmpvars->num_dims = 0;
+	    tmpvars->ndims = 0;
 	}
-	free_displacements(tmpvars->displ, tmpvars->num_displ);
-	tmpvars->displ = NULL;
-	if(tmpvars->sel){
-	    free_selection(tmpvars->sel);
+	if (tmpvars->displ) {
+	    free_displacements(tmpvars->displ, tmpvars->num_displ);
+	    tmpvars->displ = NULL;
+	}
+
+	if (tmpvars->sel) {
+	    common_read_selection_delete(tmpvars->sel);
+	    tmpvars->sel = NULL;
 	}
+
 	tmpvars->sel = NULL;	
 	for(i=0; i<tmpvars->num_chunks; i++){	   
 	    flexpath_var_chunk *chunk = &tmpvars->chunks[i];	    	    
@@ -1274,13 +1269,6 @@ void adios_read_flexpath_release_step(ADIOS_FILE *adiosfile) {
 		chunk->data = NULL;
 		chunk->has_data = 0;		
 	    }
-	    free(chunk->local_bounds);
-	    free(chunk->global_offsets);
-	    free(chunk->global_bounds);
-
-	    chunk->global_offsets = NULL;
-	    chunk->global_bounds = NULL;
-	    chunk->local_bounds = NULL;
 	    chunk->rank = 0;
 	}
 	tmpvars = tmpvars->next;
@@ -1304,7 +1292,6 @@ adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_
 	send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
     }
 
-    double advclose_start = dgettimeofday();
     int i=0;    
     for(i=0; i<fp->num_bridges; i++) {
         if(fp->bridges[i].created && fp->bridges[i].opened) {
@@ -1314,28 +1301,22 @@ adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_
     }
     MPI_Barrier(fp->comm);
 
-    double advclose_end = dgettimeofday();
     count = 0;
     adiosfile->current_step++;
     fp->mystep = adiosfile->current_step;
-
-    
-    double advopen_start = dgettimeofday();
+   
     for(i=0; i<fp->num_bridges; i++){
 	if(fp->bridges[i].created && !fp->bridges[i].opened){	    
 	    send_open_msg(fp, i);
 	    count++;
         }
     }   
-    double advopen_end = dgettimeofday();
     // need to remove selectors from each var now.
     send_flush_msg(fp, fp->writer_coordinator, DATA, 1);
       
     // should only happen if there are more steps available.
     // writer should have advanced.
-    double offset_start = dgettimeofday();
     send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
-    double offset_end = dgettimeofday();    
     return 0;
 }
 
@@ -1355,21 +1336,15 @@ int adios_read_flexpath_close(ADIOS_FILE * fp)
     that the user maintains a copy of. 
     */
     flexpath_var *v = file->var_list;
-    while(v){        	
+    while (v) {        	
     	// free chunks; data has already been copied to user
     	int i;	
     	for(i = 0; i<v->num_chunks; i++){    		    
     	    flexpath_var_chunk *c = &v->chunks[i];	    
 	    if(!c)
 		log_error("FLEXPATH: %s This should not happen! line %d\n",__func__,__LINE__);
-	    //free(c->data);
-	    free(c->global_bounds);		
-	    free(c->global_offsets);
-	    free(c->local_bounds);
+	    //free(c->data);	    
 	    c->data = NULL;
-	    c->global_bounds = NULL;
-	    c->global_offsets = NULL;
-	    c->local_bounds = NULL;
 	    free(c);
 	}
 	flexpath_var *tmp = v->next;	
@@ -1386,7 +1361,22 @@ ADIOS_FILE *adios_read_flexpath_fopen(const char *fname, MPI_Comm comm) {
 
 int adios_read_flexpath_is_var_timed(const ADIOS_FILE* fp, int varid) { return 0; }
 
-void adios_read_flexpath_get_groupinfo(const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group) {}
+void adios_read_flexpath_get_groupinfo(
+    const ADIOS_FILE *adiosfile, 
+    int *ngroups, 
+    char ***group_namelist, 
+    uint32_t **nvars_per_group, 
+    uint32_t **nattrs_per_group) 
+{
+    flexpath_reader_file *fp;
+    if (adiosfile) {
+        fp = (flexpath_reader_file *) adiosfile->fh;
+        *ngroups = 1;
+        *group_namelist = (char **) malloc (sizeof (char*));
+        *group_namelist[0] = strdup (fp->group_name);
+    }
+
+}
 
 int adios_read_flexpath_check_reads(const ADIOS_FILE* fp, ADIOS_VARCHUNK** chunk) { log_debug( "flexpath:adios function check reads\n"); return 0; }
 
@@ -1399,7 +1389,6 @@ int adios_read_flexpath_perform_reads(const ADIOS_FILE *adiosfile, int blocking)
     int num_sendees = fp->num_sendees;
     int total_sent = 0;
     fp->time_in = 0.00;
-    double start_poll = MPI_Wtime();
     for(i = 0; i<num_sendees; i++){
 	pthread_mutex_lock(&fp->data_mutex);
 	int sendee = fp->sendees[i];	
@@ -1416,11 +1405,25 @@ int adios_read_flexpath_perform_reads(const ADIOS_FILE *adiosfile, int blocking)
 	}
 
     }
-    double end_poll = MPI_Wtime();
 
     free(fp->sendees);
     fp->sendees = NULL;    
     fp->num_sendees = 0;
+    
+    flexpath_var *tmpvars = fp->var_list;
+    while (tmpvars) {
+	if (tmpvars->displ) {
+	    free_displacements(tmpvars->displ, tmpvars->num_displ);
+	    tmpvars->displ = NULL;
+	}
+    
+	if (tmpvars->sel) {
+	    common_read_selection_delete(tmpvars->sel);
+	    tmpvars->sel = NULL;
+	}
+    
+	tmpvars = tmpvars->next;
+    }
     fp_log("FUNC", "leaving perform_reads.\n");
     return 0;
 }
@@ -1447,25 +1450,24 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
 				       void *data)
 {   
     fp_log("FUNC", "entering schedule_read_byid\n");
-    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
-    flexpath_var * var = fp->var_list;
-    while(var){
-        if(var->id == varid)
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    flexpath_var *fpvar = fp->var_list;
+
+    while (fpvar) {
+        if (fpvar->id == varid)
         	break;
         else
-	    var=var->next;
+	    fpvar=fpvar->next;
     }
-    if(!var){
+    if(!fpvar){
         adios_error(err_invalid_varid,
 		    "Invalid variable id: %d\n",
 		    varid);
         return err_invalid_varid;
     }    
     //store the user allocated buffer.
-    flexpath_var_chunk *chunk = &var->chunks[0];  
-    chunk->user_buf = data;
-    var->start_position = 0;
-    if(nsteps != 1){
+    flexpath_var_chunk *chunk = &fpvar->chunks[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", 
@@ -1475,54 +1477,73 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
     // this is done so that the user can do multiple schedule_read/perform_reads
     // within before doing release/advance step. Might need a better way to 
     // manage the ADIOS selections.
-    if(var->sel){
-	free_selection(var->sel);
+    if (fpvar->sel) {
+	common_read_selection_delete(fpvar->sel);
+	fpvar->sel = NULL;
+    }
+    if (!sel) { // null selection; read whole variable
+	//TODO: This will have to be fixed for local arrays,
+	// but dataspaces doesn't have local arrays so there
+	// are no use cases for it. 
+	uint64_t *starts = calloc(fpvar->ndims, sizeof(uint64_t));
+	uint64_t *counts = calloc(fpvar->ndims, sizeof(uint64_t));
+	memcpy(counts, fpvar->global_dims, fpvar->ndims*sizeof(uint64_t));
+	fpvar->sel = common_read_selection_boundingbox(fpvar->ndims, starts, counts);
+    } else {
+	fpvar->sel = copy_selection(sel);
     }
-    var->sel = copy_selection(sel);
 
-    switch(var->sel->type)
+    switch(fpvar->sel->type)
     {
     case ADIOS_SELECTION_WRITEBLOCK:
     {
-	int writer_index = var->sel->u.block.index;
-	if(writer_index > fp->num_bridges){
+        chunk->user_buf = data;
+        fpvar->start_position = 0;
+	int writer_index = fpvar->sel->u.block.index;
+	if (writer_index > fp->num_bridges) {
 	    adios_error(err_out_of_bound,
 			"No process exists on the writer side matching the index.\n");
 	    return err_out_of_bound;
 	}
-	send_var_message(fp, writer_index, var->varname);
+	send_var_message(fp, writer_index, fpvar->varname);
 	break;
     }
     case ADIOS_SELECTION_BOUNDINGBOX:
     {   
-	free_displacements(var->displ, var->num_displ);
-	var->displ = NULL;
-        int j=0;
-	int need_count = 0;
-	array_displacements * all_disp = NULL;
-	uint64_t pos = 0;
-	double sched_start = MPI_Wtime();
-        for(j=0; j<fp->num_bridges; j++) {
-            int destination=0;	    	    
-            if(need_writer(fp, j, var->sel, fp->gp, var->varname)==1){           
-		uint64_t _pos = 0;
-		need_count++;
-                destination = j;
-		global_var *gvar = find_gbl_var(fp->gp->vars, var->varname, fp->gp->num_vars);
-		// TODO: memory leak here. have to free these at some point.
-		array_displacements *displ = get_writer_displacements(j, var->sel, gvar, &_pos);
-		displ->pos = pos;
-		_pos *= (uint64_t)var->type_size; 
-		pos += _pos;
+        // boundingbox for a scalar; handle it as we do with inq_var
+        if (fpvar->ndims == 0) {                        
+            memcpy(data, chunk->data, fpvar->type_size);
+        } else {
+            chunk->user_buf = data;
+            fpvar->start_position = 0;
+            free_displacements(fpvar->displ, fpvar->num_displ);
+            fpvar->displ = NULL;
+            int j=0;
+            int need_count = 0;
+            array_displacements *all_disp = NULL;
+            uint64_t pos = 0;
+            for (j=0; j<fp->num_bridges; j++) {
+                int destination=0;	    	    
+                if(need_writer(fp, j, fpvar->sel, fp->gp, fpvar->varname)==1){           
+		    //printf("\t\trank: %d need_writer: %d\n", fp->rank, j);
+                    uint64_t _pos = 0;
+                    need_count++;
+                    destination = j;
+                    global_var *gvar = find_gbl_var(fp->gp->vars, fpvar->varname, fp->gp->num_vars);
+                    // displ is freed in release_step.
+                    array_displacements *displ = get_writer_displacements(j, fpvar->sel, gvar, &_pos);
+                    displ->pos = pos;
+                    _pos *= (uint64_t)fpvar->type_size; 
+                    pos += _pos;
 		
-		all_disp = realloc(all_disp, sizeof(array_displacements)*need_count);
-		all_disp[need_count-1] = *displ;
-		send_var_message(fp, j, var->varname);				
+                    all_disp = realloc(all_disp, sizeof(array_displacements)*need_count);
+                    all_disp[need_count-1] = *displ;
+                    send_var_message(fp, j, fpvar->varname);				
+                }
             }
-	}
-	double sched_end = MPI_Wtime();
-	var->displ = all_disp;
-	var->num_displ = need_count;
+            fpvar->displ = all_disp;
+            fpvar->num_displ = need_count;
+        }
         break;
     }
     case ADIOS_SELECTION_AUTO:
@@ -1589,25 +1610,25 @@ adios_read_flexpath_inq_var(const ADIOS_FILE * adiosfile, const char* varname)
 {
     fp_log("FUNC", "entering flexpath_inq_var\n");
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    ADIOS_VARINFO *v = malloc(sizeof(ADIOS_VARINFO));
-
-    if(!v) {
-        adios_error(err_no_memory, 
-		    "Cannot allocate buffer in adios_read_datatap_inq_var()");
-        return NULL;
-    }
-    memset(v, 0, sizeof(ADIOS_VARINFO));
+    ADIOS_VARINFO *v = NULL;
     
     flexpath_var *fpvar = find_fp_var(fp->var_list, varname);
-    if(fpvar) {
+    if (fpvar) {
+        v = calloc(1, sizeof(ADIOS_VARINFO));
+
+        if (!v) {
+            adios_error(err_no_memory, 
+                        "Cannot allocate buffer in adios_read_flexpath_inq_var()");
+            return NULL;
+        }           
+
 	v = convert_var_info(fpvar, v, varname, adiosfile);
 	fp_log("FUNC", "leaving flexpath_inq_var\n");
-	return v;
     }
     else {
         adios_error(err_invalid_varname, "Cannot find var %s\n", varname);
-        return NULL;
     }
+    return v;
 }
 
 ADIOS_VARINFO* 
diff --git a/src/transforms/adios_transform_alacrity_read.c b/src/transforms/adios_transform_alacrity_read.c
index 68ffdf4..9b83c3b 100644
--- a/src/transforms/adios_transform_alacrity_read.c
+++ b/src/transforms/adios_transform_alacrity_read.c
@@ -11,6 +11,8 @@
 
 #include "alacrity.h"
 
+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)
 {
diff --git a/src/transforms/adios_transform_alacrity_write.c b/src/transforms/adios_transform_alacrity_write.c
index 0609127..770a9d0 100644
--- a/src/transforms/adios_transform_alacrity_write.c
+++ b/src/transforms/adios_transform_alacrity_write.c
@@ -30,7 +30,7 @@ int adios_transform_alacrity_apply(struct adios_file_struct *fd,
                                    int *wrote_to_shared_buffer)
 {
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff = var->data;
 
     ALEncoderConfig config;
diff --git a/src/transforms/adios_transform_aplod_read.c b/src/transforms/adios_transform_aplod_read.c
index f75e5a8..036ece1 100644
--- a/src/transforms/adios_transform_aplod_read.c
+++ b/src/transforms/adios_transform_aplod_read.c
@@ -40,6 +40,8 @@ typedef struct {
     char *outputBuf;
 } aplod_read_meta_t;
 
+int adios_transform_aplod_is_implemented (void) {return 1;}
+
 int adios_transform_aplod_generate_read_subrequests(adios_transform_read_request *reqgroup,
                                                     adios_transform_pg_read_request *pg_reqgroup)
 {
diff --git a/src/transforms/adios_transform_aplod_write.c b/src/transforms/adios_transform_aplod_write.c
index 2f7cad9..0f3f124 100644
--- a/src/transforms/adios_transform_aplod_write.c
+++ b/src/transforms/adios_transform_aplod_write.c
@@ -33,7 +33,7 @@ int adios_transform_aplod_apply(struct adios_file_struct *fd,
                                 int *wrote_to_shared_buffer)
 {
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff = var->data;
 
     // max size supported is long double
diff --git a/src/transforms/adios_transform_bzip2_read.c b/src/transforms/adios_transform_bzip2_read.c
index 2e75924..dc2017f 100755
--- a/src/transforms/adios_transform_bzip2_read.c
+++ b/src/transforms/adios_transform_bzip2_read.c
@@ -11,6 +11,8 @@
 
 #include "bzlib.h"
 
+int adios_transform_bzip2_is_implemented (void) {return 1;}
+
 int decompress_bzip2_pre_allocated(const void* input_data, const uint64_t input_len,
                                     void* output_data, uint64_t* output_len)
 {
diff --git a/src/transforms/adios_transform_bzip2_write.c b/src/transforms/adios_transform_bzip2_write.c
index b4118a3..5d9d90d 100755
--- a/src/transforms/adios_transform_bzip2_write.c
+++ b/src/transforms/adios_transform_bzip2_write.c
@@ -59,7 +59,7 @@ int adios_transform_bzip2_apply(struct adios_file_struct *fd,
                                 int *wrote_to_shared_buffer)
 {
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff = var->data;
 
     // parse the compressiong parameter
diff --git a/src/transforms/adios_transform_identity_read.c b/src/transforms/adios_transform_identity_read.c
index 646201a..6601e75 100644
--- a/src/transforms/adios_transform_identity_read.c
+++ b/src/transforms/adios_transform_identity_read.c
@@ -12,6 +12,7 @@
 #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"
@@ -21,6 +22,8 @@
 
 #define MAX_DIMS 32
 
+int adios_transform_identity_is_implemented (void) {return 1;}
+
 void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_sel,
                                               const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgbb,
                                               uint64_t *start_off_ptr, uint64_t *end_off_ptr) {
@@ -63,6 +66,11 @@ void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_s
 
         break;
     }
+
+    case ADIOS_SELECTION_WRITEBLOCK:
+    case ADIOS_SELECTION_AUTO:
+        /* These are unsupported */
+        break;
     }
 
     *start_off_ptr = start_off;
diff --git a/src/transforms/adios_transform_identity_write.c b/src/transforms/adios_transform_identity_write.c
index b1570d9..7cbaa04 100644
--- a/src/transforms/adios_transform_identity_write.c
+++ b/src/transforms/adios_transform_identity_write.c
@@ -27,7 +27,7 @@ int adios_transform_identity_apply(struct adios_file_struct *fd, struct adios_va
                                    int use_shared_buffer, int *wrote_to_shared_buffer) {
     // Just use what is already in var->data; size remains the same, and no
     // shared buffer is used
-    *transformed_len = adios_transform_get_pre_transform_var_size(fd->group, var);
+    *transformed_len = adios_transform_get_pre_transform_var_size(var);
     *wrote_to_shared_buffer = 0;
     return 1;
 }
diff --git a/src/transforms/adios_transform_isobar_read.c b/src/transforms/adios_transform_isobar_read.c
index 076fb62..d15b1b0 100755
--- a/src/transforms/adios_transform_isobar_read.c
+++ b/src/transforms/adios_transform_isobar_read.c
@@ -13,6 +13,8 @@
 
 #define ELEMENT_BYTES    8
 
+int adios_transform_isobar_is_implemented (void) {return 1;}
+
 int decompress_isobar_pre_allocated(const void* input_data, const uint64_t input_len,
                                     void* output_data, uint64_t* output_len)
 {
diff --git a/src/transforms/adios_transform_isobar_write.c b/src/transforms/adios_transform_isobar_write.c
index e9a47ff..945d2f3 100755
--- a/src/transforms/adios_transform_isobar_write.c
+++ b/src/transforms/adios_transform_isobar_write.c
@@ -92,7 +92,7 @@ int adios_transform_isobar_apply(struct adios_file_struct *fd,
                                  int *wrote_to_shared_buffer)
 {
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff = var->data;
 
     // parse the compressiong parameter
diff --git a/src/transforms/adios_transform_szip_read.c b/src/transforms/adios_transform_szip_read.c
index b9a7df2..fdd7473 100644
--- a/src/transforms/adios_transform_szip_read.c
+++ b/src/transforms/adios_transform_szip_read.c
@@ -9,6 +9,8 @@
 
 #include "adios_transform_szip.h"
 
+int adios_transform_szip_is_implemented (void) {return 1;}
+
 int decompress_szip_pre_allocated(const void* input_data, const uint64_t input_len,
                                     void* output_data, uint64_t* output_len,
                                     const uint32_t ndims, const uint64_t* dim)
diff --git a/src/transforms/adios_transform_szip_write.c b/src/transforms/adios_transform_szip_write.c
index bdb6b2e..c02912f 100755
--- a/src/transforms/adios_transform_szip_write.c
+++ b/src/transforms/adios_transform_szip_write.c
@@ -60,7 +60,7 @@ int adios_transform_szip_apply(struct adios_file_struct *fd,
                                     int *wrote_to_shared_buffer)
 {
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff = var->data;
 
     // decide the output buffer
diff --git a/src/transforms/adios_transform_zlib_read.c b/src/transforms/adios_transform_zlib_read.c
index 521f36f..30ec644 100755
--- a/src/transforms/adios_transform_zlib_read.c
+++ b/src/transforms/adios_transform_zlib_read.c
@@ -7,11 +7,14 @@
 #include "adios_logger.h"
 #include "adios_transforms_hooks_read.h"
 #include "adios_transforms_reqgroup.h"
+#include "adios_internals.h" // adios_get_type_size()
 
 #ifdef ZLIB
 
 #include "zlib.h"
 
+int adios_transform_zlib_is_implemented (void) {return 1;}
+
 int decompress_zlib_pre_allocated(const void* input_data, 
                                   const uint64_t input_len,
                                   void* output_data, 
diff --git a/src/transforms/adios_transform_zlib_write.c b/src/transforms/adios_transform_zlib_write.c
index 15a18de..cfcf327 100755
--- a/src/transforms/adios_transform_zlib_write.c
+++ b/src/transforms/adios_transform_zlib_write.c
@@ -13,6 +13,7 @@
 
 #include "zlib.h"
 
+#if 0
 static int is_digit_str(char* input_str)
 {
     if(strlen(input_str) > 2)    // at most 2 digits for zlib
@@ -30,6 +31,7 @@ static int is_digit_str(char* input_str)
     }
     return 1;
 }
+#endif
 
 int compress_zlib_pre_allocated(const void* input_data,
                                 const uint64_t input_len,
@@ -76,7 +78,7 @@ int adios_transform_zlib_apply(struct adios_file_struct *fd,
     assert(var->transform_type == adios_transform_zlib);
 
     // Get the input data and data length
-    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
     const void *input_buff= var->data;
 
     // parse the compressiong parameter
@@ -105,7 +107,6 @@ int adios_transform_zlib_apply(struct adios_file_struct *fd,
     uint64_t output_size = input_size; // for compression, at most the original data size
     void* output_buff = NULL;
 
-    uint64_t mem_allowed = 0;
     if (use_shared_buffer)    // If shared buffer is permitted, serialize to there
     {
         *wrote_to_shared_buffer = 1;
diff --git a/src/write/adios_dataspaces.c b/src/write/adios_dataspaces.c
index 0e5aacd..7cce438 100644
--- a/src/write/adios_dataspaces.c
+++ b/src/write/adios_dataspaces.c
@@ -29,13 +29,12 @@
 static int adios_dataspaces_initialized = 0;
 #define MAX_DS_NAMELEN 128
 #define MAX_NUM_OF_FILES 20
-//static char ds_type_var_name[MAX_DS_NAMELEN];
 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;
+    int time_index; // versioning, start from 0
 };
 
 struct adios_ds_data_struct
@@ -43,89 +42,91 @@ struct adios_ds_data_struct
     int rank;   // dataspaces rank or MPI rank if MPI is available
     int peers;  // from xml parameter or group communicator
     int appid;  // from xml parameter or 1
-    int time_index; // versioning in DataSpaces, start from 0
     int n_writes; // how many times adios_write has been called
-    struct adios_dspaces_file_info file_info[MAX_NUM_OF_FILES];
 #if HAVE_MPI
-    MPI_Comm mpi_comm;
+    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 *p)
+static int init_dspaces_file_info(struct adios_ds_data_struct *md)
 {
     int i;
     for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        p->file_info[i].name = NULL;
-        p->file_info[i].time_index = 0;
+        md->file_info[i].name = NULL;
+        md->file_info[i].time_index = 0;
     }
 }
 
-static void free_dspaces_file_info(struct adios_ds_data_struct *p)
+static void free_dspaces_file_info(struct adios_ds_data_struct *md)
 {
     int i;
     for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (p->file_info[i].name) {
-            free(p->file_info[i].name);
+        if (md->file_info[i].name) {
+            free(md->file_info[i].name);
         }
     }
 
     return;
 }
 
-static struct adios_dspaces_file_info* lookup_dspaces_file_info(struct adios_ds_data_struct *p, const char* fname)
+static struct adios_dspaces_file_info* lookup_dspaces_file_info(struct adios_ds_data_struct *md, const char* fname)
 {
-    int i;    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (p->file_info[i].name != NULL &&
-            strcmp(p->file_info[i].name, fname) == 0) {
-            return &p->file_info[i];
+    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 (p->file_info[i].name == NULL) {
-            p->file_info[i].name = malloc(strlen(fname)+1);
-            strcpy(p->file_info[i].name, fname);
-            return &p->file_info[i];
+        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_dspaces (struct adios_ds_data_struct * p, MPI_Comm comm)
+static int connect_to_dspaces (struct adios_ds_data_struct * md, MPI_Comm comm)
 {
     int ret = 0;
     int num_peers;
 
     if (!globals_adios_is_dataspaces_connected()) {
 
-        MPI_Comm_rank (comm, &(p->rank));
+        MPI_Comm_rank (comm, &(md->rank));
         MPI_Comm_size (comm, &num_peers);
 
         // Application ID should be set by the application calling adios_set_application_id()
         int was_set;
-        p->appid = globals_adios_get_application_id (&was_set);
+        md->appid = globals_adios_get_application_id (&was_set);
         if (!was_set)
-            p->appid = 1;
+            md->appid = 1;
 
         log_debug ("adios_dataspaces: rank=%d connect to DATASPACES, peers=%d, appid=%d \n",
-                p->rank, num_peers, p->appid);
+                md->rank, num_peers, md->appid);
 
         //Init the dart client
-        ret = dspaces_init (num_peers, p->appid);
+        ret = dspaces_init (num_peers, md->appid, &md->mpi_comm_init, NULL);
         if (ret) {
-            log_error ("adios_dataspaces: rank=%d Failed to connect to DATASPACES: err=%d,  rank=%d\n", p->rank, ret);        
+            log_error ("adios_dataspaces: rank=%d Failed to connect to DATASPACES: err=%d,  rank=%d\n", md->rank, ret);        
             return ret;
         }
 
 #if ! HAVE_MPI
-        dspaces_rank (&(p->rank));
-        dspaces_peers (&(p->peers));
+        dspaces_rank (&(md->rank));
+        dspaces_peers (&(md->peers));
 #endif
 
-        log_debug ("adios_dataspaces: rank=%d connected to DATASPACES: peers=%d\n", p->rank, p->peers);        
+        log_debug ("adios_dataspaces: rank=%d connected to DATASPACES: peers=%d\n", md->rank, md->peers);        
     }
 
     globals_adios_set_dataspaces_connected_from_writer();
@@ -137,30 +138,52 @@ void adios_dataspaces_init (const PairStruct * parameters,
                      struct adios_method_struct * method
                      )
 {
-    struct adios_ds_data_struct *p = 0;
+    struct adios_ds_data_struct *md = 0;
     if (!adios_dataspaces_initialized)
     {
         adios_dataspaces_initialized = 1;
     }
    
     method->method_data = calloc (1, sizeof (struct adios_ds_data_struct));
-    p = (struct adios_ds_data_struct*)method->method_data;
+    md = (struct adios_ds_data_struct*)method->method_data;
     
     int index, i;
     char temp[64];
 
     //Init the static data structure
-    p->peers = 1;
-    p->appid = -1;
-    p->time_index = 0;
-    p->n_writes = 0;
+    md->peers = 1;
+    md->appid = -1;
+    md->n_writes = 0;
 #if HAVE_MPI
-    p->mpi_comm = MPI_COMM_NULL;
+    md->mpi_comm = MPI_COMM_NULL;
+    md->mpi_comm_init = method->init_comm;
 #endif
-    p->num_of_files = 0;
+    md->num_of_files = 0;
+
+    // process user parameters
+    const PairStruct *p = parameters;
+    while (p) {
+        if (!strcasecmp (p->name, "app_id")) {
+            errno = 0;
+            md->appid = strtol(p->value, NULL, 10);
+            if (md->appid > 0 && !errno) {
+                log_debug ("App ID parameter set to %d for DATASPACES write method\n",
+                            md->appid);
+                globals_adios_set_application_id (md->appid);
+            } else {
+                log_error ("Invalid 'app_id' parameter given to the DATASPACES write "
+                           "method: '%s'\n", p->value);
+            }
+        } else {
+            log_error ("Parameter name %s is not recognized by the DATASPACES read "
+                        "method\n", p->name);
+        }
+        p = p->next;
+    }
+
 
-    init_dspaces_file_info(p);
-    connect_to_dspaces (p, method->init_comm);
+    init_dspaces_file_info(md);
+    connect_to_dspaces (md, method->init_comm);
 
     log_info ("adios_dataspaces_init: done\n");
    
@@ -174,37 +197,37 @@ int adios_dataspaces_open (struct adios_file_struct * fd,
                     )
 {
     int ret = 0;
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
                                                 method->method_data;
-    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(md,fd->name);
     log_info ("adios_dataspaces_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
-    p->mpi_comm = comm;
-    MPI_Comm_rank (p->mpi_comm, &(p->rank));
-    MPI_Comm_size (p->mpi_comm, &(p->peers));
+    md->mpi_comm = comm;
+    MPI_Comm_rank (md->mpi_comm, &(md->rank));
+    MPI_Comm_size (md->mpi_comm, &(md->peers));
 #endif
 
     // connect to DATASPACES at the very first adios_open(), disconnect in adios_finalize()
     // connect only if the READ API has not connected yet
     /*
-    ret = connect_to_dspaces (p, p->mpi_comm);
+    ret = connect_to_dspaces (md, md->mpi_comm);
     if (ret)
         return ret;
     */
 
     if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
     {
-        log_debug ("adios_dataspaces_open: rank=%d call write lock...\n", p->rank);        
-        dspaces_lock_on_write (fd->name, &p->mpi_comm);  
-        log_debug ("adios_dataspaces_open: rank=%d got write lock\n", p->rank);        
+        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, &p->mpi_comm);
+        dspaces_lock_on_read (fd->name, &md->mpi_comm);
     } 
   
     return ret;
@@ -235,10 +258,10 @@ void adios_dataspaces_write (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    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(p,fd->name);
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(md,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
@@ -248,21 +271,22 @@ void adios_dataspaces_write (struct adios_file_struct * fd
     char * var_name = v->name;
     int err;
 
+    char lb_str[256], ub_str[256], gdims_str[256], dims_str[256], didx_str[256];
     //Get two offset coordinate values
     unsigned int version;
-
-    int dims[3]={1,1,1}, gdims[3]={0,0,0}, lb[3]={0,0,0}, ub[3]={0,0,0}; /* lower and upper bounds for DataSpaces */
-    int didx[3]; // for reordering the dimensions
+    uint64_t dims[MAX_DS_NDIM], gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM]; /* lower and upper bounds for DataSpaces */
+    int didx[MAX_DS_NDIM]; // for reordering the dimensions
     int ndims = 0;
     int hastime = 0;
+    gdims[0] = 0;
     struct adios_dimension_struct* var_dimensions = v->dimensions;
-    // Calculate lower and upper bounds for each available dimension (up to 3 dims)
-    while( var_dimensions && ndims < 3)
+    // Calculate lower and upper bounds for each available dimension (up to MAX_DS_NDIM dims)
+    while( var_dimensions && ndims < MAX_DS_NDIM)
     {
         dims[ndims] = adios_get_dim_value (&(var_dimensions->dimension));
         gdims[ndims] = adios_get_dim_value (&(var_dimensions->global_dimension));
         lb[ndims] = adios_get_dim_value (&(var_dimensions->local_offset));
-        if (dims[ndims] > 0)  {
+        if (gdims[ndims] > 0 && dims[ndims] > 0)  {
             ub[ndims] = lb[ndims] + dims[ndims] - 1;
             ndims++;
         }   else {
@@ -289,8 +313,8 @@ void adios_dataspaces_write (struct adios_file_struct * fd
     //snprintf(dspaces_type_var_name, MAX_DS_NAMELEN, "TYPE@%s", ds_var_name);
     
     /* non-global variables are put in space ONLY by rank = 0 process */
-    if (gdims[0] == 0 && p->rank != 0) {
-        //fprintf(stderr, "rank=%d var_name=%s is not global. Skip\n", p->rank, ds_var_name);
+    if (gdims[0] == 0 && md->rank != 0) {
+        //fprintf(stderr, "rank=%d var_name=%s is not global. Skip\n", md->rank, ds_var_name);
         return;
     }
 
@@ -303,13 +327,19 @@ void adios_dataspaces_write (struct adios_file_struct * fd
     
      
     v->write_offset = 1; // only !=0 offsets will be included in build index
+    /* This is not needed here, this is already called in common_adios_write() 
     adios_generate_var_characteristics_v1 (fd, v); // characteristics will be included in build index
     adios_write_var_characteristics_v1 (fd, v);
-    
-
-    log_debug ("var_name=%s, type=%s(%d) elemsize=%d, version=%d, ndims=%d, size=(%d,%d,%d), gdim=(%d,%d,%d), lb=(%d,%d,%d), ub=(%d,%d,%d)\n",
+    */
+   
+    // TODO: simplify this. Put into a debug print function? 
+    ds_int64s_to_str(ndims, lb, lb_str);
+    ds_int64s_to_str(ndims, ub, ub_str);    
+    ds_int64s_to_str(ndims, dims, dims_str);
+    ds_int64s_to_str(ndims, gdims, gdims_str);
+    log_debug ("var_name=%s, type=%s(%d) elemsize=%d, version=%d, ndims=%d, size=(%s), gdim=(%s), lb=(%s), ub=(%s)\n",
             ds_var_name, adios_type_to_string_int(v->type), v->type, var_type_size, version, ndims,
-            dims[0], dims[1], dims[2], gdims[0], gdims[1], gdims[2], lb[0], lb[1], lb[2], ub[0], ub[1], ub[2]);
+            dims_str, gdims_str, lb_str, ub_str);
 
     /* non-timed scalars are written in the metadata at close(), not here */
     if (ndims == 0 && !hastime)
@@ -322,17 +352,23 @@ void adios_dataspaces_write (struct adios_file_struct * fd
             group->adios_host_language_fortran == adios_flag_yes, 
             0 /*pack*/, didx);
 
-    dspaces_put(ds_var_name, version, var_type_size, 
-             lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-             ub[didx[0]], ub[didx[1]], ub[didx[2]], 
-             data);
-    
-    log_debug ("var_name=%s, dimension ordering=(%d,%d,%d), gdims=(%d,%d,%d), lb=(%d,%d,%d), ub=(%d,%d,%d)\n",
-            ds_var_name, 
-            didx[0], didx[1], didx[2], 
-            gdims[didx[0]], gdims[didx[1]], gdims[didx[2]], 
-            lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-            ub[didx[0]], ub[didx[1]], ub[didx[2]]);
+    uint64_t lb_in[MAX_DS_NDIM], ub_in[MAX_DS_NDIM], gdims_in[MAX_DS_NDIM];
+    int i;
+    for (i = 0; i < ndims; i++) {
+        lb_in[i] = lb[didx[i]];
+        ub_in[i] = ub[didx[i]];
+        gdims_in[i] = gdims[didx[i]];
+    }
+
+    dspaces_define_gdim(ds_var_name, ndims, gdims_in);
+    dspaces_put(ds_var_name, version, var_type_size, ndims, lb_in, ub_in, data);
+  
+    ds_ints_to_str(ndims, didx, didx_str);
+    ds_int64s_to_str(ndims, gdims_in, gdims_str);
+    ds_int64s_to_str(ndims, lb_in, lb_str);
+    ds_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);
     dspaces_put_sync();
 }
 
@@ -405,27 +441,6 @@ void adios_dataspaces_read (struct adios_file_struct * fd
                      ,struct adios_method_struct * method
                      )
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
-                                                            method->method_data;
-    uint64_t var_type_size = adios_get_type_size(v->type, v->data);
-
-    //Get var name
-    char * var_name = v->name;
-
-    //Get two offset coordinate values
-    int version, offset1[3],offset2[3];
-    int dim_size[3];
-    memset(offset1, 0, 3*sizeof(int));
-    memset(offset2, 0, 3*sizeof(int));
-    memset(dim_size, 0, 3*sizeof(int));
-
-    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
-    version = info->time_index;
-    //dspaces_lock_on_read_();
-
-    //dspaces_get
-
-    //dspaces_unlock_on_read_();
 }
 
 /* Gather var/attr indices from all processes to rank 0 */
@@ -434,7 +449,7 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
                                ,struct adios_index_struct_v1 * index
                                )
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
                                                 method->method_data;
     struct adios_index_process_group_struct_v1 * new_pg_root = 0;
     struct adios_index_var_struct_v1 * new_vars_root = 0;
@@ -448,12 +463,12 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
 #if 0
 #if HAVE_MPI
     // gather all on rank 0
-    if (p->mpi_comm != MPI_COMM_NULL)
+    if (md->mpi_comm != MPI_COMM_NULL)
     {                                
-        if (p->rank == 0)           
+        if (md->rank == 0)           
         {                            
-            int * index_sizes = malloc (4 * p->peers);
-            int * index_offsets = malloc (4 * p->peers);
+            int * index_sizes = malloc (4 * md->peers);
+            int * index_offsets = malloc (4 * md->peers);
             char * recv_buffer = 0;
             uint32_t size = 0;
             uint32_t total_size = 0;
@@ -462,10 +477,10 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
 
             MPI_Gather (&size, 1, MPI_INT
                     ,index_sizes, 1, MPI_INT
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
 
-            for (i = 0; i < p->peers; i++)
+            for (i = 0; i < md->peers; i++)
             {
                 index_offsets [i] = total_size;
                 total_size += index_sizes [i];
@@ -475,10 +490,10 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
 
             MPI_Gatherv (&size, 0, MPI_BYTE
                     ,recv_buffer, index_sizes, index_offsets
-                    ,MPI_BYTE, 0, p->mpi_comm
+                    ,MPI_BYTE, 0, md->mpi_comm
                     );
 
-            for (i = 1; i < p->peers; i++)
+            for (i = 1; i < md->peers; i++)
             {
                 b.buff = recv_buffer + index_offsets [i];
                 b.length = index_sizes [i];
@@ -513,11 +528,11 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
 
             uint32_t tmp_buffer_size = (uint32_t) buffer_size;
             MPI_Gather (&tmp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
             MPI_Gatherv (buffer, buffer_size, MPI_BYTE
                     ,0, 0, 0, MPI_BYTE
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
             free (buffer);
         }
@@ -574,17 +589,17 @@ void ds_pack_group_info (struct adios_file_struct *fd
                         ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
                         )
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
                                                 method->method_data;
     struct adios_index_var_struct_v1 * v = index->vars_root;
     struct adios_index_attribute_struct_v1 * a = index->attrs_root;
     int size;
     int ndims; // whatever the type of v->characteristics->dims.count is, we write an int to buffer
     int hastime; // true if variable has time dimension
-    uint64_t ldims[10], gdims[10]; // we can write only 3 dimensions, will drop time dim
+    uint64_t ldims[MAX_DS_NDIM], gdims[MAX_DS_NDIM]; 
     *nvars = 0;
     *nattrs = 0;
-    int didx[3]; // dimension ordering indices
+    int didx[MAX_DS_NDIM]; // dimension ordering indices
 
     log_debug ("%s entered\n", __func__);
 
@@ -593,7 +608,7 @@ void ds_pack_group_info (struct adios_file_struct *fd
     while (v) {
         size += 4*sizeof(int) // name len, type, hastime, number of dims 
                 + ds_get_full_name_len (v->var_path, v->var_name) // full path
-                + 3 * 8; // always write 3 dimensions in the index (even for scalars)
+                + MAX_DS_NDIM * 8; // always write MAX_DS_NDIM dimensions in the index (even for scalars)
         if (v->characteristics->dims.count == 0) {
             // For scalars, we write the value into the index
             if (v->type != adios_string)
@@ -656,7 +671,7 @@ void ds_pack_group_info (struct adios_file_struct *fd
         //ndims = MAX(v->characteristics->dims.count,3); // convert whatever type to int
         //memcpy (b, &(v->characteristics->dims.count), sizeof(int)); // number of dimensions
         log_debug("Variable %s, total dims = %d\n", name, v->characteristics->dims.count);
-        j = 0; // we can write only 3 dims, will drop the time dimension
+        j = 0; 
         hastime = 0;
         for (i = 0; i<v->characteristics->dims.count; i++) {
             ldims[j] = v->characteristics->dims.dims[j*3];  // ith dimension 
@@ -671,12 +686,12 @@ void ds_pack_group_info (struct adios_file_struct *fd
             }
             j++;
         }
-        for (i=j; i<3; i++) {
-            // fill up dimensions up to 3rd dim
+        for (i=j; i<MAX_DS_NDIM; i++) {
+            // fill up dimensions up to MAX_DS_NDIM dim
             ldims[i] = 1;
             gdims[i] = 1;
         }
-        ndims = (j < 3 ? j : 3); // we can have max 3 dimensions in DataSpaces
+        ndims = (j < MAX_DS_NDIM ? j : MAX_DS_NDIM); // we can have max MAX_DS_NDIM dimensions in DataSpaces
         memcpy (b, &hastime, sizeof(int)); // has time dimension?
         log_debug("             has time = %d (%d)\n", hastime, *(int*)b);
         b += sizeof(int); 
@@ -686,7 +701,7 @@ void ds_pack_group_info (struct adios_file_struct *fd
         ds_dimension_ordering(ndims, 
                 fd->group->adios_host_language_fortran == adios_flag_yes, 
                 0 /*pack*/, didx);
-        for (i = 0; i < 3; i++) {
+        for (i = 0; i < MAX_DS_NDIM; i++) {
             if (gdims[didx[i]]) { 
                 // global variable
                 memcpy (b, &(gdims[didx[i]]), 8);  // ith dimension 
@@ -800,12 +815,14 @@ void adios_dataspaces_close (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    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(p,fd->name);
-    int lb[3], ub[3], didx[3]; // for reordering DS dimensions
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(md,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)
@@ -822,9 +839,9 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 
         // make sure all processes have finished putting data to the space 
         // before we put metadata from rank 0
-        MPI_Barrier (p->mpi_comm); 
+        MPI_Barrier (md->mpi_comm); 
 
-        if (p->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 */
@@ -844,11 +861,12 @@ void adios_dataspaces_close (struct adios_file_struct * fd
             
             /* 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 with buf len %d into space\n", __func__, ds_var_name, indexlen);
-            ub[0] = indexlen-1; ub[1] = 0; ub[2] = 0;
-            ds_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
-            dspaces_put(ds_var_name, version, 1,    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]],  indexbuf); 
+            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 */
@@ -857,52 +875,54 @@ void adios_dataspaces_close (struct adios_file_struct * fd
             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 time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
+            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);
-            /* Flip 1st and 2nd dimension for DataSpaces representation for a 1D array*/
-            ub[0] = file_info_buf_len-1; ub[1] = 0; ub[2] = 0;
-            ds_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
             dspaces_put_sync(); //wait on previous put to finish
-            dspaces_put(ds_var_name, version, 1,    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]], file_info_buf); 
+            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 with buf = [%d,%d] (len=%d integers) into space\n", 
+            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);
-            ub[0] = version_buf_len-1; ub[1] = 0; ub[2] = 0;
-            ds_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
             dspaces_put_sync(); //wait on previous put to finish
-            dspaces_put(ds_var_name, 0, sizeof(int),    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]],  version_buf); 
+            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<p->num_of_files; i++) {
-            if (!strcmp(fd->name, p->fnames[i]))
+        for (i=0; i<md->num_of_files; i++) {
+            if (!strcmp(fd->name, md->fnames[i]))
                 break;
         }
-        if (i == p->num_of_files) {
-            if (p->num_of_files < MAX_NUM_OF_FILES) {
-                p->fnames[ p->num_of_files ] = strdup(fd->name);
-                p->num_of_files++;
+        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 < p->num_of_files) {
-            p->fversions[i] = version;
+        if (i < md->num_of_files) {
+            md->fversions[i] = version;
+            md->mpi_ranks[i] = md->rank;
         }
 
 
@@ -911,15 +931,15 @@ void adios_dataspaces_close (struct adios_file_struct * fd
         adios_free_index_v1 (index);
 
         // rank=0 may be in put_sync when others call unlock, which is a global op
-        MPI_Barrier (p->mpi_comm); 
+        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, &p->mpi_comm);
+        dspaces_unlock_on_write(fd->name, &md->mpi_comm);
     }
     else if( fd->mode == adios_mode_read )
     {
-        dspaces_unlock_on_read(fd->name, &p->mpi_comm);
+        dspaces_unlock_on_read(fd->name, &md->mpi_comm);
     } 
 
     /* Increment the time index */
@@ -931,46 +951,48 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 
 void adios_dataspaces_finalize (int mype, struct adios_method_struct * method)
 {
-    struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
+    struct adios_ds_data_struct *md = (struct adios_ds_data_struct *)
         method->method_data;
     int i;
     char ds_var_name[MAX_DS_NAMELEN];
-    int lb[3] = {0,0,0}; 
-    int ub[3] = {1,0,0}; // we put 2 integers to space, 
-    int didx[3]; // for reordering DS dimensions
+    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(p);
+    free_dspaces_file_info(md);
 
     // tell the readers which files are finalized
-    ds_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
-    for (i=0; i<p->num_of_files; i++) {
+    for (i=0; i<md->num_of_files; i++) {
         /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
-        log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, p->fnames[i], mype);
-        dspaces_lock_on_write(p->fnames[i], &p->mpi_comm); // lock is global operation in DataSpaces
-        if (p->rank == 0) {
-            value[0] = p->fversions[i];
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", p->fnames[i]);
+        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] );
-            dspaces_put(ds_var_name, 0, sizeof(int),   
-                    lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-                    ub[didx[0]], ub[didx[1]], ub[didx[2]],  
-                    &value); 
+            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);
         }
-        log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, p->fnames[i], mype);
-        dspaces_unlock_on_write(p->fnames[i], &p->mpi_comm);
-        free (p->fnames[i]);
+        free (md->fnames[i]);
     }
 
     // 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 dspaces_barrier(), rank=%d\n", __func__,mype);
-        dspaces_barrier();
+        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();
 
diff --git a/src/write/adios_dimes.c b/src/write/adios_dimes.c
index caf61e2..eb410eb 100644
--- a/src/write/adios_dimes.c
+++ b/src/write/adios_dimes.c
@@ -32,11 +32,14 @@ static int adios_dimes_initialized = 0;
 #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 int check_read_status_poll_interval_ms = 100;
 
 struct adios_dimes_file_info
 {
     char *name;
-    int time_index;
+    int time_index; // versioning, start from 0
 };
 
 struct adios_dimes_data_struct
@@ -44,91 +47,138 @@ struct adios_dimes_data_struct
     int rank;   // dataspaces rank or MPI rank if MPI is available
     int peers;  // from xml parameter or group communicator
     int appid;  // from xml parameter or 1
-    int time_index; // versioning in DataSpaces, start from 0
     int n_writes; // how many times adios_write has been called
 #if HAVE_MPI
-    MPI_Comm mpi_comm;
+    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
 };
 
-static int init_dimes_file_info(struct adios_dimes_data_struct *p)
+
+static int check_read_status_var(const char* fname, int last_version)
+{
+    int stay_in_poll_loop = 1;
+    double t1 = adios_gettime();
+
+    uint64_t lb[MAX_DS_NDIM], ub[MAX_DS_NDIM], gdims[MAX_DS_NDIM];
+    int elemsize, ndim;
+    int read_status_buf[1] = {-1};
+    int read_status_buf_len = 1;
+
+    while (stay_in_poll_loop) {
+        snprintf(ds_var_name, MAX_DS_NAMELEN, "READ_STATUS@%s", fname);
+        elemsize = sizeof(int); ndim = 1;
+        lb[0] = 0; ub[0] = read_status_buf_len-1;
+        gdims[0] = (ub[0]-lb[0]+1) * dspaces_get_num_space_server();
+        dspaces_define_gdim(ds_var_name, ndim, gdims);
+        int err = dspaces_get(ds_var_name, 0, elemsize, ndim, lb, ub, read_status_buf);
+        if (!err) {
+            int version = read_status_buf[0];
+            log_debug("%s: ds_var_name %s read_status_buf = {%d}\n",
+                __func__, ds_var_name, version);
+            if (version == last_version) {
+                stay_in_poll_loop = 0;
+            }            
+        } else {
+            log_error("%s: failed to read ds_var_name %s from space\n",
+                __func__, ds_var_name); 
+        }
+
+        // check if we need to stay in loop
+        if (stay_in_poll_loop) {
+            double elapsed_time = adios_gettime() - t1;
+            if (check_read_status_timeout_sec >= 0.0 &&
+                elapsed_time > check_read_status_timeout_sec) {
+                stay_in_poll_loop = 0;
+            } else {
+                adios_nanosleep(check_read_status_poll_interval_ms/1000,
+                    (int)(((uint64_t)check_read_status_poll_interval_ms * 1000000L)%1000000000L));      
+            }
+        }
+    }
+
+    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++) {
-        p->file_info[i].name = NULL;
-        p->file_info[i].time_index = 0;
+        md->file_info[i].name = NULL;
+        md->file_info[i].time_index = 0;
     }
 }
 
-static void free_dimes_file_info(struct adios_dimes_data_struct *p)
+static void free_dimes_file_info(struct adios_dimes_data_struct *md)
 {
     int i;
     for (i = 0; i < MAX_NUM_OF_FILES; i++) {
-        if (p->file_info[i].name) {
-            free(p->file_info[i].name);
+        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 *p, const char* fname)
+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 (p->file_info[i].name != NULL &&
-            strcmp(p->file_info[i].name, fname) == 0) {
-            return &p->file_info[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 (p->file_info[i].name == NULL) {
-            p->file_info[i].name = malloc(strlen(fname)+1);
-            strcpy(p->file_info[i].name, fname);
-            return &p->file_info[i];
+        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 * p, MPI_Comm comm)
+static int connect_to_dimes (struct adios_dimes_data_struct *md, MPI_Comm comm)
 {
     int ret = 0;
     int num_peers;
 
     if (!globals_adios_is_dimes_connected()) {
 
-        MPI_Comm_rank (comm, &(p->rank));
+        MPI_Comm_rank (comm, &(md->rank));
         MPI_Comm_size (comm, &num_peers);
 
         // Application ID should be set by the application calling adios_set_application_id()
         int was_set;
-        p->appid = globals_adios_get_application_id (&was_set);
+        md->appid = globals_adios_get_application_id (&was_set);
         if (!was_set)
-            p->appid = 1;
+            md->appid = 1;
 
         log_debug ("adios_dimes: rank=%d connect to DATASPACES, peers=%d, appid=%d \n",
-                p->rank, num_peers, p->appid);
+                md->rank, num_peers, md->appid);
 
         //Init the dart client
-        ret = dspaces_init (num_peers, p->appid);
+        ret = dspaces_init (num_peers, md->appid, &md->mpi_comm_init, NULL);
         if (ret) {
-            log_error ("adios_dimes: rank=%d Failed to connect to DATASPACES: err=%d,  rank=%d\n", p->rank, ret);        
+            log_error ("adios_dimes: rank=%d Failed to connect to DATASPACES: err=%d,  rank=%d\n", md->rank, ret);        
             return ret;
         }
 
 #if ! HAVE_MPI
-        dspaces_rank (&(p->rank));
-        dspaces_peers (&(p->peers));
+        dspaces_rank (&(md->rank));
+        dspaces_peers (&(md->peers));
 #endif
 
-        log_debug ("adios_dimes: rank=%d connected to DATASPACES: peers=%d\n", p->rank, p->peers);        
+        log_debug ("adios_dimes: rank=%d connected to DATASPACES: peers=%d\n", md->rank, md->peers);        
     }
 
     globals_adios_set_dimes_connected_from_writer();
@@ -140,30 +190,84 @@ void adios_dimes_init (const PairStruct * parameters,
                      struct adios_method_struct * method
                      )
 {
-    struct adios_dimes_data_struct *p = 0;
+    struct adios_dimes_data_struct *md = 0;
     if (!adios_dimes_initialized)
     {
         adios_dimes_initialized = 1;
     }
    
     method->method_data = calloc (1, sizeof (struct adios_dimes_data_struct));
-    p = (struct adios_dimes_data_struct*)method->method_data;
-    
+    md = (struct adios_dimes_data_struct*)method->method_data;
+   
+    int check_read; 
     int index, i;
     char temp[64];
 
     //Init the static data structure
-    p->peers = 1;
-    p->appid = -1;
-    p->time_index = 0;
-    p->n_writes = 0;
+    md->peers = 1;
+    md->appid = -1;
+    md->n_writes = 0;
 #if HAVE_MPI
-    p->mpi_comm = MPI_COMM_NULL;
+    md->mpi_comm = MPI_COMM_NULL;
+    md->mpi_comm_init = method->init_comm;
 #endif
-    p->num_of_files = 0;
-
-    init_dimes_file_info(p);
-    connect_to_dimes (p, method->init_comm);
+    md->num_of_files = 0;
+
+    // process user parameters
+    const PairStruct *p = parameters;
+    while (p) {
+        if (!strcasecmp (p->name, "app_id")) {
+            errno = 0;
+            md->appid = strtol(p->value, NULL, 10);
+            if (md->appid > 0 && !errno) {
+                log_debug ("App ID parameter set to %d for DIMES write method\n",
+                            md->appid);
+                globals_adios_set_application_id (md->appid);
+            } else {
+                log_error ("Invalid 'app_id' parameter given to the DIMES write "
+                           "method: '%s'\n", p->value);
+            }
+        } else if (!strcasecmp(p->name, "check_read_status")) {
+            errno = 0;
+            check_read = strtol(p->value, NULL, 10);
+            if (!errno && (check_read == 0 || check_read == 2)) {
+                check_read_status = check_read;
+                log_debug("check_read_status set to %d for DIMES write method\n", 
+                    check_read_status);
+            } else {
+                log_error("Invalid 'check_read_status' parameter given to the DIMES "
+                            "write method: '%s'\n", p->value);
+                log_error("check_read_status=<value>, 0: disable, 1: at every step "
+                            " (not supported yet), 2: at finalize (default value).\n");
+            }
+        } else if (!strcasecmp(p->name, "check_read_status_timeout_sec")) {
+            errno = 0;
+            double timeout = strtof(p->value, NULL);
+            if (timeout > 0.0 && !errno) {
+                log_debug("check_read_status_timeout_sec set to %f seconds for DIMES write method\n", timeout);
+                check_read_status_timeout_sec = timeout;
+            } else {
+                log_error("Invalid 'check_read_status_timeout_sec' parameter given to the DIMES "
+                        "write method: '%s'\n", p->value);
+            }   
+        } else if (!strcasecmp(p->name, "check_read_status_poll_interval")) {
+            errno = 0;
+            int pollinterval = strtol(p->value, NULL, 10);
+            if (pollinterval > 0 && !errno) {
+                log_debug("check_read_status_poll_interval set to %d milliseconds for DIMES write method\n", pollinterval);
+                check_read_status_poll_interval_ms = pollinterval;
+            } else {
+                log_error("Invalid 'check_read_status_poll_interval' parameter given to DIMES "
+                    "write method: '%s'\n", p->value);
+            }
+        } else {
+            log_error ("Parameter name %s is not recognized by the DIMES write "
+                        "method\n", p->name);
+        }
+        p = p->next;
+    }
+    init_dimes_file_info(md);
+    connect_to_dimes (md, method->init_comm);
 
     log_info ("adios_dimes_init: done\n");
    
@@ -177,32 +281,32 @@ int adios_dimes_open (struct adios_file_struct * fd,
                     )
 {
     int ret = 0;
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(md, fd->name);
     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
-    p->mpi_comm = comm;
-    MPI_Comm_rank (p->mpi_comm, &(p->rank));
-    MPI_Comm_size (p->mpi_comm, &(p->peers));
+    md->mpi_comm = comm;
+    MPI_Comm_rank (md->mpi_comm, &(md->rank));
+    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", p->rank);       
-        dspaces_lock_on_write (fd->name, &p->mpi_comm);  
-        log_debug ("adios_dimes_open: rank=%d got write lock\n", p->rank);        
+        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, &p->mpi_comm);
+        dspaces_lock_on_read (fd->name, &md->mpi_comm);
     } 
   
     return ret;
@@ -233,10 +337,10 @@ void adios_dimes_write (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    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(p, fd->name);
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(md, 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
@@ -246,21 +350,22 @@ void adios_dimes_write (struct adios_file_struct * fd
     char * var_name = v->name;
     int err;
 
+    char lb_str[256], ub_str[256], gdims_str[256], dims_str[256], didx_str[256];
     //Get two offset coordinate values
     unsigned int version;
-
-    int dims[3]={1,1,1}, gdims[3]={0,0,0}, lb[3]={0,0,0}, ub[3]={0,0,0}; /* lower and upper bounds for DataSpaces */
-    int didx[3]; // for reordering the dimensions
+    uint64_t dims[MAX_DS_NDIM], gdims[MAX_DS_NDIM], lb[MAX_DS_NDIM], ub[MAX_DS_NDIM]; /* lower and upper bounds for DataSpaces */
+    int didx[MAX_DS_NDIM]; // for reordering the dimensions
     int ndims = 0;
     int hastime = 0;
+    gdims[0] = 0;
     struct adios_dimension_struct* var_dimensions = v->dimensions;
     // Calculate lower and upper bounds for each available dimension (up to 3 dims)
-    while( var_dimensions && ndims < 3)
+    while( var_dimensions && ndims < MAX_DS_NDIM)
     {
         dims[ndims] = adios_get_dim_value (&(var_dimensions->dimension));
         gdims[ndims] = adios_get_dim_value (&(var_dimensions->global_dimension));
         lb[ndims] = adios_get_dim_value (&(var_dimensions->local_offset));
-        if (dims[ndims] > 0)  {
+        if (gdims[ndims] > 0 && dims[ndims] > 0)  {
             ub[ndims] = lb[ndims] + dims[ndims] - 1;
             ndims++;
         }   else {
@@ -287,8 +392,8 @@ void adios_dimes_write (struct adios_file_struct * fd
     //snprintf(dspaces_type_var_name, MAX_DS_NAMELEN, "TYPE@%s", ds_var_name);
     
     /* non-global variables are put in space ONLY by rank = 0 process */
-    if (gdims[0] == 0 && p->rank != 0) {
-        //fprintf(stderr, "rank=%d var_name=%s is not global. Skip\n", p->rank, ds_var_name);
+    if (gdims[0] == 0 && md->rank != 0) {
+        //fprintf(stderr, "rank=%d var_name=%s is not global. Skip\n", md->rank, ds_var_name);
         return;
     }
 
@@ -301,13 +406,18 @@ void adios_dimes_write (struct adios_file_struct * fd
     
      
     v->write_offset = 1; // only !=0 offsets will be included in build index
+    /* This is not needed here, this is already called in common_adios_write() 
     adios_generate_var_characteristics_v1 (fd, v); // characteristics will be included in build index
     adios_write_var_characteristics_v1 (fd, v);
-    
+    */
 
-    log_debug ("var_name=%s, type=%s(%d) elemsize=%d, version=%d, ndims=%d, size=(%d,%d,%d), gdim=(%d,%d,%d), lb=(%d,%d,%d), ub=(%d,%d,%d)\n",
+    dimes_int64s_to_str(ndims, lb, lb_str);
+    dimes_int64s_to_str(ndims, ub, ub_str);
+    dimes_int64s_to_str(ndims, dims, dims_str);
+    dimes_int64s_to_str(ndims, gdims, gdims_str);
+    log_debug ("var_name=%s, type=%s(%d) elemsize=%d, version=%d, ndims=%d, size=(%s), gdim=(%s), lb=(%s), ub=(%s)\n",
             ds_var_name, adios_type_to_string_int(v->type), v->type, var_type_size, version, ndims,
-            dims[0], dims[1], dims[2], gdims[0], gdims[1], gdims[2], lb[0], lb[1], lb[2], ub[0], ub[1], ub[2]);
+            dims_str, gdims_str, lb_str, ub_str);    
 
     /* non-timed scalars are written in the metadata at close(), not here */
     if (ndims == 0 && !hastime)
@@ -320,17 +430,22 @@ void adios_dimes_write (struct adios_file_struct * fd
             group->adios_host_language_fortran == adios_flag_yes, 
             0 /*pack*/, didx);
 
-    dimes_put(ds_var_name, version, var_type_size, 
-             lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-             ub[didx[0]], ub[didx[1]], ub[didx[2]], 
-             data);
-    
-    log_debug ("var_name=%s, dimension ordering=(%d,%d,%d), gdims=(%d,%d,%d), lb=(%d,%d,%d), ub=(%d,%d,%d)\n",
-            ds_var_name, 
-            didx[0], didx[1], didx[2], 
-            gdims[didx[0]], gdims[didx[1]], gdims[didx[2]], 
-            lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-            ub[didx[0]], ub[didx[1]], ub[didx[2]]);
+    uint64_t lb_in[MAX_DS_NDIM], ub_in[MAX_DS_NDIM], gdims_in[MAX_DS_NDIM];
+    int i;
+    for (i = 0; i < ndims; i++) {
+        lb_in[i] = lb[didx[i]];
+        ub_in[i] = ub[didx[i]];
+        gdims_in[i] = gdims[didx[i]];
+    }
+    dimes_define_gdim(ds_var_name, ndims, gdims_in);
+    dimes_put(ds_var_name, version, var_type_size, ndims, lb_in, ub_in, data);
+
+    dimes_ints_to_str(ndims, didx, didx_str);
+    dimes_int64s_to_str(ndims, gdims_in, gdims_str);
+    dimes_int64s_to_str(ndims, lb_in, lb_str);
+    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);
 }
 
 void adios_dimes_get_write_buffer (struct adios_file_struct * fd
@@ -402,22 +517,6 @@ void adios_dimes_read (struct adios_file_struct * fd
                      ,struct adios_method_struct * method
                      )
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
-                                                            method->method_data;
-    uint64_t var_type_size = adios_get_type_size(v->type, v->data);
-
-    //Get var name
-    char * var_name = v->name;
-
-    //Get two offset coordinate values
-    int version, offset1[3],offset2[3];
-    int dim_size[3];
-    memset(offset1, 0, 3*sizeof(int));
-    memset(offset2, 0, 3*sizeof(int));
-    memset(dim_size, 0, 3*sizeof(int));
-
-    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
-    version = info->time_index;
 }
 
 /* Gather var/attr indices from all processes to rank 0 */
@@ -426,7 +525,7 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
                                ,struct adios_index_struct_v1 * index
                                )
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
                                                 method->method_data;
     struct adios_index_process_group_struct_v1 * new_pg_root = 0;
     struct adios_index_var_struct_v1 * new_vars_root = 0;
@@ -440,12 +539,12 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
 #if 0
 #if HAVE_MPI
     // gather all on rank 0
-    if (p->mpi_comm != MPI_COMM_NULL)
+    if (md->mpi_comm != MPI_COMM_NULL)
     {                                
-        if (p->rank == 0)           
+        if (md->rank == 0)           
         {                            
-            int * index_sizes = malloc (4 * p->peers);
-            int * index_offsets = malloc (4 * p->peers);
+            int * index_sizes = malloc (4 * md->peers);
+            int * index_offsets = malloc (4 * md->peers);
             char * recv_buffer = 0;
             uint32_t size = 0;
             uint32_t total_size = 0;
@@ -454,10 +553,10 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
 
             MPI_Gather (&size, 1, MPI_INT
                     ,index_sizes, 1, MPI_INT
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
 
-            for (i = 0; i < p->peers; i++)
+            for (i = 0; i < md->peers; i++)
             {
                 index_offsets [i] = total_size;
                 total_size += index_sizes [i];
@@ -467,10 +566,10 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
 
             MPI_Gatherv (&size, 0, MPI_BYTE
                     ,recv_buffer, index_sizes, index_offsets
-                    ,MPI_BYTE, 0, p->mpi_comm
+                    ,MPI_BYTE, 0, md->mpi_comm
                     );
 
-            for (i = 1; i < p->peers; i++)
+            for (i = 1; i < md->peers; i++)
             {
                 b.buff = recv_buffer + index_offsets [i];
                 b.length = index_sizes [i];
@@ -505,11 +604,11 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
 
             uint32_t tmp_buffer_size = (uint32_t) buffer_size;
             MPI_Gather (&tmp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
             MPI_Gatherv (buffer, buffer_size, MPI_BYTE
                     ,0, 0, 0, MPI_BYTE
-                    ,0, p->mpi_comm
+                    ,0, md->mpi_comm
                     );
             free (buffer);
         }
@@ -566,17 +665,17 @@ void dimes_pack_group_info (struct adios_file_struct *fd
                                   ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
                                   )
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
                                                 method->method_data;
     struct adios_index_var_struct_v1 * v = index->vars_root;
     struct adios_index_attribute_struct_v1 * a = index->attrs_root;
     int size;
     int ndims; // whatever the type of v->characteristics->dims.count is, we write an int to buffer
     int hastime; // true if variable has time dimension
-    uint64_t ldims[10], gdims[10]; // we can write only 3 dimensions, will drop time dim
+    uint64_t ldims[MAX_DS_NDIM], gdims[MAX_DS_NDIM];
     *nvars = 0;
     *nattrs = 0;
-    int didx[3]; // dimension ordering indices
+    int didx[MAX_DS_NDIM]; // dimension ordering indices
 
     log_debug ("%s entered\n", __func__);
 
@@ -585,7 +684,7 @@ void dimes_pack_group_info (struct adios_file_struct *fd
     while (v) {
         size += 4*sizeof(int) // name len, type, hastime, number of dims 
                 + dimes_get_full_name_len (v->var_path, v->var_name) // full path
-                + 3 * 8; // always write 3 dimensions in the index (even for scalars)
+                + MAX_DS_NDIM * 8; // always write 3 dimensions in the index (even for scalars)
         if (v->characteristics->dims.count == 0) {
             // For scalars, we write the value into the index
             if (v->type != adios_string)
@@ -648,7 +747,7 @@ void dimes_pack_group_info (struct adios_file_struct *fd
         //ndims = MAX(v->characteristics->dims.count,3); // convert whatever type to int
         //memcpy (b, &(v->characteristics->dims.count), sizeof(int)); // number of dimensions
         log_debug("Variable %s, total dims = %d\n", name, v->characteristics->dims.count);
-        j = 0; // we can write only 3 dims, will drop the time dimension
+        j = 0; // will drop the time dimension
         hastime = 0;
         for (i = 0; i<v->characteristics->dims.count; i++) {
             ldims[j] = v->characteristics->dims.dims[j*3];  // ith dimension 
@@ -663,12 +762,12 @@ void dimes_pack_group_info (struct adios_file_struct *fd
             }
             j++;
         }
-        for (i=j; i<3; i++) {
-            // fill up dimensions up to 3rd dim
+        for (i=j; i<MAX_DS_NDIM; i++) {
+            // fill up dimensions up to MAX_DS_NDIM dim
             ldims[i] = 1;
             gdims[i] = 1;
         }
-        ndims = (j < 3 ? j : 3); // we can have max 3 dimensions in DataSpaces
+        ndims = (j < MAX_DS_NDIM ? j : MAX_DS_NDIM); // we can have max MAX_DS_NDIM dimensions in DataSpaces
         memcpy (b, &hastime, sizeof(int)); // has time dimension?
         log_debug("             has time = %d (%d)\n", hastime, *(int*)b);
         b += sizeof(int); 
@@ -678,7 +777,7 @@ void dimes_pack_group_info (struct adios_file_struct *fd
         dimes_dimension_ordering(ndims, 
                 fd->group->adios_host_language_fortran == adios_flag_yes, 
                 0 /*pack*/, didx);
-        for (i = 0; i < 3; i++) {
+        for (i = 0; i < MAX_DS_NDIM; i++) {
             if (gdims[didx[i]]) { 
                 // global variable
                 memcpy (b, &(gdims[didx[i]]), 8);  // ith dimension 
@@ -792,12 +891,14 @@ void adios_dimes_close (struct adios_file_struct * fd
                       ,struct adios_method_struct * method
                       )
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    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(p, fd->name);
-    int lb[3], ub[3], didx[3]; // for reordering DS dimensions
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(md, 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)
@@ -814,9 +915,9 @@ void adios_dimes_close (struct adios_file_struct * fd
 
         // make sure all processes have finished putting data to the space 
         // before we put metadata from rank 0
-        MPI_Barrier (p->mpi_comm); 
+        MPI_Barrier (md->mpi_comm); 
 
-        if (p->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 */
@@ -836,11 +937,12 @@ void adios_dimes_close (struct adios_file_struct * fd
             
             /* 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 with buf len %d into space\n", __func__, ds_var_name, indexlen);
-            ub[0] = indexlen-1; ub[1] = 0; ub[2] = 0;
-            dimes_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
-            dspaces_put(ds_var_name, version, 1,    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]],  indexbuf); 
+            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 */
@@ -849,52 +951,53 @@ void adios_dimes_close (struct adios_file_struct * fd
             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 time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
+            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);
-            /* Flip 1st and 2nd dimension for DataSpaces representation for a 1D array*/
-            ub[0] = file_info_buf_len-1; ub[1] = 0; ub[2] = 0;
-            dimes_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
             dspaces_put_sync(); //wait on previous put to finish
-            dspaces_put(ds_var_name, version, 1,    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]], file_info_buf); 
+            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 with buf = [%d,%d] (len=%d integers) into space\n", 
+            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);
-            ub[0] = version_buf_len-1; ub[1] = 0; ub[2] = 0;
-            dimes_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
             dspaces_put_sync(); //wait on previous put to finish
-            dspaces_put(ds_var_name, 0, sizeof(int),    0, 0, 0, /* lb 0..2 */
-                     ub[didx[0]], ub[didx[1]], ub[didx[2]],  version_buf); 
+            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<p->num_of_files; i++) {
-            if (!strcmp(fd->name, p->fnames[i]))
+        for (i=0; i<md->num_of_files; i++) {
+            if (!strcmp(fd->name, md->fnames[i]))
                 break;
         }
-        if (i == p->num_of_files) {
-            if (p->num_of_files < MAX_NUM_OF_FILES) {
-                p->fnames[ p->num_of_files ] = strdup(fd->name);
-                p->num_of_files++;
+        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 < p->num_of_files) {
-            p->fversions[i] = version;
+        if (i < md->num_of_files) {
+            md->fversions[i] = version;
+            md->mpi_ranks[i] = md->rank;
         }
 
 
@@ -903,16 +1006,16 @@ void adios_dimes_close (struct adios_file_struct * fd
         adios_free_index_v1 (index);
 
         // rank=0 may be in put_sync when others call unlock, which is a global op
-        MPI_Barrier (p->mpi_comm); 
+        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, &p->mpi_comm);
+        dspaces_unlock_on_write(fd->name, &md->mpi_comm);
     }
     else if( fd->mode == adios_mode_read )
     {
-        dspaces_unlock_on_read(fd->name, &p->mpi_comm);
+        dspaces_unlock_on_read(fd->name, &md->mpi_comm);
     } 
 
     /* Increment the time index */
@@ -924,40 +1027,49 @@ void adios_dimes_close (struct adios_file_struct * fd
 
 void adios_dimes_finalize (int mype, struct adios_method_struct * method)
 {
-    struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
+    struct adios_dimes_data_struct *md = (struct adios_dimes_data_struct *)
         method->method_data;
     int i;
     char ds_var_name[MAX_DS_NAMELEN];
-    int lb[3] = {0,0,0}; 
-    int ub[3] = {1,0,0}; // we put 2 integers to space, 
-    int didx[3]; // for reordering DS dimensions
+    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(p);
+    free_dimes_file_info(md);
 
     // tell the readers which files are finalized
-    dimes_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
-    for (i=0; i<p->num_of_files; i++) {
+    for (i=0; i<md->num_of_files; i++) {
         /* Put VERSION at fn into space. Indicates that this file will not be extended anymore.  */
-        log_debug("%s: call dspaces_lock_on_write(%s), rank=%d\n", __func__, p->fnames[i], mype);
-        dspaces_lock_on_write(p->fnames[i], &p->mpi_comm); // lock is global operation in DataSpaces
-        if (p->rank == 0) {
-            value[0] = p->fversions[i];
-            snprintf(ds_var_name, MAX_DS_NAMELEN, "VERSION@%s", p->fnames[i]);
+        if (md->mpi_ranks[i] == 0) {
+            if (check_read_status == 2) {
+                check_read_status_var(md->fnames[i], md->fversions[i]);
+            }
+            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] );
-            dspaces_put(ds_var_name, 0, sizeof(int),   
-                    lb[didx[0]], lb[didx[1]], lb[didx[2]], 
-                    ub[didx[0]], ub[didx[1]], ub[didx[2]],  
-                    &value); 
+            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);
         }
-        log_debug("%s: call dspaces_unlock_on_write(%s), rank=%d\n", __func__, p->fnames[i], mype);
-        dspaces_unlock_on_write(p->fnames[i], &p->mpi_comm);
-        free (p->fnames[i]);
+        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();
 
@@ -965,9 +1077,9 @@ void adios_dimes_finalize (int mype, struct adios_method_struct * method)
     if (globals_adios_is_dimes_connected_from_writer() && 
             !globals_adios_is_dimes_connected_from_both())
     {
-        log_debug ("%s: call dspaces_barrier(), rank=%d\n", __func__,mype);
-        dspaces_barrier();
-        log_debug ("%s: call dspaces_finalize(), rank=%d\n", __func__,mype);
+        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();
diff --git a/src/write/adios_flexpath.c b/src/write/adios_flexpath.c
index ecf2d6c..88938bb 100644
--- a/src/write/adios_flexpath.c
+++ b/src/write/adios_flexpath.c
@@ -1,3 +1,4 @@
+
 /*
     adios_flexpath.c
     uses evpath for io in conjunction with read/read_flexpath.c
@@ -127,9 +128,6 @@ typedef struct _flexpath_write_file_data {
     int numBridges;
     attr_list attrs;
 
-    int num_reader_coordinators;
-    int *reader_coordinators;
-
     // server state
     int maxQueueSize;
     int openCount;
@@ -191,50 +189,13 @@ resolve_path_name(char *path, char *name)
                 return fullname;
             }
         }
-        fullname = malloc(strlen(name));
+        fullname = malloc(strlen(name)+1);
         strcpy(fullname, name);
         return fullname;
     }
     return NULL;
 }
 
-static double dgettimeofday( void )
-{
-#ifdef HAVE_GETTIMEOFDAY
-    double timestamp;
-    struct timeval now;
-    gettimeofday(&now, NULL);
-    timestamp = now.tv_sec + now.tv_usec* 1.0e-6 ;
-    return timestamp;
-#else
-    return -1;
-#endif
-}
-
-char extern_string[] = "double dgettimeofday(); \n";
-cod_extern_entry externs[] = {
-    {"dgettimeofday", (void *) dgettimeofday},	        // 0
-    {(void *) 0, (void *) 0}
-};
-
-static uint64_t
-get_timestamp_mili()
-{
-    struct timespec stamp;
-#ifdef __MACH__
-    clock_serv_t cclock;
-    mach_timespec_t mts;
-    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
-    clock_get_time(cclock, &mts);
-    mach_port_deallocate(mach_task_self(), cclock);
-    stamp.tv_sec = mts.tv_sec;
-    stamp.tv_nsec = mts.tv_nsec;
-#else
-    clock_gettime(CLOCK_MONOTONIC, &stamp);
-#endif
-    return ((stamp.tv_sec * 1000000000) + stamp.tv_nsec)/1000000;
-}
-
 // add an attr for each dimension to an attr_list
 void set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) 
 {
@@ -314,13 +275,14 @@ set_dst_condition_atom(attr_list attrs, int condition)
 void
 evgroup_msg_free(void *eventData, void *clientData)
 {
-    evgroup *msg = (evgroup*)eventData;
-    int num_vars = msg->num_vars;
-    int i;
-    for(i=0; i<num_vars; i++){
-	free(msg->vars[i].offsets);
-    }
-    free(msg);
+    
+    /* evgroup *msg = (evgroup*)eventData; */
+    /* int num_vars = msg->num_vars; */
+    /* int i; */
+    /* for(i=0; i<num_vars; i++){ */
+    /* 	free(msg->vars[i].offsets); */
+    /* } */
+    /* free(msg); */
 }
 
 void
@@ -500,56 +462,14 @@ queue_contains(FlexpathVarNode* queue, const char* name, int rank)
     return NULL;
 }
 
-/* // sanitize a name */
-/* char*  */
-/* get_fixed_name(char* name)  */
-/* { */
-/*     char* oldName = strdup(name); */
-/*     char* newName = (char*) malloc(sizeof(char) * 255); */
-/*     int i; */
-/*     for (i=0; i< OPLEN; i++){ */
-/*         char op[] = {opList[i], '\0'}; */
-/*         char* opRep=opRepList[i]; */
-/*         char* token = strtok(oldName, op); */
-/*         char* lastTok=NULL; */
-/* 	strcpy(newName, ""); */
-/* 	while(token != NULL){ */
-/* 	    strcat(newName, token); */
-/*             if((token = strtok(NULL, op))) { */
-/* 	        strcat(newName, opRep); */
-/* 	        lastTok = token; */
-/* 	    } */
-/*         } */
-/*         if(lastTok!=NULL && (strlen(newName)-strlen(lastTok)-1>0)) { */
-/*             newName[strlen(newName)-strlen(lastTok)-1]='\0'; */
-/* 	} */
-/*         free(oldName); */
-/* 	oldName = strdup(newName); */
-/*     } */
-/*     free(oldName); */
-/*     return newName; */
-/* } */
-
-/* // return name with operators removed by using the lookup list */
-/* static char*  */
-/* find_fixed_name(FlexpathFMStructure *fm, char *name)  */
-/* { */
-/*     FlexpathNameTable *node; */
-/*     for (node = fm->nameList.lh_first; node != NULL; node = node->entries.le_next) { */
-/*         if (!strcmp(node->originalName, name)) { */
-/* 	    return node->mangledName; */
-/*         } */
-/*     } */
-/*     return name; */
-/* } */
-
 // returns a name with the dimension prepended
 static char*
 get_alt_name(char *name, char *dimName) 
 {
-    int len = strlen(name) + strlen(dimName) + 2;
-    char *newName = (char *) malloc(sizeof(char) * len);
-    strcpy(newName, dimName);
+    int len = strlen(name) + strlen(dimName) + strlen("FPDIM_") + 2;
+    char *newName = malloc(sizeof(char) * len);
+    strcpy(newName, "FPDIM_");
+    strcat(newName, dimName);
     strcat(newName, "_");
     strcat(newName, name);
     return newName;
@@ -685,8 +605,6 @@ char *multiqueue_action = "{\n\
     if(EVcount_anonymous()>0){\n\
         mine = EVget_attrs_anonymous(0);\n\
         found = attr_ivalue(mine, \"fp_dst_rank\");\n\
-        double start = dgettimeofday(); \n\
-        set_double_attr(mine, \"fp_starttime\", start);\n\
         EVdiscard_and_submit_anonymous(found+1,0);\n\
     }\n\
  }";
@@ -777,7 +695,8 @@ mem_check(void* ptr, const char* str)
 }
 
 
-static char * get_dim_name (struct adios_dimension_item_struct *d)
+static char*
+get_dim_name (struct adios_dimension_item_struct *d)
 {
     char *vname = NULL;
     if (d->var) {	
@@ -828,9 +747,9 @@ set_format(struct adios_group_struct *t,
     int altvarcount = 0;
 
     // for each type look through all the fields
-    struct adios_var_struct *f;
-    for (f = t->vars; f != NULL; f = f->next, fieldNo++) {
-	char *fullname = resolve_path_name(f->path, f->name);
+    struct adios_var_struct *adios_var;
+    for (adios_var = t->vars; adios_var != NULL; adios_var = adios_var->next, fieldNo++) {
+	char *fullname = resolve_path_name(adios_var->path, adios_var->name);
 
 	// use the mangled name for the field.
 	field_list[fieldNo].field_name = fullname;
@@ -838,17 +757,20 @@ set_format(struct adios_group_struct *t,
             int num_dims = 0;
             char atom_name[200] = "";
             FlexpathVarNode *dims=NULL;
-            if(f->dimensions) {
-                struct adios_dimension_struct *adim = f->dimensions;  
-	
+            if(adios_var->dimensions) {
+                struct adios_dimension_struct *adim = adios_var->dimensions;  
+		
                 // attach appropriate attrs for dimensions	
                 for(; adim != NULL; adim = adim->next) {
                     num_dims++;		    
                     
+		    // have to change get_alt_name to append FPVAR at the start of each varname.
                     char *vname = get_dim_name(&adim->dimension);
                     if (vname) {
+			//printf("vname: %s\n", vname);
 			//char *name = find_fixed_name(currentFm, vname);
 			char *aname = get_alt_name(fullname, vname);
+			//printf("aname: %s\n", aname);
 			dims=add_var(dims, strdup(aname), NULL, 0);
 			set_attr_dimensions(fullname, aname, num_dims, fileData->attrs);
 		    }
@@ -871,12 +793,12 @@ set_format(struct adios_group_struct *t,
             fileData->formatVars = add_var(fileData->formatVars, fullname, dims, 0);
         }
 	// if its a single field
-	if (!f->dimensions) {
+	if (!adios_var->dimensions) {
 	    // set the field type size and offset approrpriately
-	    set_field(f->type, &field_list, fieldNo, &currentFm->size);
+	    set_field(adios_var->type, &field_list, fieldNo, &currentFm->size);
 	} else {
 	    //it's a vector!
-	    struct adios_dimension_struct *d = f->dimensions;
+	    struct adios_dimension_struct *d = adios_var->dimensions;
             #define DIMSIZE 10240
 	    #define ELSIZE 256
             char dims[DIMSIZE] = "";
@@ -905,7 +827,7 @@ set_format(struct adios_group_struct *t,
 		currentFm->size ++;					
 	    }
 		  
-	    switch (f->type) {
+	    switch (adios_var->type) {
 	    case adios_unknown:
 		fprintf(stderr, "set_format: Bad Type Error\n");
 		fieldNo--;
@@ -939,7 +861,8 @@ set_format(struct adios_group_struct *t,
 		{  currentFm->size += (v_offset * sizeof(unsigned int));  } 
 		break;
 
-	    case adios_unsigned_long:
+	    case adios_unsigned_long: // needs to be unsigned integer in ffs
+                // to distinguish on reader_side, I have to look at the size also
 		field_list[fieldNo].field_type =
 		    (char *) malloc(sizeof(char) * 255);
 		snprintf((char *) field_list[fieldNo].field_type, 255,
@@ -977,7 +900,7 @@ set_format(struct adios_group_struct *t,
 		field_list[fieldNo].field_type =
 		    (char *) malloc(sizeof(char) * 255);
 		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "float%s", dims);
+			 "double%s", dims);
 		field_list[fieldNo].field_size = sizeof(double);
 		field_list[fieldNo].field_offset = currentFm->size;
 		if (v_offset == 0 ) // pointer to variably sized array
@@ -1002,7 +925,7 @@ set_format(struct adios_group_struct *t,
 	    default:
 		adios_error(err_invalid_group, 
 			    "set_format: Unknown Type Error %d: name: %s\n", 
-			    f->type, field_list[fieldNo].field_name);
+			    adios_var->type, field_list[fieldNo].field_name);
 		fieldNo--;	      
 		return NULL;
 		//break;
@@ -1172,6 +1095,7 @@ process_close_msg(FlexpathWriteFileData *fileData, op_msg *close)
 	int wait = CMCondition_get(flexpathWriteData.cm, NULL);
 	dropMsg->condition = wait;
 	EVsubmit_general(fileData->dropSource, dropMsg, drop_evgroup_msg_free, fileData->attrs);
+	//EVsubmit_general(fileData->dropSource, dropMsg, NULL, fileData->attrs);
 	// Will have to change when not using ctrl thread.
 	CMCondition_wait(flexpathWriteData.cm,  wait); 		    
 		     
@@ -1382,8 +1306,6 @@ adios_flexpath_open(struct adios_file_struct *fd,
     pthread_cond_init(&fileData->controlCondition, NULL);
     pthread_cond_init(&fileData->dataCondition, NULL);
 
-    double setup_start = dgettimeofday();
-
     // communication channel setup
     char writer_info_filename[200];
     char writer_ready_filename[200];
@@ -1466,7 +1388,7 @@ 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;
@@ -1485,9 +1407,7 @@ adios_flexpath_open(struct adios_file_struct *fd,
     fileData->name = strdup(method->group->name); 
     add_open_file(fileData);
     atom_t rank_atom = attr_atom_from_string(FP_RANK_ATTR_NAME);
-    add_int_attr(fileData->attrs, rank_atom, fileData->rank);
-    
-    EVadd_standard_routines(flexpathWriteData.cm, extern_string, externs);
+    add_int_attr(fileData->attrs, rank_atom, fileData->rank);   
 
     //generate multiqueue function that sends formats or all data based on flush msg
 
@@ -1594,6 +1514,8 @@ adios_flexpath_write(
 			    //check if there are FlexpathAltNames
 			    FlexpathAltName *a = NULL;
 			    for (a = d->altList.lh_first; a != NULL; a = a->entries.le_next) {
+				/* fprintf(stderr, "ALTNAME: %s, DIM: %s FIELD: %s\n",  */
+				/* 	a->name, d->name, field->field_name); */
 				memcpy(&fm->buffer[a->field->field_offset], 
 				       data, 
 				       a->field->field_size);
@@ -1652,10 +1574,11 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
                 void* pointer_data_copy = malloc(total_size);
                 //block
             }
-                           
-            void* temp = get_FMPtrField_by_name(flist, fields->name, fileData->fm->buffer, 0);
+            
+            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, fields->name, fileData->fm->buffer, pointer_data_copy);
+            set_FMPtrField_by_name(flist, resolved_name, fileData->fm->buffer, pointer_data_copy);
         }    
         fields = fields->next;
     }
@@ -1674,6 +1597,7 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
     struct adios_group_struct * g = fd->group;
     struct adios_var_struct * list = g->vars;
     evgroup *gp = malloc(sizeof(evgroup));    
+    gp->group_name = strdup(method->group->name);
     gp->process_id = fileData->rank;
     if(fileData->globalCount == 0){
 
@@ -1681,7 +1605,7 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
 	gp->step = fileData->writerStep;
 	gp->vars = NULL;
 	//fileData->gp = gp;       
-	fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
+	//fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
 	EVsubmit_general(fileData->offsetSource, gp, evgroup_msg_free, fileData->attrs);
     }
 
@@ -1693,7 +1617,6 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
 	int myrank = fileData->rank;
 	int commsize = fileData->size;
 
-	double offset_start = dgettimeofday();
 	while(list){
 	    char *fullname = resolve_path_name(list->path, list->name);
 	    //int num_local_offsets = 0;
diff --git a/src/write/adios_mpi.c b/src/write/adios_mpi.c
index 73a5402..16eea10 100644
--- a/src/write/adios_mpi.c
+++ b/src/write/adios_mpi.c
@@ -543,7 +543,6 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                                         ,struct adios_method_struct * method
                                         )
 {
-    int i;
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                       method->method_data;
     char * name;
@@ -1032,7 +1031,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
             char * buf_ptr = fd->buffer;
             while (total_written < fd->bytes_written)
             {
-                write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                 err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                 MPI_Get_count(&md->status, MPI_BYTE, &count);
                 if (count != write_len)
@@ -1065,7 +1064,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
         MPI_Get_count (&md->status, MPI_BYTE, &count);
         if (count != fd->bytes_written)
         {
-            log_warn ("a:MPI method tried to write %llu, only wrote %llu\n",
+            log_warn ("a:MPI method tried to write %llu, only wrote %d\n",
                       fd->bytes_written, count);
         }
         fd->base_offset += count;
@@ -1135,7 +1134,7 @@ void adios_mpi_write (struct adios_file_struct * fd
             char * buf_ptr = fd->buffer;
             while (total_written < fd->bytes_written)
             {
-                write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                 err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                 MPI_Get_count(&md->status, MPI_BYTE, &count);
                 if (count != write_len)
@@ -1176,7 +1175,7 @@ void adios_mpi_write (struct adios_file_struct * fd
 
         // write payload
         // adios_write_var_payload_v1 (fd, v);
-        uint64_t var_size = adios_get_var_size (v, fd->group, v->data);
+        uint64_t var_size = adios_get_var_size (v, v->data);
 
         if (fd->base_offset + var_size > fd->pg_start_in_file + fd->write_size_bytes)
             adios_error (err_out_of_bound, 
@@ -1197,7 +1196,7 @@ void adios_mpi_write (struct adios_file_struct * fd
             char * buf_ptr = v->data;
             while (total_written < var_size)
             {
-                write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                 err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                 MPI_Get_count(&md->status, MPI_BYTE, &count);
                 if (count != write_len)
@@ -1328,15 +1327,11 @@ static void adios_mpi_do_read (struct adios_file_struct * fd
                                                       method->method_data;
     struct adios_var_struct * v = fd->group->vars;
 
-    struct adios_parse_buffer_struct data;
-
-    data.vars = v;
-    data.buffer = 0;
-    data.buffer_len = 0;
-
-    switch (md->b.version & ADIOS_VERSION_NUM_MASK)
+    uint32_t version = md->b.version & ADIOS_VERSION_NUM_MASK;
+    switch (version)
     {
         case 1:
+        case 2:
         {
             // the three section headers
             struct adios_process_group_header_struct_v1 pg_header;
@@ -1419,7 +1414,7 @@ static void adios_mpi_do_read (struct adios_file_struct * fd
         default:
             adios_error (err_invalid_file_version, 
                          "MPI method read: ADIOS file version unknown: %u\n",
-                         md->b.version);
+                         version);
             return;
     }
 
@@ -1492,7 +1487,7 @@ void adios_mpi_close (struct adios_file_struct * fd
                     char * buf_ptr = fd->buffer;
                     while (total_written < md->vars_header_size)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
@@ -1565,7 +1560,7 @@ void adios_mpi_close (struct adios_file_struct * fd
                             char * buf_ptr = fd->buffer;
                             while (total_written < fd->bytes_written)
                             {
-                                write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                                write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                                 err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                                 MPI_Get_count(&md->status, MPI_BYTE, &count);
                                 if (count != write_len)
@@ -1627,7 +1622,7 @@ void adios_mpi_close (struct adios_file_struct * fd
                     char * buf_ptr = fd->buffer;
                     while (total_written < md->vars_header_size)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
@@ -1756,12 +1751,12 @@ void adios_mpi_close (struct adios_file_struct * fd
             if (fd->shared_buffer == adios_flag_yes)
             {
                 // if we need to write > 2 GB, need to do it in parts
-                // since count is limited to INT32_MAX (signed 32-bit max).
+                // since count is limited to MAX_MPIWRITE_SIZE (signed 32-bit max).
                 uint64_t bytes_written = 0;
                 int32_t to_write = 0;
-                if (fd->bytes_written > INT32_MAX)
+                if (fd->bytes_written > MAX_MPIWRITE_SIZE)
                 {
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }
                 else
                 {
@@ -1805,9 +1800,9 @@ void adios_mpi_close (struct adios_file_struct * fd
                     bytes_written += to_write;
                     if (fd->bytes_written > bytes_written)
                     {
-                        if (fd->bytes_written - bytes_written > INT32_MAX)
+                        if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
                         {
-                            to_write = INT32_MAX;
+                            to_write = MAX_MPIWRITE_SIZE;
                         }
                         else
                         {
@@ -1837,7 +1832,7 @@ void adios_mpi_close (struct adios_file_struct * fd
                     char * buf_ptr = buffer;
                     while (total_written < buffer_offset)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
 #if COLLECT_METRICS
 struct timeval a, b;
 gettimeofday (&a, NULL);
@@ -1927,7 +1922,7 @@ timeval_subtract (&timing.t8, &b, &a);
                     char * buf_ptr = fd->buffer;
                     while (total_written < md->vars_header_size)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
@@ -2000,7 +1995,7 @@ timeval_subtract (&timing.t8, &b, &a);
                             char * buf_ptr = fd->buffer;
                             while (total_written < fd->bytes_written)
                             {
-                                write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                                write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                                 err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                                 MPI_Get_count(&md->status, MPI_BYTE, &count);
                                 if (count != write_len)
@@ -2062,7 +2057,7 @@ timeval_subtract (&timing.t8, &b, &a);
                     char * buf_ptr = fd->buffer;
                     while (total_written < md->vars_header_size)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
@@ -2210,7 +2205,7 @@ timeval_subtract (&timing.t8, &b, &a);
                     char * buf_ptr = fd->buffer;
                     while (total_written < fd->bytes_written)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
@@ -2257,7 +2252,7 @@ timeval_subtract (&timing.t8, &b, &a);
                     char * buf_ptr = buffer;
                     while (total_written < buffer_offset)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
                         if (count != write_len)
diff --git a/src/write/adios_mpi_amr.c b/src/write/adios_mpi_amr.c
index ed0b4d6..e312410 100644
--- a/src/write/adios_mpi_amr.c
+++ b/src/write/adios_mpi_amr.c
@@ -40,7 +40,8 @@ enum ADIOS_MPI_AMR_IO_TYPE
 
 static int adios_mpi_amr_initialized = 0;
 
-#define is_aggregator(rank)  md->g_is_aggregator[rank]
+//#define is_aggregator(rank)  md->g_is_aggregator[rank]
+#define is_aggregator(rank)  (md->g_color2 == 0)
 #define FREE(v) \
   if (v)        \
   {             \
@@ -94,7 +95,9 @@ struct adios_MPI_data_struct
     int g_have_mdf;
     int g_merging_pgs;
     int g_num_ost;
+    int is_local_fs;
     int g_threading;
+    int is_color_set; // whether 'color' is set from XML.
     int g_color1;
     int g_color2;
     MPI_Offset * g_offsets;
@@ -160,6 +163,10 @@ struct obd_uuid {
         char uuid[40];
 };
 
+#ifdef HAVE_FGR
+#include "fgr.h"
+#endif
+
 static void trim_spaces (char * str)
 {
     char * t = str, * p = NULL;
@@ -236,25 +243,82 @@ int * parseOSTSkipping (int * ost_list, char * str, int n_ost)
     return ost_list;
 }
 
+#ifdef HAVE_FGR
+int find_myost (MPI_Comm comm)
+{
+    uint32_t * nids, * osts, myid;
+    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();
+        for (i = 0; i < nnids; i++)
+        {
+            if (nids[i] == myid)
+            {
+                break;
+            }
+        }
+
+        if (i == nnids)
+        {
+            // something is wrong
+        }
+
+        free (nids);
+        free (osts);
+    
+        return i;
+    }
+    else
+    {
+        free (nids);
+        free (osts);
+        return -1;
+    }
+}
+#endif
+
 static void
 //adios_mpi_amr_set_striping_unit(MPI_File fh, char *filename, char *parameters)
 adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *parameters)
 {
-    MPI_File fh = md->fh;
     char * filename = md->subfile_name;
-    struct statfs fsbuf;
-    int err = 0, flag;
+    int err = 0;
     uint64_t striping_unit = 0;
     uint16_t striping_count = 0;
-    char     value[64], *temp_string, *p_count,*p_size;
-    int fd, old_mask, perm, n_ost_skipping, n_ost, n, i;
-    MPI_Info info_used;
+    char     *temp_string, *p_count,*p_size;
+    int fd, old_mask, perm, n_ost_skipping, n_ost, n, i, should_striping;
+    int random_offset_flag, name_len;
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_count = strstr (temp_string, "stripe_count"))
+    if ( (p_count = strstr (temp_string, "striping")) )
+    {
+        char * p = strchr (p_count, '=');
+        char * q = strtok (p, ";");
+        if (!q)
+            should_striping = atoi (q + 1);
+        else
+            should_striping = atoi (p + 1);
+    }
+    else
+    {
+        should_striping = 1;
+    }
+
+    if (should_striping == 0)
+    {
+        return;
+    }
+
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
+    if ( (p_count = strstr (temp_string, "stripe_count")) )
     {
         char * p = strchr (p_count, '=');
         char * q = strtok (p, ";");
@@ -272,7 +336,25 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "stripe_size"))
+    if ( (p_count = strstr (temp_string, "random_offset")) )
+    {
+        char * p = strchr (p_count, '=');
+        char * q = strtok (p, ";");
+        if (!q)
+            random_offset_flag = atoi (q + 1);
+        else
+            random_offset_flag = atoi (p + 1);
+    }
+    else
+    {
+        // By default, set stripe count to 1 to maximize concurrency.
+        random_offset_flag = 0;
+    }
+
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
+    if ( (p_size = strstr (temp_string, "stripe_size")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -333,7 +415,19 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
             i++;
         }
 
-        lum.lmm_stripe_offset = i;
+#ifdef HAVE_FGR
+       int ost_id = find_myost (md->group_comm);
+       if (ost_id >= 0)
+       {
+           lum.lmm_stripe_offset = ost_id;
+       }
+       else
+       {
+           lum.lmm_stripe_offset = (random_offset_flag ? -1 : i);
+       }
+#else
+        lum.lmm_stripe_offset = (random_offset_flag ? -1 : i);
+#endif
         ioctl (fd, LL_IOC_LOV_SETSTRIPE
               ,(void *) &lum
               );
@@ -351,15 +445,13 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
 static void
 adios_mpi_amr_set_have_mdf (char * parameters, struct adios_MPI_data_struct * md)
 {
-    int err = 0, flag, i, aggr_group_size, remain, index;
-    int nproc = md->size, rank = md->rank;
-    char value[64], *temp_string, *p_count,*p_size;
+    char *temp_string, *p_size;
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "have_metadata_file"))
+    if ( (p_size = strstr (temp_string, "have_metadata_file")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -381,9 +473,9 @@ adios_mpi_amr_set_have_mdf (char * parameters, struct adios_MPI_data_struct * md
 static void
 adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_data_struct * md)
 {
-    int err = 0, flag, i, aggr_group_size, remain, index;
+    int i, aggr_group_size, remain, index;
     int nproc = md->size, rank = md->rank;
-    char value[64], *temp_string, *p_count,*p_size;
+    char *temp_string, *p_size;
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
 
@@ -391,7 +483,7 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "num_ost"))
+    if ( (p_size = strstr (temp_string, "num_ost")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -407,8 +499,25 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
+    if ( (p_size = strstr (temp_string, "local-fs")) )
+    {
+        char * p = strchr (p_size, '=');
+        char * q = strtok (p, ";");
+        if (!q)
+            md->is_local_fs = atoi(q + 1);
+        else
+            md->is_local_fs = atoi(p + 1);
+    }
+    else
+    {
+        md->is_local_fs = 0;
+    }
+
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
     // set up # of aggregators
-    if (p_size = strstr (temp_string, "num_aggregators"))
+    if ( (p_size = strstr (temp_string, "num_aggregators")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -429,10 +538,34 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
         }
     }
 
+    // Get 'color' parameter. If 'color' is set,
+    // the num_aggregators will be disregarded.
+    // The actual # of aggregators will be caculated
+    // according to color. 
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
+    if ( (p_size = strstr (temp_string, "color")) )
+    {
+        char * p = strchr (p_size, '=');
+        char * q = strtok (p, ";");
+
+        md->is_color_set = 1;
+        if (!q)
+            md->g_color1 = atoi (q + 1);
+        else
+            md->g_color1 = atoi (p + 1);
+    }
+    else
+    {
+        // by default, use BG
+        md->g_io_type = ADIOS_MPI_AMR_IO_BG;
+    }
+
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "have_metadata_file"))
+    if ( (p_size = strstr (temp_string, "have_metadata_file")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -452,7 +585,7 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "threading"))
+    if ( (p_size = strstr (temp_string, "threading")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -473,7 +606,7 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
 
     md->g_ost_skipping_list = allocOSTList (md->g_num_ost);
 
-    if (p_size = strstr (temp_string, "osts_to_skip"))
+    if ( (p_size = strstr (temp_string, "osts_to_skip")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -488,7 +621,7 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "aggregation_type"))
+    if ( (p_size = strstr (temp_string, "aggregation_type")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
@@ -519,42 +652,52 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
     }
     memset (md->g_is_aggregator, 0, nproc * sizeof(int));
 
-    aggr_group_size = nproc / md->g_num_aggregators;
-    remain = nproc - (int) aggr_group_size * md->g_num_aggregators;
-
-    index = 0;
-    for (i = 0; i < md->g_num_aggregators; i++)
+    if (!md->is_color_set)
     {
-        md->g_is_aggregator[index] = 1;
+        aggr_group_size = nproc / md->g_num_aggregators;
+        remain = nproc - (int) aggr_group_size * md->g_num_aggregators;
 
-        if (i < remain)
-        {
-            index += aggr_group_size + 1;
-        }
-        else
+        index = 0;
+        for (i = 0; i < md->g_num_aggregators; i++)
         {
-            index += aggr_group_size;
+            md->g_is_aggregator[index] = 1;
+
+            if (i < remain)
+            {
+                index += aggr_group_size + 1;
+            }
+            else
+            {
+                index += aggr_group_size;
+            }
         }
-    }
 
-    if (remain == 0)
-    {
-        md->g_color1 = rank / aggr_group_size;
-        md->g_color2 = rank % aggr_group_size;
-    }
-    else
-    {
-        if (rank < (aggr_group_size + 1) * remain)
+        if (remain == 0)
         {
-            md->g_color1 = rank / (aggr_group_size + 1);
-            md->g_color2 = rank % (aggr_group_size + 1);
+            md->g_color1 = rank / aggr_group_size;
+            md->g_color2 = rank % aggr_group_size;
         }
         else
         {
-            md->g_color1 = remain + (rank - (aggr_group_size + 1) * remain) / aggr_group_size;
-            md->g_color2 = (rank - (aggr_group_size + 1) * remain)% aggr_group_size;
+            if (rank < (aggr_group_size + 1) * remain)
+            {
+                md->g_color1 = rank / (aggr_group_size + 1);
+                md->g_color2 = rank % (aggr_group_size + 1);
+            }
+            else
+            {
+                md->g_color1 = remain + (rank - (aggr_group_size + 1) * remain) / aggr_group_size;
+                md->g_color2 = (rank - (aggr_group_size + 1) * remain)% aggr_group_size;
+            }
         }
     }
+    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);
+    }
 }
 
 static void adios_mpi_amr_buffer_write (char ** buffer, uint64_t * buffer_size
@@ -608,7 +751,7 @@ adios_mpi_amr_striping_unit_write(MPI_File   fh
 
     while (total_written < len)
     {
-        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
         MPI_File_write (fh, buf_ptr, write_len, MPI_BYTE, &status);
         MPI_Get_count(&status, MPI_BYTE, &count);
         if (count != write_len)
@@ -720,7 +863,7 @@ void adios_mpi_amr_build_global_index_v1 (char * fname
                                          ,struct adios_index_struct_v1 * index
                                           )
 {
-    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
+    //struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
     struct adios_index_var_struct_v1 * vars_root = index->vars_root;
     struct adios_index_attribute_struct_v1 * attrs_root = index->attrs_root;
     int len;
@@ -754,12 +897,11 @@ void adios_mpi_amr_build_global_index_v1 (char * fname
 }
 
 
-void * adios_mpi_amr_do_mkdir (void * param)
+void * adios_mpi_amr_do_mkdir (char * path)
 {
-    struct adios_file_struct * fd = (struct adios_file_struct *) param;
     // 4 bytes for ".dir" 
-    char * dir_name = malloc (strlen (fd->name) + 4 + 1);
-    sprintf (dir_name, "%s%s", fd->name, ".dir");
+    char * dir_name = malloc (strlen (path) + 4 + 1);
+    sprintf (dir_name, "%s%s", path, ".dir");
     
     mkdir (dir_name, S_IRWXU | S_IRWXG);
   
@@ -771,6 +913,7 @@ void * adios_mpi_amr_do_mkdir (void * param)
 void * adios_mpi_amr_do_open_thread (void * param)
 {
     struct adios_MPI_thread_data_open * td = (struct adios_MPI_thread_data_open *) param;
+    int err;
 
     unlink (td->md->subfile_name);
     if (td->parameters)
@@ -779,11 +922,22 @@ void * adios_mpi_amr_do_open_thread (void * param)
 
     }
 
-    MPI_File_open (MPI_COMM_SELF, td->md->subfile_name
-                  ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                  ,MPI_INFO_NULL
-                  ,&td->md->fh
-                  );
+    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);
+    }
 
     return NULL;
 }
@@ -840,7 +994,9 @@ void adios_mpi_amr_init (const PairStruct * parameters
     md->g_have_mdf = 1;
     md->g_merging_pgs = 0;
     md->g_num_ost = 0;
+    md->is_local_fs = 0;
     md->g_threading = 0;
+    md->is_color_set = 0;
     md->g_color1 = 0;
     md->g_color2 = 0;
     md->g_offsets = 0;
@@ -849,6 +1005,13 @@ void adios_mpi_amr_init (const PairStruct * parameters
     md->g_io_type = ADIOS_MPI_AMR_IO_BG;
 
     adios_buffer_struct_init (&md->b);
+
+#ifdef HAVE_FGR
+    if (fgr_init (0) == false)
+    {
+        adios_error (err_fgr, "fgr_init() error\n");
+    }
+#endif
 }
 
 
@@ -900,6 +1063,7 @@ int adios_mpi_amr_open (struct adios_file_struct * fd
     return 1;
 }
 
+/*
 static
 void build_offsets (struct adios_bp_buffer_struct_v1 * b
                    ,MPI_Offset * offsets, uint64_t size, char * group_name
@@ -930,36 +1094,23 @@ void build_offsets (struct adios_bp_buffer_struct_v1 * b
         pg_root = pg_root->next;
     }
 }
+*/
 
 enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                             ,struct adios_method_struct * method
                                             )
 {
-    int i;
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                       method->method_data;
     char * name, * name_no_path, * ch;
-    char * d_name;
     int err;
-    int sig;    // used for coordinating the MPI_File_open
-
-    int previous;
-    int current;
-    int next;
-    uint16_t flag;
+    //int sig;    // used for coordinating the MPI_File_open
 
     START_TIMER (ADIOS_TIMER_MPI_AMR_AD_SHOULD_BUFFER);
 
     name = malloc (strlen (method->base_path) + strlen (fd->name) + 1);
     sprintf (name, "%s%s", method->base_path, fd->name);
 
-    if (md->rank == md->size - 1)
-        next = -1;
-    else
-        next = md->rank + 1;
-    previous = md->rank - 1;
-    current = md->rank;
-
     fd->base_offset = 0;
 
     switch (fd->mode)
@@ -975,19 +1126,19 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
             if (md->rank == 0)
             {
                 struct lov_user_md lum;
-                struct obd_uuid uuids[1024], * uuidp;
-                int f, rc;
+                int f;
 
                 // open metadata file
-                unlink (fd->name);
+                unlink (name);
 
                 adios_mpi_amr_set_have_mdf (method->parameters, md);
                 if (md->g_have_mdf)
                 {
-                    f = open(fd->name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
+                    f = open(name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
                     if (f == -1)
                     {
-                        adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", strerror(errno));
+//                        adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", strerror(errno));
+                        adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", name);
                         return -1;
                     }
 
@@ -999,7 +1150,8 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 
                     ioctl (f, LL_IOC_LOV_SETSTRIPE ,(void *) &lum);
 #ifdef HAVE_LUSTRE
-
+                    struct obd_uuid uuids[1024];
+                    int rc;
                     md->g_num_ost = 1024;
                     rc = llapi_lov_get_uuids(f, uuids, &md->g_num_ost);
                     if (rc != 0)
@@ -1011,14 +1163,14 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 #endif 
                     close (f);
 
-                    MPI_File_open (MPI_COMM_SELF, fd->name
+                    MPI_File_open (MPI_COMM_SELF, name
                                   ,MPI_MODE_WRONLY | MPI_MODE_CREATE
                                   ,MPI_INFO_NULL
                                   ,&md->mfh
                                   );
                 }
 
-                adios_mpi_amr_do_mkdir (fd);
+//                adios_mpi_amr_do_mkdir (name);
             }
 
             MPI_Bcast (&md->g_num_ost, 1, MPI_INT, 0, md->group_comm);
@@ -1027,8 +1179,23 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
             fd->pg_start_in_file = 0;
             adios_mpi_amr_set_aggregation_parameters (method->parameters, md);
 
+            if (is_aggregator (md->rank))
+            {
+                if (md->is_local_fs)
+                {
+                    adios_mpi_amr_do_mkdir (name);
+                }
+                else
+                {
+                    if (md->rank == 0)
+                    {
+                        adios_mpi_amr_do_mkdir (name);
+                    }
+                }
+            }
+
             // Check if fd->name contains path
-            if (ch = strrchr (fd->name, '/'))
+            if ( (ch = strrchr (fd->name, '/')) )
             {
                 name_no_path = malloc (strlen (ch + 1) + 1); 
                 strcpy (name_no_path, ch + 1); 
@@ -1039,10 +1206,10 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                 strcpy (name_no_path, fd->name);
             }
 
-            name = realloc (name, strlen (fd->name) + 5 + strlen (method->base_path) + strlen (name_no_path) + 1 + 10 + 1);
+            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", fd->name, ".dir/", method->base_path, name_no_path, md->g_color1);
+            sprintf (name, "%s%s%s%s.%d", method->base_path, fd->name, ".dir/", name_no_path, md->g_color1);
             md->subfile_name = strdup (name);
             fd->subfile_index = (uint32_t)md->g_color1;
 
@@ -1126,6 +1293,17 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
             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);
 
@@ -1601,6 +1779,7 @@ void adios_mpi_amr_read (struct adios_file_struct * fd
     v->data_size = buffer_size;
 }
 
+/*
 static void adios_mpi_amr_do_read (struct adios_file_struct * fd
                               ,struct adios_method_struct * method
                               )
@@ -1615,9 +1794,11 @@ static void adios_mpi_amr_do_read (struct adios_file_struct * fd
     data.buffer = 0;
     data.buffer_len = 0;
 
-    switch (md->b.version & ADIOS_VERSION_NUM_MASK)
+    uint32_t version = md->b.version & ADIOS_VERSION_NUM_MASK;
+    switch (version)
     {
         case 1:
+        case 2:
         {
             // the three section headers
             struct adios_process_group_header_struct_v1 pg_header;
@@ -1700,12 +1881,13 @@ static void adios_mpi_amr_do_read (struct adios_file_struct * fd
         default:
             adios_error (err_invalid_file_version, 
                     "MPI_AMR method read: file version unknown: %u\n",
-                    md->b.version);
+                    version);
             return;
     }
 
     adios_buffer_struct_clear (&md->b);
 }
+*/
 
 static
 uint32_t adios_mpi_amr_calculate_attributes_size (struct adios_file_struct * fd)
@@ -1754,7 +1936,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             uint64_t buffer_size = 0;
             uint64_t buffer_offset = 0;
             uint64_t index_start = md->b.pg_index_offset, index_start1;
-            int * pg_sizes = 0, * disp = 0, * sendbuf = 0, * recvbuf = 0, * attr_sizes = 0;
+            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;
@@ -1935,11 +2117,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
             {
                 //printf ("do not merge pg\n");
-                struct adios_bp_buffer_struct_v1 b;
-                struct adios_process_group_header_struct_v1 pg_header;
-                struct adios_vars_header_struct_v1 vars_header;
-                int pg_size, header_size;
-                uint64_t vars_count_offset;
+                int pg_size;
                 MPI_Request request;
                 MPI_Status status;
 
@@ -1974,8 +2152,8 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     if (2 * max_data_size > MAX_AGG_BUF)
                     {
                         log_warn ("MPI_AMR method (BG): The max allowed aggregation "
-                                "buffer is %llu bytes.\n"
-                                "But this ADIOS method needs %llu bytes for aggregation\n",
+                                "buffer is %d bytes.\n"
+                                "But this ADIOS method needs %d bytes for aggregation\n",
                                 MAX_AGG_BUF, 2 * max_data_size);
                     }
 
@@ -1984,7 +2162,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     if (aggr_buff == 0 || recv_buff == 0)
                     {
                         adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
-                                    "2 x %llu bytes for aggregation buffers.\n", 
+                                    "2 x %d bytes for aggregation buffers.\n", 
                                     max_data_size);
                         return;
                     }
@@ -1994,7 +2172,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     if (max_data_size > MAX_AGG_BUF)
                     {
                         log_warn ("MPI_AMR method (BG): The max allowed aggregation "
-                                  "buffer is %llu bytes.\n",
+                                  "buffer is %d bytes.\n",
                                   MAX_AGG_BUF);
                     }
 
@@ -2002,7 +2180,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     if (recv_buff == 0)
                     {
                         adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
-                                    "%llu bytes for receive buffer.\n", 
+                                    "%d bytes for receive buffer.\n", 
                                     max_data_size);
                         return;
                     }
@@ -2095,18 +2273,6 @@ 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_base_offset = 0, attr_base_offset = 0;
-
-                    // change to relative offset
-                    if (md->index->vars_root)
-                    {
-                        var_base_offset = md->index->vars_root->characteristics [0].offset;
-                    }
-
-                    if (md->index->attrs_root)
-                    {
-                        attr_base_offset = md->index->attrs_root->characteristics [0].offset;
-                    }
 
                     for (i = 0; i < new_rank; i++)
                     {
@@ -2349,7 +2515,6 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 // write out the metadata file from rank 0
                 if (md->rank == 0)
                 {
-                    MPI_File m_file;
                     char * global_index_buffer = 0;
                     uint64_t global_index_buffer_size = 0;
                     uint64_t global_index_buffer_offset = 0;
@@ -2405,6 +2570,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
             md->g_num_aggregators = 0;
             md->g_have_mdf = 1;
+            md->is_color_set = 0;
             md->g_color1 = 0;
             md->g_color2 = 0;
 
@@ -2435,6 +2601,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
     md->mfh = 0;
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
+    if (md->g_ost_skipping_list) {
+        free (md->g_ost_skipping_list);
+        md->g_ost_skipping_list = NULL;
+    }
 
     adios_clear_index_v1 (md->index);
     return;
@@ -2508,7 +2678,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     if (count != md->vars_header_size)
                     {
-                        log_warn ("d:MPI_AMR method tried to write %llu, only wrote %d\n",
+                        log_warn ("d:MPI_AMR method tried to write %llu, only wrote %llu\n",
                                 md->vars_header_size, count);
                     }
                 }
@@ -2654,11 +2824,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
             {
                 //printf ("do not merge pg\n");
-                struct adios_bp_buffer_struct_v1 b;
-                struct adios_process_group_header_struct_v1 pg_header;
-                struct adios_vars_header_struct_v1 vars_header;
-                int pg_size, header_size;
-                uint64_t vars_count_offset;
+                int pg_size;
 
                 pg_size = fd->bytes_written;
                 pg_sizes = (int *) malloc (new_group_size * 4);
@@ -2691,7 +2857,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 {
                     if (total_data_size > MAX_AGG_BUF)
                     {
-                        log_warn ("The max allowed aggregation buffer is %llu. Requested %llu.\n"
+                        log_warn ("The max allowed aggregation buffer is %d. Requested %d.\n"
                                 "Need to increase the number of aggregators.\n",
                                 MAX_AGG_BUF, total_data_size);
                     }
@@ -2699,7 +2865,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     if (aggr_buff == 0)
                     {
                         adios_error (err_no_memory, 
-                                "MPI_AMR method (AG): Cannot allocate %llu bytes "
+                                "MPI_AMR method (AG): Cannot allocate %d bytes "
                                 "for aggregation buffer.\n"
                                 "Need to increase the number of aggregators.\n",
                                 total_data_size);
@@ -2917,10 +3083,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 }
 
-                uint64_t count = 0;
                 if (is_aggregator(md->rank))
                 {
 #if 0
+                    uint64_t count = 0;
                     pthread_join (t, NULL);
           
                     write_thread_data.fh = &md->fh;
@@ -2965,24 +3131,6 @@ 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_base_offset = 0, attr_base_offset = 0;
-
-                    // change to relative offset
-                    if (md->index->vars_root)
-                    {
-                        var_base_offset = md->index->vars_root->characteristics [0].offset;
-                    }
-
-                    if (md->index->attrs_root)
-                    {
-                        attr_base_offset = md->index->attrs_root->characteristics [0].offset;
-                    }
-/*
-                    adios_mpi_amr_subtract_offset (var_base_offset
-                                                   ,var_base_offset
-                                                   ,md->index
-                                                   );
-*/
 
                     for (i = 0; i < new_rank; i++)
                     {
@@ -3298,7 +3446,6 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             // write out the metadata file from rank 0
             if (md->rank == 0)
             {
-                MPI_File m_file;
                 char * global_index_buffer = 0;
                 uint64_t global_index_buffer_size = 0;
                 uint64_t global_index_buffer_offset = 0;
@@ -3364,6 +3511,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
             md->g_num_aggregators = 0;
             md->g_have_mdf = 1;
+            md->is_color_set = 0;
             md->g_color1 = 0;
             md->g_color2 = 0;
 
@@ -3401,6 +3549,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
     md->mfh = 0;
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
+    if (md->g_ost_skipping_list) {
+        free (md->g_ost_skipping_list);
+        md->g_ost_skipping_list = NULL;
+    }
 
     adios_clear_index_v1 (md->index);
 }
@@ -3436,6 +3588,9 @@ void adios_mpi_amr_finalize (int mype, struct adios_method_struct * method)
                                                  method->method_data;
     adios_free_index_v1 (md->index);
 
+#ifdef HAVE_FGR
+    fgr_finalize ();
+#endif
     if (adios_mpi_amr_initialized)
         adios_mpi_amr_initialized = 0;
 }
diff --git a/src/write/adios_mpi_bgq.c b/src/write/adios_mpi_bgq.c
index efb07b3..c6b6b99 100644
--- a/src/write/adios_mpi_bgq.c
+++ b/src/write/adios_mpi_bgq.c
@@ -314,7 +314,7 @@ adios_mpi_bgq_striping_unit_write(MPI_File   fh
 
     while (total_written < len)
     {
-        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
         MPI_File_write (fh, buf_ptr, write_len, MPI_BYTE, &status);
         MPI_Get_count(&status, MPI_BYTE, &count);
         if (count != write_len)
@@ -1049,9 +1049,11 @@ static void adios_mpi_bgq_do_read (struct adios_file_struct * fd
     data.buffer = 0;
     data.buffer_len = 0;
 
-    switch (md->b.version & ADIOS_VERSION_NUM_MASK)
+    uint32_t version = md->b.version & ADIOS_VERSION_NUM_MASK;
+    switch (version)
     {
         case 1:
+        case 2:
         {
             // the three section headers
             struct adios_process_group_header_struct_v1 pg_header;
@@ -1133,8 +1135,7 @@ static void adios_mpi_bgq_do_read (struct adios_file_struct * fd
 
         default:
             adios_error (err_invalid_file_version, 
-                    "MPI_BGQ method read: file version unknown: %u\n",
-                    md->b.version);
+                    "MPI_BGQ method read: file version unknown: %u\n", version);
             return;
     }
 
@@ -1200,12 +1201,12 @@ void adios_mpi_bgq_simple_close (struct adios_file_struct * fd
             if (fd->shared_buffer == adios_flag_yes)
             {    
                 // if we need to write > 2 GB, need to do it in parts
-                // since count is limited to INT32_MAX (signed 32-bit max).
+                // since count is limited to MAX_MPIWRITE_SIZE (signed 32-bit max).
                 uint64_t bytes_written = 0; 
                 int32_t to_write = 0; 
-                if (fd->bytes_written > INT32_MAX)
+                if (fd->bytes_written > MAX_MPIWRITE_SIZE)
                 {    
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }    
                 else 
                 {    
@@ -1249,9 +1250,9 @@ void adios_mpi_bgq_simple_close (struct adios_file_struct * fd
                     bytes_written += to_write;
                     if (fd->bytes_written > bytes_written)
                     {
-                        if (fd->bytes_written - bytes_written > INT32_MAX)
+                        if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
                         {
-                            to_write = INT32_MAX;
+                            to_write = MAX_MPIWRITE_SIZE;
                         }
                         else
                         {
@@ -1387,7 +1388,7 @@ void adios_mpi_bgq_simple_close (struct adios_file_struct * fd
       
                     while (total_written < buffer_offset)
                     {
-                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
                         err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
 
                         MPI_Get_count(&md->status, MPI_BYTE, &count);
diff --git a/src/write/adios_mpi_lustre.c b/src/write/adios_mpi_lustre.c
index 090908d..eb71250 100644
--- a/src/write/adios_mpi_lustre.c
+++ b/src/write/adios_mpi_lustre.c
@@ -10,6 +10,8 @@
 #include <math.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 
 // xml parser
 #include <mxml.h>
@@ -222,20 +224,16 @@ static void trim_spaces (char * str)
 static void
 adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adios_MPI_data_struct * md)
 {
-    MPI_File fh = md->fh;
-    int nproc = md->size;
-    struct statfs fsbuf;
-    int err = 0, flag;
+    int err = 0;
 //    uint64_t striping_unit = 0;
-    uint64_t block_unit = 0;
     uint16_t striping_count = 0;
     uint16_t stripe_offset = -1;
-    char     value[64], *temp_string, *p_count,*p_size;
-    MPI_Info info_used;
+    char     *temp_string, *p_count,*p_size;
 
-    int fd, old_mask, perm, num_ost, rc;
-    struct lov_user_md lum;
-    struct obd_uuid uuids[1024], * uuidp;
+    int fd, old_mask, perm;
+#ifdef HAVE_LUSTRE
+    int num_ost;
+#endif
 
     old_mask = umask(022);
     umask(old_mask);
@@ -247,6 +245,8 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
 
 #ifdef HAVE_LUSTRE
     // To get the number of ost's in the system
+    struct obd_uuid uuids[1024];
+    int rc;
     num_ost = 1024;
     rc = llapi_lov_get_uuids(fd, uuids, &num_ost);
     if (rc != 0)
@@ -256,14 +256,14 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
                 );
     }
 #else
-    num_ost = 0;
+    //num_ost = 0;
 #endif
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_count = strstr (temp_string, "stripe_count"))
+    if ( (p_count = strstr (temp_string, "stripe_count")) )
     {
         char * p = strchr (p_count, '=');
         char * q = strtok (p, ",");
@@ -275,6 +275,7 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
     else
     {
 #ifdef HAVE_LUSTRE
+        int nproc = md->size;
         striping_count = (nproc > num_ost ? -1 : nproc);
 #else
         striping_count = 4;
@@ -284,7 +285,7 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "stripe_size"))
+    if ( (p_size = strstr (temp_string, "stripe_size")))
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ",");
@@ -302,7 +303,7 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "stripe_offset"))
+    if ( (p_size = strstr (temp_string, "stripe_offset")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ",");
@@ -317,23 +318,6 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
         stripe_offset = -1;
     }
 
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    if (p_size = strstr (temp_string, "block_size"))
-    {
-        char * p = strchr (p_size, '=');
-        char * q = strtok (p, ",");
-        if (!q)
-            block_unit = atoi(q + 1);
-        else
-            block_unit = atoi(p + 1);
-    }
-    else
-    {
-        // set block_unit to 0 to make one large write
-        block_unit = 0;
-    }
 
     free (temp_string);
 
@@ -361,13 +345,13 @@ adios_mpi_lustre_set_striping_unit(char *filename, char *parameters, struct adio
 static void
 adios_mpi_lustre_set_block_unit(uint64_t *block_unit, char *parameters)
 {
-    char *temp_string, *p_count,*p_size;
+    char *temp_string, *p_size;
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "block_size"))
+    if ( (p_size = strstr (temp_string, "block_size")) )
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ",");
@@ -489,7 +473,7 @@ printf("adios_mpi_lustre_striping_unit_write offset=%12lld len=%12d\n",offset,wr
         char * buf_ptr = buf;
         while (total_written < len)
         {
-            write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+            write_len = (to_write > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_write;
             MPI_File_write (fh, buf_ptr, write_len, MPI_BYTE, &status);
             MPI_Get_count(&status, MPI_BYTE, &count);
             if (count != write_len)
@@ -850,9 +834,9 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                     }
                     // How to handle that each processor has varying amount of data??
                     md->striping_unit = offsets[1] - offsets[0];
-                    if (md->striping_unit > 4 * 1024 * 1024 * 1024L)
+                    if (md->striping_unit > 4 * 1024 * (uint64_t) (1024 * 1024L))
                     {
-                        md->striping_unit = 4 * 1024 * 1024 * 1024L;
+                        md->striping_unit = 4 * 1024 * (uint64_t) (1024 * 1024L);
                     }
 
                     md->b.pg_index_offset =   offsets [md->size - 1]
@@ -1357,7 +1341,7 @@ void adios_mpi_lustre_write (struct adios_file_struct * fd
 
         // write payload
         // adios_write_var_payload_v1 (fd, v);
-        uint64_t var_size = adios_get_var_size (v, fd->group, v->data);
+        uint64_t var_size = adios_get_var_size (v, v->data);
         if (fd->base_offset + var_size > fd->pg_start_in_file + fd->write_size_bytes) 
             fprintf (stderr, "adios_mpi_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n");
@@ -1471,15 +1455,11 @@ static void adios_mpi_lustre_do_read (struct adios_file_struct * fd
                                                       method->method_data;
     struct adios_var_struct * v = fd->group->vars;
 
-    struct adios_parse_buffer_struct data;
-
-    data.vars = v;
-    data.buffer = 0;
-    data.buffer_len = 0;
-
-    switch (md->b.version & ADIOS_VERSION_NUM_MASK)
+    uint32_t version = md->b.version & ADIOS_VERSION_NUM_MASK;
+    switch (version)
     {
         case 1:
+        case 2:
         {
             // the three section headers
             struct adios_process_group_header_struct_v1 pg_header;
@@ -1561,9 +1541,7 @@ static void adios_mpi_lustre_do_read (struct adios_file_struct * fd
         }
 
         default:
-            fprintf (stderr, "MPI read: file version unknown: %u\n"
-                    ,md->b.version
-                    );
+            fprintf (stderr, "MPI read: file version unknown: %u\n", version);
             return;
     }
 
@@ -1622,7 +1600,6 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 adios_write_close_vars_v1 (fd);
                 // fd->vars_start gets updated with the size written
                 uint64_t count;
-                int retlen;
                 START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 count = adios_mpi_lustre_striping_unit_write(
                                   md->fh,
@@ -1634,7 +1611,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 if (count != md->vars_header_size)
                 {
                     fprintf (stderr, "d:MPI method tried to write %llu, "
-                                     "only wrote %d\n"
+                                     "only wrote %llu\n"
                             ,md->vars_header_size
                             ,count
                             );
diff --git a/src/write/adios_nc4.c b/src/write/adios_nc4.c
index 505f484..d15b7c4 100644
--- a/src/write/adios_nc4.c
+++ b/src/write/adios_nc4.c
@@ -18,6 +18,7 @@
 #include "core/adios_transport_hooks.h"
 #include "core/adios_internals.h"
 #include "core/util.h"
+#include "netcdf_par.h"
 #include "netcdf.h"
 
 #include "nssi/io_timer.h"
diff --git a/src/write/adios_nssi.c b/src/write/adios_nssi.c
index 637b6e8..94023c1 100644
--- a/src/write/adios_nssi.c
+++ b/src/write/adios_nssi.c
@@ -1457,7 +1457,7 @@ void adios_nssi_write(
             if (DEBUG>3) fprintf(stderr, "-------------------------\n");
             if (DEBUG>3) fprintf(stderr, "write var: %s start!\n", v->name);
         }
-        uint64_t var_size = adios_get_var_size (v, f->group, data);
+        uint64_t var_size = adios_get_var_size (v, data);
         if (DEBUG>2) printf("rank (%d) adios_nssi_write: vpath(%s) vname(%s) vsize(%ld)\n", global_rank, v->path, v->name, var_size);
         write_var(file_data,
                 f->group,
diff --git a/src/write/adios_posix.c b/src/write/adios_posix.c
index 1b71ccd..bfd85e1 100644
--- a/src/write/adios_posix.c
+++ b/src/write/adios_posix.c
@@ -110,7 +110,6 @@ int adios_posix_open (struct adios_file_struct * fd
 {
     char * subfile_name;
     char * mdfile_name;
-    int rank;
     char * name_with_rank, rank_string[16];
     struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
                                                           method->method_data;
@@ -382,6 +381,7 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
                 switch (version & ADIOS_VERSION_NUM_MASK)
                 {
                     case 1:
+                    case 2:
                         // read the old stuff and set the base offset
                         adios_posix_read_index_offsets (&p->b);
                         adios_parse_index_offsets_v1 (&p->b);
@@ -469,9 +469,9 @@ enum ADIOS_FLAG adios_posix_should_buffer (struct adios_file_struct * fd
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,fd->bytes_written
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -533,9 +533,9 @@ void adios_posix_write (struct adios_file_struct * fd
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,fd->bytes_written
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -545,16 +545,16 @@ void adios_posix_write (struct adios_file_struct * fd
 
         // write payload
         adios_write_var_payload_v1 (fd, v);
-        uint64_t var_size = adios_get_var_size (v, fd->group, v->data);
+        uint64_t var_size = adios_get_var_size (v, v->data);
         if (fd->base_offset + var_size > fd->pg_start_in_file + fd->write_size_bytes)
             fprintf (stderr, "adios_posix_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n"); 
 
         int32_t to_write;
         uint64_t bytes_written = 0;
-        if (var_size > INT32_MAX)
+        if (var_size > MAX_MPIWRITE_SIZE)
         {
-            to_write = INT32_MAX;
+            to_write = MAX_MPIWRITE_SIZE;
         }
         else
         {
@@ -568,9 +568,9 @@ void adios_posix_write (struct adios_file_struct * fd
             STOP_TIMER (ADIOS_TIMER_POSIX_IO);
             if (var_size > bytes_written)
             {
-                if (var_size - bytes_written > INT32_MAX)
+                if (var_size - bytes_written > MAX_MPIWRITE_SIZE)
                 {
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }
                 else
                 {
@@ -586,9 +586,9 @@ void adios_posix_write (struct adios_file_struct * fd
         if (s != var_size)
         {
             fprintf (stderr, "POSIX method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,var_size
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -689,9 +689,9 @@ static void adios_posix_do_write (struct adios_file_struct * fd
             fprintf (stderr, "adios_posix_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n");
 
-        if (fd->bytes_written > INT32_MAX)
+        if (fd->bytes_written > MAX_MPIWRITE_SIZE)
         {
-            to_write = INT32_MAX;
+            to_write = MAX_MPIWRITE_SIZE;
         }
         else
         {
@@ -704,9 +704,9 @@ static void adios_posix_do_write (struct adios_file_struct * fd
             bytes_written += to_write;
             if (fd->bytes_written > bytes_written)
             {
-                if (fd->bytes_written - bytes_written > INT32_MAX)
+                if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
                 {
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }
                 else
                 {
@@ -733,20 +733,16 @@ static void adios_posix_do_read (struct adios_file_struct * fd
                                                           method->method_data;
     struct adios_var_struct * v = fd->group->vars;
 
-    struct adios_parse_buffer_struct data;
-
-    data.vars = v;
-    data.buffer = 0;
-    data.buffer_len = 0;
-
     uint32_t version = 0;
 
     adios_posix_read_version (&p->b);
     adios_parse_version (&p->b, &version);
+    version &= ADIOS_VERSION_NUM_MASK;
 
-    switch (version & ADIOS_VERSION_NUM_MASK)
+    switch (version)
     {
         case 1:
+        case 2:
         {
             struct adios_index_struct_v1 * index = adios_alloc_index_v1(0); // no hashtables
             struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
@@ -850,9 +846,7 @@ static void adios_posix_do_read (struct adios_file_struct * fd
         }
 
         default:
-            fprintf (stderr, "POSIX read: file version unknown: %u\n"
-                    ,version
-                    );
+            fprintf (stderr, "POSIX read: file version unknown: %u\n", version);
             return;
     }
 
@@ -894,9 +888,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,fd->vars_start
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -925,9 +919,9 @@ void adios_posix_close (struct adios_file_struct * fd
                         if (s != fd->bytes_written)
                         {
                             fprintf (stderr, "POSIX method tried to write %llu, "
-                                    "only wrote %llu\n"
+                                    "only wrote %lld\n"
                                     ,fd->bytes_written
-                                    ,s
+                                    ,(int64_t)s
                                     );
                         }
                         fd->base_offset += s;
@@ -952,9 +946,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,p->vars_header_size
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -1068,9 +1062,9 @@ void adios_posix_close (struct adios_file_struct * fd
                     if (s != global_index_buffer_offset)
                     {
                         fprintf (stderr, "POSIX method tried to write %llu, "
-                                         "only wrote %llu\n"
+                                         "only wrote %lld\n"
                                          ,fd->bytes_written
-                                         ,s
+                                         ,(int64_t)s
                                 );
                     }
 
@@ -1119,9 +1113,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,fd->vars_start
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -1147,9 +1141,9 @@ void adios_posix_close (struct adios_file_struct * fd
                         if (s != fd->bytes_written)
                         {
                             fprintf (stderr, "POSIX method tried to write %llu, "
-                                    "only wrote %llu\n"
+                                    "only wrote %lld\n"
                                     ,fd->bytes_written
-                                    ,s
+                                    ,(int64_t)s
                                     );
                         }
                         fd->base_offset += s;
@@ -1174,9 +1168,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,p->vars_header_size
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -1291,9 +1285,9 @@ void adios_posix_close (struct adios_file_struct * fd
                     if (s != global_index_buffer_offset)
                     {
                         fprintf (stderr, "POSIX method tried to write %llu, "
-                                         "only wrote %llu, Mode: a\n"
+                                         "only wrote %lld, Mode: a\n"
                                          ,global_index_buffer_offset
-                                         ,s
+                                         ,(int64_t)s
                                 );
                     }
 
diff --git a/src/write/adios_posix1.c b/src/write/adios_posix1.c
index 6f9a1c6..a505d32 100644
--- a/src/write/adios_posix1.c
+++ b/src/write/adios_posix1.c
@@ -168,6 +168,7 @@ int adios_posix1_open (struct adios_file_struct * fd
                 switch (version & ADIOS_VERSION_NUM_MASK)
                 {
                     case 1:
+                    case 2:
                         // read the old stuff and set the base offset
                         adios_posix_read_index_offsets (&p->b);
                         adios_parse_index_offsets_v1 (&p->b);
@@ -190,7 +191,9 @@ int adios_posix1_open (struct adios_file_struct * fd
                         fd->group->time_index = ++max_time_index;
 
                         adios_posix_read_vars_index (&p->b);
-                        adios_parse_vars_index_v1 (&p->b, &p->index->vars_root, NULL, NULL);
+                        adios_parse_vars_index_v1 (&p->b, &p->index->vars_root, 
+                                                   p->index->hashtbl_vars,
+                                                   &p->index->vars_tail);
 
                         adios_posix_read_attributes_index (&p->b);
                         adios_parse_attributes_index_v1 (&p->b
@@ -248,9 +251,9 @@ enum ADIOS_FLAG adios_posix1_should_buffer (struct adios_file_struct * fd
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX1 method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,fd->bytes_written
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -306,9 +309,9 @@ void adios_posix1_write (struct adios_file_struct * fd
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX1 method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,fd->bytes_written
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -318,16 +321,16 @@ void adios_posix1_write (struct adios_file_struct * fd
 
         // write payload
         // adios_write_var_payload_v1 (fd, v);
-        uint64_t var_size = adios_get_var_size (v, fd->group, v->data);
+        uint64_t var_size = adios_get_var_size (v, v->data);
         if (fd->base_offset + var_size > fd->pg_start_in_file + fd->write_size_bytes)
             fprintf (stderr, "adios_posix1_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n"); 
 
         int32_t to_write;
         uint64_t bytes_written = 0;
-        if (var_size > INT32_MAX)
+        if (var_size > MAX_MPIWRITE_SIZE)
         {
-            to_write = INT32_MAX;
+            to_write = MAX_MPIWRITE_SIZE;
         }
         else
         {
@@ -339,9 +342,9 @@ void adios_posix1_write (struct adios_file_struct * fd
             bytes_written += write (p->b.f, v->data + bytes_written, to_write);
             if (var_size > bytes_written)
             {
-                if (var_size - bytes_written > INT32_MAX)
+                if (var_size - bytes_written > MAX_MPIWRITE_SIZE)
                 {
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }
                 else
                 {
@@ -355,9 +358,9 @@ void adios_posix1_write (struct adios_file_struct * fd
         if (s != var_size)
         {
             fprintf (stderr, "POSIX1 method tried to write %llu, "
-                             "only wrote %llu\n"
+                             "only wrote %lld\n"
                     ,var_size
-                    ,s
+                    ,(int64_t)s
                     );
         }
         fd->base_offset += s;
@@ -456,9 +459,9 @@ static void adios_posix1_do_write (struct adios_file_struct * fd
             fprintf (stderr, "adios_posix1_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n");
 
-        if (fd->bytes_written > INT32_MAX)
+        if (fd->bytes_written > MAX_MPIWRITE_SIZE)
         {
-            to_write = INT32_MAX;
+            to_write = MAX_MPIWRITE_SIZE;
         }
         else
         {
@@ -471,9 +474,9 @@ static void adios_posix1_do_write (struct adios_file_struct * fd
             bytes_written += to_write;
             if (fd->bytes_written > bytes_written)
             {
-                if (fd->bytes_written - bytes_written > INT32_MAX)
+                if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
                 {
-                    to_write = INT32_MAX;
+                    to_write = MAX_MPIWRITE_SIZE;
                 }
                 else
                 {
@@ -499,20 +502,16 @@ static void adios_posix1_do_read (struct adios_file_struct * fd
                                                           method->method_data;
     struct adios_var_struct * v = fd->group->vars;
 
-    struct adios_parse_buffer_struct data;
-
-    data.vars = v;
-    data.buffer = 0;
-    data.buffer_len = 0;
-
     uint32_t version = 0;
 
     adios_posix_read_version (&p->b);
     adios_parse_version (&p->b, &version);
+    version &= ADIOS_VERSION_NUM_MASK;
 
-    switch (version & ADIOS_VERSION_NUM_MASK)
+    switch (version)
     {
         case 1:
+        case 2:
         {
             struct adios_index_struct_v1 * index = adios_alloc_index_v1(0); // no hashtables
             struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
@@ -616,9 +615,7 @@ static void adios_posix1_do_read (struct adios_file_struct * fd
         }
 
         default:
-            fprintf (stderr, "POSIX1 read: file version unknown: %u\n"
-                    ,version
-                    );
+            fprintf (stderr, "POSIX1 read: file version unknown: %u\n", version);
             return;
     }
 
@@ -652,9 +649,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,fd->vars_start
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -680,9 +677,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                     if (s != fd->bytes_written)
                     {
                         fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                         "only wrote %llu\n"
+                                         "only wrote %lld\n"
                                 ,fd->bytes_written
-                                ,s
+                                ,(int64_t)s
                                 );
                     }
                     fd->base_offset += s;
@@ -704,9 +701,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,p->vars_header_size
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -748,9 +745,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,fd->vars_start
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -773,9 +770,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                     if (s != fd->bytes_written)
                     {
                         fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                         "only wrote %llu\n"
+                                         "only wrote %lld\n"
                                 ,fd->bytes_written
-                                ,s
+                                ,(int64_t)s
                                 );
                     }
                     fd->base_offset += s;
@@ -797,9 +794,9 @@ void adios_posix1_close (struct adios_file_struct * fd
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX1 method tried to write %llu, "
-                                     "only wrote %llu\n"
+                                     "only wrote %lld\n"
                             ,p->vars_header_size
-                            ,s
+                            ,(int64_t)s
                             );
                 }
                 fd->offset = 0;
@@ -856,7 +853,7 @@ void adios_posix1_close (struct adios_file_struct * fd
 
 void adios_posix1_finalize (int mype, struct adios_method_struct * method)
 {
-    struct adios_POSIX1_data_struct * p = (struct adios_POSIX_data_struct *)
+    struct adios_POSIX1_data_struct * p = (struct adios_POSIX1_data_struct *)
         method->method_data;
     adios_free_index_v1 (p->index);
     if (adios_posix1_initialized)
diff --git a/src/write/adios_var_merge.c b/src/write/adios_var_merge.c
index 5c8a2fe..3320718 100644
--- a/src/write/adios_var_merge.c
+++ b/src/write/adios_var_merge.c
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
+#include <assert.h>
 
 // xml parser
 #include <mxml.h>
@@ -153,6 +154,7 @@ static uint64_t cast_var_data_as_uint64 (const char * parent_name
         case adios_string:
         case adios_complex:
         case adios_double_complex:
+        default:
             adios_error (err_unspecified,
                          "Cannot convert type %s to integer for var %s\n",
                          adios_type_to_string_int (type), parent_name);
@@ -231,11 +233,12 @@ static uint64_t get_value_for_dim (struct adios_dimension_item_struct * dimensio
 static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm, uint64_t *ldims, uint64_t *gdims, uint64_t *offsets)
 {
     char *sbuf, *recvbuf;
-    int slen, recvlen, blen;
-    uint64_t *t_ldims, *t_offsets, prev_off[3];
+    int slen, blen;
+    uint64_t *t_ldims, *t_offsets;
     int i,j;
     int decomp=0;
 
+    assert (ndims <= 3);
 
     for(i=0;i<3;i++){
         procs[i]=-1;
@@ -251,7 +254,6 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
     slen+=ndims*sizeof(uint64_t);
 
     recvbuf=(char *)malloc(nprocs*ndims*2*sizeof(uint64_t));
-    recvlen=0;
     //rank 0 calculate the info then send to the rest
     if(rank==0) {
         //gather all the info to rank 0
@@ -364,8 +366,6 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
 
 static void cal_offsets(int *procs, int rank, int ndims, int decomp, int *offsets)
 {
-    int i;
-
     if(decomp>=1) {
         offsets[sequence[0]]=rank%procs[sequence[0]];
     }
@@ -381,13 +381,14 @@ static void cal_offsets(int *procs, int rank, int ndims, int decomp, int *offset
 static void cal_process_map(int rank, int *procs)
 {
     int i,j,k;
-    int pos, cnt=0;
+    int cnt=0;
+    //int pos;
 
     if(layout==0) {
         for(i=0;i<procs[2];i++) {
             for(j=0;j<procs[1];j++) {
                 for(k=0;k<procs[0];k++) {
-                    pos=i*procs[0]*procs[1]+j*procs[0]+k;
+                    //pos=i*procs[0]*procs[1]+j*procs[0]+k;
                     proc_map[i*procs[0]*procs[1]+j*procs[0]+k]=cnt;
                     cnt++;
                 }
@@ -398,7 +399,7 @@ static void cal_process_map(int rank, int *procs)
         for(i=0;i<procs[0];i++) {
             for(j=0;j<procs[1];j++) {
                 for(k=0;k<procs[2];k++) {
-                    pos=k*procs[0]*procs[1]+j*procs[0]+i;
+                    //pos=k*procs[0]*procs[1]+j*procs[0]+i;
                     proc_map[k*procs[0]*procs[1]+j*procs[0]+i]=cnt;
                     cnt++;
                 }
@@ -410,7 +411,7 @@ static void cal_process_map(int rank, int *procs)
 
 static int get_clients_2d(int ndims, int level, int *offsets, int scale, int *procs, int rank)
 {
-    int posx, posy, posz, pos;
+    int posx, posy, pos;
 
     if((offsets[0]+scale)<procs[0]) {
         posx=offsets[0]+1*scale;
@@ -513,7 +514,6 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
 {
     int scale=1, step=2;
     int aggrx, aggry, aggrz;
-    int aggr=1;
     int i,j,k;
     int prev_step, hole;
     int *offsets;
@@ -560,7 +560,7 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
                 memset(aggr1d_clients[i-1], 0x00, mal_size*sizeof(struct aggr_client));
             }
 
-            int posx, posy, posz, pos;
+            int pos;
 
             //3D variable
             /*FIXME XXX: hard coded for calculating aggr_clients*/
@@ -701,6 +701,7 @@ static int convert_file_mode(enum ADIOS_METHOD_MODE mode, char * file_mode)
    return 0;
 }
 
+#if 0
 //find the variable within the buffer link list
 static int var_lookup(const char *varname, char *path, struct aggr_var_struct *list)
 {
@@ -722,16 +723,14 @@ static int var_lookup(const char *varname, char *path, struct aggr_var_struct *l
     //variable is not within the list, return -1
     return -1;
 }
+#endif
 
 static void output_vars(struct aggr_var_struct *vars, int varcnt, struct
         adios_MPI_data_struct * md, struct adios_file_struct * fd)
 {
-    int i,j;
+    int i;
     char file_mode[2];
-    char fname[256];
-    uint64_t adios_size, datasize;
-    int iocnt=0;
-    char *output;
+    uint64_t adios_size;
 
     if(convert_file_mode(fd->mode, file_mode) == -1) //strange file mode
         return;
@@ -798,7 +797,6 @@ static void init_layout_flag(struct adios_MPI_data_struct *md)
 
 void init_output_parameters(const PairStruct *params)
 {
-    int len;
     const PairStruct *p = params;
 
     while (p) {
@@ -806,7 +804,7 @@ void init_output_parameters(const PairStruct *params)
             errno = 0;
             aggr_chunksize = strtol(p->value, NULL, 10);
             if (aggr_chunksize > 0 && !errno) {
-                log_debug ("Chunk size set to %llu for VAR_MERGE method\n", aggr_chunksize);
+                log_debug ("Chunk size set to %d for VAR_MERGE method\n", aggr_chunksize);
             } else {
                 log_error ("Invalid 'chunk_size' parameter given to the VAR_MERGE method"
                            "method: '%s'\n", p->value);
@@ -857,91 +855,6 @@ void adios_var_merge_init(const PairStruct * parameters,
 }
 
 
-static void adios_var_to_comm (const char * comm_name
-                              ,enum ADIOS_FLAG host_language_fortran
-                              ,void * data
-                              ,MPI_Comm * comm
-                              )
-{
-    if (data)
-    {
-        int t = *(int *) data;
-
-        if (!comm_name)
-        {
-            if (!t)
-            {
-                log_warn ("TIAN method: communicator not provided and none "
-                          "listed in XML.  Defaulting to MPI_COMM_SELF\n");
-
-                *comm = MPI_COMM_SELF;
-            }
-            else
-            {
-                if (host_language_fortran == adios_flag_yes)
-                {
-                    *comm = MPI_Comm_f2c (t);
-                }
-                else
-                {
-                    *comm = *(MPI_Comm *) data;
-                }
-            }
-        }
-        else
-        {
-            if (!strcmp (comm_name, ""))
-            {
-                if (!t)
-                {
-                    log_warn ("TIAN method: communicator not provided and none "
-                              "listed in XML.  Defaulting to MPI_COMM_SELF\n");
-
-                    *comm = MPI_COMM_SELF;
-                }
-                 else
-                 {
-                     if (host_language_fortran == adios_flag_yes)
-                     {
-                         *comm = MPI_Comm_f2c (t);
-                     }
-                     else
-                     {
-                         *comm = *(MPI_Comm *) data;
-                     }
-                 }
-             }
-             else
-             {
-                 if (!t)
-                 {
-                     log_warn ("TIAN method: communicator not provided but one "
-                               "listed in XML.  Defaulting to MPI_COMM_WORLD\n");
-
-                     *comm = MPI_COMM_WORLD;
-                 }
-                 else
-                 {
-                     if (host_language_fortran == adios_flag_yes)
-                     {
-                         *comm = MPI_Comm_f2c (t);
-                     }
-                     else
-                     {
-                         *comm = *(MPI_Comm *) data;
-                     }
-                 }
-             }
-         }
-     }
-     else
-     {
-         log_warn ("TIAN method: coordination-communication not provided. "
-                   "Using MPI_COMM_WORLD instead\n");
-
-         *comm = MPI_COMM_WORLD;
-     }
-}
 
 static void init_method_parameters()
 {
@@ -996,8 +909,6 @@ enum ADIOS_FLAG adios_var_merge_should_buffer (struct adios_file_struct * fd
                                          ,struct adios_method_struct * method)
 {
 
-    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
-                                                    method->method_data;
     switch (fd->mode)
     {
         case adios_mode_read:
@@ -1023,6 +934,7 @@ enum ADIOS_FLAG adios_var_merge_should_buffer (struct adios_file_struct * fd
     return adios_flag_no;
 }
 
+#if 0
 static void prepare_data(void **data, uint64_t varsize, int dims)
 {
     int i,j,k,l;
@@ -1040,7 +952,9 @@ static void prepare_data(void **data, uint64_t varsize, int dims)
         }
     }
 }
+#endif
 
+#if 0
 static struct aggr_var_struct *allocate_vars(int varcnt, struct aggr_var_struct *vars)
 {
      if(varcnt==0) {
@@ -1054,6 +968,7 @@ static struct aggr_var_struct *allocate_vars(int varcnt, struct aggr_var_struct
 
      return vars;
 }
+#endif
 
 void adios_var_merge_write (struct adios_file_struct * fd
                      ,struct adios_var_struct * v
@@ -1067,11 +982,10 @@ void adios_var_merge_write (struct adios_file_struct * fd
     struct adios_dimension_struct * d = v->dimensions;
     struct aggr_var_struct *tmp;
     uint8_t dims_count = 0;
-    uint64_t total_size, varsize, alloc_size;
-    int64_t afd;
+    uint64_t varsize, alloc_size;
     int i, ndims,type_size=0;
     uint64_t *ldims, *offsets, *gdims;
-    char *new_ldims, *dimensions, *local_offsets, *global_dimensions;
+    char *new_ldims;
     int chunk_cnt, decomp=0;
 
     ndims=0;
@@ -1092,7 +1006,7 @@ void adios_var_merge_write (struct adios_file_struct * fd
     init_vars(vars, v, ndims);
 
     //retrieve the chunk size
-    varsize=adios_get_var_size(v, method->group, data);
+    varsize=adios_get_var_size(v, data);
 
     //number of the dimensions of this variable
     ndims=count_dimensions(v->dimensions);
@@ -1136,7 +1050,7 @@ void adios_var_merge_write (struct adios_file_struct * fd
 
         if(type_size==1) {
             vars->multidim=adios_flag_yes;
-            varsize=adios_get_var_size(v, method->group, data);
+            varsize=adios_get_var_size(v, data);
             vars->data=malloc(varsize);
             memcpy(vars->data, data, varsize);
         }
@@ -1235,15 +1149,17 @@ void adios_var_merge_write (struct adios_file_struct * fd
     {
         vars->multidim=adios_flag_no;
 
-        varsize=adios_get_var_size(v, method->group, data);
+        varsize=adios_get_var_size(v, data);
         vars->data=malloc(varsize);
         memcpy(vars->data, data, varsize);
     }
 
     totalsize+=varsize;
     if(varsize>0) {
-        // NCSU ALACRITY-ADIOS: In the future, the transform type string here needs to be reconsidered, to possibly allow transforms after aggregation...
-        adios_common_define_var(grp, vars->name, vars->path, vars->type, vars->dimensions, vars->global_dimensions, vars->local_offsets, "");
+        adios_common_define_var(grp, vars->name, vars->path, vars->type, vars->dimensions, vars->global_dimensions, vars->local_offsets);
+        // NCSU ALACRITY-ADIOS: In the future, the transform method here needs to be 
+        // reconsidered, to possibly allow transforms after aggregation...
+        // call adios_common_set_transform (var, transform_string)
         varcnt++;
     }
     else { //move back the pointer, and release the memory
@@ -1410,8 +1326,8 @@ static void cal_gdims(int ndims, uint64_t *p_offsets, uint64_t *offsets, uint64_
 static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldims, uint64_t *offsets, char *new_ldims, int rank,  void *data, uint64_t varsize, void *output, int type_size, MPI_Comm comm)
 {
     //struct adios_var_struct * v = g->vars;
-    int i, j, k, client_cnt, lev;
-    uint64_t aggrsize, buff_offset, tmpsize, alloc_size;
+    int i, j, k, lev;
+    uint64_t buff_offset, tmpsize, alloc_size;
     uint64_t *tmp_dims, *tmp_offsets, *gdims, *ldims_list, *size_list;
     char   *tmpbuf, *recvbuf, *sendbuf;
     MPI_Status status;
@@ -1575,21 +1491,18 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
 static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_list,
     uint64_t *gdims, uint64_t *size_list, uint64_t totalsize, int nchunks, int rank, int level, int type_size)
 {
-    uint64_t count[3];
-    uint64_t size;
-    int i,j,k, m, cnt;
+    int i,j,k,cnt;
     uint64_t var_offset, dset_offset, buff_offset, size_in_dset[2];
     uint64_t datasize, dst_stride, src_stride;
     //cycles_t c1, c2;
-    double tmem=0;
     char *input;
-    int chunk_cnt;
+    //int chunk_cnt;
     uint64_t prev_x, prev_y, prev_z;
     uint64_t m_offx, m_offy, m_offz;
     uint64_t offx, offy, offz;
     int ni, nj, nk;
 
-    chunk_cnt=(int)pow(2, ndims);
+    //chunk_cnt=(int)pow(2, ndims);
     input=(char *)malloc(totalsize);
     memcpy(input, *output, totalsize);
 
diff --git a/tests/C/Makefile.in b/tests/C/Makefile.in
index 4b6f3b1..2da7fd8 100644
--- a/tests/C/Makefile.in
+++ b/tests/C/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -220,9 +223,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -289,6 +298,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/adios_test_c.c b/tests/C/adios_test_c.c
index f2f8447..cdb93c1 100644
--- a/tests/C/adios_test_c.c
+++ b/tests/C/adios_test_c.c
@@ -59,7 +59,6 @@ int main (int argc, char ** argv)
     char filename [100];
     int64_t io_handle;  // io handle
     MPI_Comm comm = MPI_COMM_WORLD;
-    MPI_Comm c1;
     int rank;
     int size;
     struct timeval time_start;
@@ -69,7 +68,6 @@ int main (int argc, char ** argv)
     struct timeval time_group_size;
     struct timeval time_write1;
     struct timeval time_write2;
-    struct timeval time_close;
     struct timeval * time_diff_all;
 
     MPI_Init (&argc, &argv);
@@ -87,9 +85,6 @@ printf ("rank %d filename: %s\n", rank, filename);
 
     //uint64_t byte_test_length = 768LL * 1024 * 1024;
     uint64_t byte_test_length = 512LL * 1024 * 1024;
-    uint64_t memory_thief_length =  1024 * 1024 * 1024  // 1 GB
-                              + 128 * 1024 * 1024   // 128 MB
-                             - byte_test_length;
 if (rank == 0) printf ("Byte_test_length: %llu\n", byte_test_length);
 #if DO_WRITE
     char * byte_test = 0;
@@ -136,10 +131,6 @@ if (rank == 0) printf ("Byte_test_length: %llu\n", byte_test_length);
     memset (zion1, 0, zionsize1 * sizeof (float));
     memset (zion2, 0, zionsize2 * zionsize2 * sizeof (float));
     memset (zion3, 0, zionsize2 * zionsize3 * sizeof (float));
-    int r_var_x1;
-    int r_var_x2;
-    int r_zsize;
-    float r_z [zionsize1];
 
     int node = 0;
 
@@ -165,6 +156,9 @@ if (rank == 0) printf ("Byte_test_length: %llu\n", byte_test_length);
     // allocate a big block of memory to stymie unwanted local caching
     // that would make the numbers suspect
 #if MEMORY_THIEF
+    uint64_t memory_thief_length =  1024 * 1024 * 1024  // 1 GB
+                              + 128 * 1024 * 1024   // 128 MB
+                             - byte_test_length;
     char * memory_thief = malloc (1 * 1024 * 1024 * 1024);
 #endif
 
@@ -233,8 +227,9 @@ if (rank == 0) printf ("Byte_test_length: %llu\n", byte_test_length);
         printf ("Proc\tSec\n");
         for (i = 0; i < size; i++)
         {
-            printf ("%06d\t%02d.%06d\n", i, time_diff_all [i].tv_sec
-                   ,time_diff_all [i].tv_usec
+            printf ("%06d\t%02lld.%06lld\n", i, 
+                    (int64_t)time_diff_all [i].tv_sec,
+                    (int64_t)time_diff_all [i].tv_usec
                    );
 
             if (time_diff_all [i].tv_sec >= max_sec)
@@ -311,6 +306,10 @@ if (rank == 0) printf ("Byte_test_length: %llu\n", byte_test_length);
 #if DO_READ
 printf ("XXXXXXXXXXXXXXXX do a read XXXXXXXXXXXXXXXXX\n");
 
+    int r_var_x1;
+    int r_var_x2;
+    int r_zsize;
+    float r_z [zionsize1];
     adios_open (&io_handle, type_name, filename, "r", comm);
     adios_group_size (io_handle, 0, &total);
     adios_read (io_handle, "/mype", &r_var_x1, 4);
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.am b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
index b89db08..5a43924 100644
--- a/tests/C/flexpath_tests/1D_arr_global/Makefile.am
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
@@ -18,4 +18,4 @@ reader_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 CLEANFILES = *.bp
 CC=$(MPICC)
-EXTRA_DIST = test_config_flex.xml cfg.h 
+EXTRA_DIST = test_config_flex.xml cfg.h readme.txt
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.in b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
index 82f0926..bf660c7 100644
--- a/tests/C/flexpath_tests/1D_arr_global/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -354,7 +367,7 @@ reader_global_SOURCES = reader.c ../common/utils.c
 reader_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 reader_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = test_config_flex.xml cfg.h 
+EXTRA_DIST = test_config_flex.xml cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
diff --git a/tests/C/flexpath_tests/1D_arr_global/reader.c b/tests/C/flexpath_tests/1D_arr_global/reader.c
index 113db07..69ebb35 100644
--- a/tests/C/flexpath_tests/1D_arr_global/reader.c
+++ b/tests/C/flexpath_tests/1D_arr_global/reader.c
@@ -62,11 +62,6 @@ int main (int argc, char **argv){
 	ADIOS_VARINFO *avi = NULL;
 
 
-	int64_t adios_buf_size;
-
-	int step = 0;
-	int n = 0;
-
 	// read how many processors wrote that array
 	avi = adios_inq_var (adios_handle, "size");
 	if (!avi){
diff --git a/tests/C/flexpath_tests/1D_arr_global/readme.txt b/tests/C/flexpath_tests/1D_arr_global/readme.txt
new file mode 100644
index 0000000..87e54b1
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/readme.txt
@@ -0,0 +1,108 @@
+# The protocol file generated by protogen.py ver. 1.0 on 2013-06-27 12:54
+# AUTHOR: Magda S aka Magic Magg magg dot gatech at gmail dot com
+# DATE: 2013-06-27
+
+
+DESCRIPTION
+===========
+This is a test case for Flexpath. The idea of the test: The writer writes a
+1D array of NX double elements. The array is written as ADIOS global array
+so each process writes in a global space, but in its own place.
+
+The writer writes the 1D array and the reader reads the 1D array of doubles.
+
+There might be as many writers as you wish, and there might be as many readers
+as you wish. However, each rank reads its own rank. The reader knows how many 
+writers were there so if its rank is higher then it quits.
+
+The test can work with two modes (use '-t' option with the appropriate mode):
+
+1. MPI/ADIOS_READ_METHOD_BP
+2. FLEXPATH/ADIOS_READ_METHOD_FLEXPATH
+
+BUILD
+=======
+# you need to set the environment variables as Makefile uses those locations 
+# to locate libraries and headers
+
+export ADIOS_ROOT=/rock/opt/adios/git-dbg
+export MXML_ROOT=/rock/opt/mxml/2.7
+export MPI_ROOT=/rock/opt/openmpi/1.6.3
+export EVPATH_ROOT=/rock/opt/evpath
+
+# in certain cases you might need the lustre directory (e.g., on kraken)
+export LUSTRE_ROOT=/opt/cray/lustre-cray_ss_s/default
+
+
+# build 
+$ make -f Makefile.generic
+
+# should remove all unnecessary exec files 
+$ make -f Makefile.generic clean
+
+RUN
+=====
+# you should remove text file remnants from Flexpath _read_ready.txt, _info_writer.txt
+$ make -f Makefile.generic clean_test
+
+$ mpirun -np 2 ./writer -t flx
+$ mpirun -np 2 ./reader -t flx
+
+See Makefile for other options or add '-h' option to the reader or writer
+
+NOTES
+=======
+2013-09-04 - readme might be outdated
+
+2013-07-17 - tested on my local laptop (MPI and FLEXPATH)
+
+
+OUTDATED (2013-07-08)
+======================
+I will update later. 
+
+RUNNING ON KRAKEN
+=================
+This runs one reader per node and one writer per node.
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+You should be able to run the example with as many readers and writers as you wish.
+
+Example PBS script
+------------------
+#!/bin/bash
+#PBS -l walltime=00:05:00,size=24
+#PBS -A UT-TENN0033
+
+date
+
+echo "nodefile="
+cat $PBS_NODEFILE
+echo "=end nodefile"
+
+# make sure you have all modules loaded
+module use ~smagg/opt/modulefiles
+module load mag-mxml-2.7/kraken-gnu
+module list
+
+cd $PBS_O_WORKDIR
+
+# on Kraken the path needs to be specified precisely 
+# ./writer might cause a strange error
+aprun -n 24 -N 12 /lustre/scratch/smagg/writer &
+sleep 20
+aprun -n 24 -N 12 /lustre/scratch/smagg/reader 
+
+date
+
+# eof
+
+
+TROUBLESHOOTING
+===============
+
+There might be text files left; they should be removed for the next run.
+
+# EOF
diff --git a/tests/C/flexpath_tests/1D_arr_global/writer.c b/tests/C/flexpath_tests/1D_arr_global/writer.c
index 9dd9cf3..1b5e49a 100644
--- a/tests/C/flexpath_tests/1D_arr_global/writer.c
+++ b/tests/C/flexpath_tests/1D_arr_global/writer.c
@@ -66,7 +66,7 @@ int main(int argc, char ** argv){
 	adios_open( &adios_handle, "temperature", FILE_NAME, "w", comm);
 	adios_groupsize = 4 + 4 + 4 + 8 * (NX);
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%lld, adios_totalsize=%lld, retval=%d\n",
 			rank, adios_groupsize, adios_totalsize, retval);
 
 	// write; don't check errors for simplicity reasons
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 85251ae..6547e03 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
@@ -18,5 +18,5 @@ reader_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
 CC=$(MPICC)
 
-EXTRA_DIST = cfg.h
+EXTRA_DIST = cfg.h readme.txt
 
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 c57469d..4b4487c 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -192,9 +195,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -261,6 +270,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -357,7 +370,7 @@ reader_global_noxml_SOURCES = reader.c ../common/utils.c
 reader_global_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 reader_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = cfg.h
+EXTRA_DIST = cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c b/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c
index e14ec0e..4f4c2b8 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c
@@ -33,7 +33,6 @@
 
 
 int main (int argc, char **argv){
-	char filename[256];
 	int rank =0, size =0;
 	int NX = 0;
 	double *t = NULL;
@@ -69,12 +68,10 @@ int main (int argc, char **argv){
 	ADIOS_VARINFO *avi = NULL;
 
 
-	int64_t adios_buf_size;
 	// for storing the variables
 	char buf[STR_BUFFER_SIZE];
 
 	int step = 0;
-	int n = 0;
 
 	// read how many processors wrote that array
 	avi = adios_inq_var (adios_handle, "size");
@@ -150,7 +147,7 @@ int main (int argc, char **argv){
 		goto just_clean;
 	}
 
-	n = sprintf(buf, "Rank %d: var_1d_array: step %d: t: ", rank, step);
+	sprintf(buf, "Rank %d: var_1d_array: step %d: t: ", rank, step);
 
 	int i = 0;
 	for(i=0; i < NX; ++i){
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/readme.txt b/tests/C/flexpath_tests/1D_arr_global_noxml/readme.txt
new file mode 100644
index 0000000..36e080c
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/readme.txt
@@ -0,0 +1,104 @@
+# The protocol file generated by protogen.py ver. 1.0 on 2013-06-27 12:54
+# AUTHOR: Magda S aka Magic Magg magg dot gatech at gmail dot com
+# DATE: 2013-06-27
+
+
+DESCRIPTION
+===========
+This is a test case for ADIOS. Analogous to 1D_arr_global, but in the noxml version.
+
+The idea of the test. The writer writes a
+1D array of NX double elements. The array is written as ADIOS global array
+so each process writes in a global space, but in its own place.
+
+The writer writes the 1D array and the reader reads the 1D array of doubles.
+
+There might be as many writers as you wish, and there might be as many readers
+as you wish. However, each rank reads its own rank. The reader knows how many 
+writers were there so if its rank is higher then it quits.
+
+The test uses might be run in two modes (use '-t' option with the appropriate mode).
+
+1. MPI/ADIOS_READ_METHOD_BP
+2. FLEXPATH/ADIOS_READ_METHOD_FLEXPATH
+
+
+BUILD
+=======
+# you need to set the environment variables as Makefile uses those locations 
+# to locate libraries and headers
+
+export ADIOS_ROOT=/rock/opt/adios/git-dbg
+export MXML_ROOT=/rock/opt/mxml/2.7
+export MPI_ROOT=/rock/opt/openmpi/1.6.3
+export EVPATH_ROOT=/rock/opt/evpath
+
+# in certain cases you might need the lustre directory (e.g., on kraken)
+export LUSTRE_ROOT=/opt/cray/lustre-cray_ss_s/default
+
+# build the MPI/ADIOS_READ_METHOD_BP
+$ make -f Makefile.generic
+
+# should remove all unnecessary exec files 
+$ make -f Makefile.generic clean
+
+# cleans files hanging around after previous runs
+$ make -f Makefile.generic clean_test
+
+RUN
+===== 
+# to clean files hanging around after previous runs
+$ make -f Makefile.generic clean_test
+
+$ mpirun -np 2 writer -t flx
+$ mpirun -np 2 reader -t flx
+
+See Makefile for other options of running the test or use '-h'.
+
+
+OUTDATED (2013-07-08)
+======================
+I will update later. 
+
+RUNNING ON KRAKEN
+=================
+This runs one reader per node and one writer per node.
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+You should be able to run the example with as many readers and writers as you wish.
+
+Example PBS script
+------------------
+#!/bash/bin
+#PBS -l walltime=00:05:00,size=24
+#PBS -A UT-TENN0033
+
+date
+
+echo "nodefile="
+cat $PBS_NODEFILE
+echo "=end nodefile"
+
+# make sure you have all modules loaded
+module use ~smagg/opt/modulefiles
+module load mag-mxml-2.7/kraken-gnu
+module list
+
+cd $PBS_O_WORKDIR
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+date
+
+# eof
+
+
+TROUBLESHOOTING
+===============
+
+There might be text files left; they should be removed for the next run.
+
+# EOF
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
index 62adab8..99c467e 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
@@ -94,7 +94,7 @@ int main(int argc, char ** argv){
 	uint64_t adios_totalsize = 0;
 
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%lld, adios_totalsize=%lld, retval=%d\n",
 				rank, adios_groupsize, adios_totalsize, retval);
 
 	// init the array that I will transport over the sea
diff --git a/tests/C/flexpath_tests/Makefile.in b/tests/C/flexpath_tests/Makefile.in
index 0acfe30..47c8feb 100644
--- a/tests/C/flexpath_tests/Makefile.in
+++ b/tests/C/flexpath_tests/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/flexpath_tests/common/utils.c b/tests/C/flexpath_tests/common/utils.c
index 65df51c..1ce2e11 100644
--- a/tests/C/flexpath_tests/common/utils.c
+++ b/tests/C/flexpath_tests/common/utils.c
@@ -13,6 +13,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
+#include <ctype.h>
 
 #include "misc.h"
 #include "utils.h"
@@ -171,7 +172,6 @@ diag_t gen_1D_array_int(int *p_arr, int arr_len, int rank){
 diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help){
 
 	diag_t diag = DIAG_OK;
-	int tsprt_flag = 0;
 	int c;
 	char *cvalue = NULL;
 	int i = 0;
diff --git a/tests/C/flexpath_tests/global_range_select/Makefile.in b/tests/C/flexpath_tests/global_range_select/Makefile.in
index 4c74bbe..2a3ae3d 100644
--- a/tests/C/flexpath_tests/global_range_select/Makefile.in
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/flexpath_tests/global_range_select/arrays_read.c b/tests/C/flexpath_tests/global_range_select/arrays_read.c
index 803a053..a5c7989 100644
--- a/tests/C/flexpath_tests/global_range_select/arrays_read.c
+++ b/tests/C/flexpath_tests/global_range_select/arrays_read.c
@@ -21,15 +21,11 @@
 
 int main (int argc, char ** argv) 
 {
-    char        filename [256];
-    int         rank, size, i, j;
+    int         rank, j;
     int         NX, NY; 
     double      *t;
     MPI_Comm    comm = MPI_COMM_WORLD;
 
-    int         adios_err;
-    int64_t     adios_handle, adios_buf_size;
-
     MPI_Init (&argc, &argv);
     MPI_Comm_rank (comm, &rank);
 
diff --git a/tests/C/flexpath_tests/include/test_common.h b/tests/C/flexpath_tests/include/test_common.h
index 4ef56e0..994df35 100644
--- a/tests/C/flexpath_tests/include/test_common.h
+++ b/tests/C/flexpath_tests/include/test_common.h
@@ -238,7 +238,7 @@
 #define TEST_LONG_EQUAL(value_ref, value, err_count, test_res) \
 	if (value != value_ref ){ \
 		test_res = TEST_FAILED; \
-		p_test_failed("(expected=%ld, got=%ld)\n", value_ref, value); \
+		p_test_failed("(expected=%lld, got=%lld)\n", value_ref, value); \
 		err_count++; \
 	}
 
diff --git a/tests/C/flexpath_tests/include/utils.h b/tests/C/flexpath_tests/include/utils.h
index e5ed7f8..dbd8647 100644
--- a/tests/C/flexpath_tests/include/utils.h
+++ b/tests/C/flexpath_tests/include/utils.h
@@ -17,6 +17,7 @@ extern diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char
 extern diag_t set_value(double *p_arr, int arr_len, double value);
 extern diag_t get_data_size(int *shape, int shape_elem_count, int* data_size);
 extern diag_t get_maya_var_name(char *prefix, int number);
+extern diag_t gen_maya_var_name(char *buf, int buf_size, char *maya_var_pfx, int number);
 
 
 
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/tests/C/flexpath_tests/maya_append/Makefile.in
index d7f7c98..f614d4c 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/tests/C/flexpath_tests/maya_append/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/flexpath_tests/maya_append/reader.c b/tests/C/flexpath_tests/maya_append/reader.c
index 2edd7be..0c96e3d 100644
--- a/tests/C/flexpath_tests/maya_append/reader.c
+++ b/tests/C/flexpath_tests/maya_append/reader.c
@@ -11,6 +11,7 @@
 #include "adios_read.h"
 
 #include "misc.h"
+#include "utils.h"
 #include "test_common.h"
 #include "cfg.h"
 
@@ -24,6 +25,7 @@
  * @param out_buf  The output buffer
  */
 #define READ_FULLPATH(attribute, grid_func_name, out_buf) \
+	char fullpath[STR_BUFFER_SIZE]; \
 	sprintf(fullpath, "%s%s", attribute, grid_func_name);  \
 	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, sel, fullpath,0,10, out_buf), error_counts.adios);
 
@@ -32,7 +34,7 @@
 #define STR_BUFFER_SIZE 100
 
 int main (int argc, char **argv){
-	int rank =0, size =0;
+	int rank =0;
 	MPI_Comm comm = MPI_COMM_WORLD;
 	struct err_counts err = {0, 0};
 	struct test_info test_result = {TEST_PASSED, "maya_append"};
@@ -68,8 +70,6 @@ int main (int argc, char **argv){
 	memset(cctk_bbox, 0, sizeof(int) * TIMESTEP_COUNT*6);
 	memset(data, 0, sizeof(double) * 11* 12*13 * TIMESTEP_COUNT);
 
-	char fullpath[STR_BUFFER_SIZE];
-
 	// selection should be NULL or as a single variable
 	// just say that you want to take different steps
 	adios_schedule_read(adios_handle, NULL, "/level/maya_gf_var",0,10, level);
diff --git a/tests/C/flexpath_tests/maya_append/writer.c b/tests/C/flexpath_tests/maya_append/writer.c
index 4608ff5..cf1c5d2 100644
--- a/tests/C/flexpath_tests/maya_append/writer.c
+++ b/tests/C/flexpath_tests/maya_append/writer.c
@@ -113,7 +113,7 @@ int main(int argc, char ** argv){
 
     	uint64_t adios_totalsize = 0;
     	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+    	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%lld, adios_totalsize=%lld, retval=%d\n",
     				rank, adios_groupsize, adios_totalsize, retval);
     	WRITE_VAR("/level/", MAYA_GF_VAR_PFX, &level[i]);
     	WRITE_VAR("/scalar/", MAYA_GF_VAR_PFX, &level[i]);
diff --git a/tests/C/flexpath_tests/maya_noxml/Makefile.in b/tests/C/flexpath_tests/maya_noxml/Makefile.in
index 34b622b..0ca4cab 100644
--- a/tests/C/flexpath_tests/maya_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -191,9 +194,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -260,6 +269,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/flexpath_tests/maya_noxml/reader.c b/tests/C/flexpath_tests/maya_noxml/reader.c
index 3110e1d..2464a58 100644
--- a/tests/C/flexpath_tests/maya_noxml/reader.c
+++ b/tests/C/flexpath_tests/maya_noxml/reader.c
@@ -68,7 +68,7 @@
 
 
 int main (int argc, char **argv){
-	int rank =0, size =0;
+	int rank =0;
 	MPI_Comm comm = MPI_COMM_WORLD;
 	diag_t diag = DIAG_OK;  // to store the diagnostic information
 	struct test_info test_result = { TEST_PASSED, "maya_noxml" };
@@ -119,7 +119,7 @@ int main (int argc, char **argv){
 	char fullname[MAYA_VAR_BUF_SIZE];
 	int i = 0;
 	// for storing shape_dim_x, shape_dim_y, shape_dim_z
-	uint32_t shape_max_dims[3];
+	int shape_max_dims[3];
 
 	// space for the data (size will depend on the shape_dim_x, etc)
 	double *data = NULL;
diff --git a/tests/C/flexpath_tests/maya_noxml/writer.c b/tests/C/flexpath_tests/maya_noxml/writer.c
index ba92116..10104cb 100644
--- a/tests/C/flexpath_tests/maya_noxml/writer.c
+++ b/tests/C/flexpath_tests/maya_noxml/writer.c
@@ -169,10 +169,10 @@ int main(int argc, char ** argv){
 	uint64_t adios_totalsize = 0;
 
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%lld, adios_totalsize=%lld, retval=%d\n",
 				rank, adios_groupsize, adios_totalsize, retval);
 
-	printf("Writing checkpoint to file %s using the %s method: group size is %lu, total size is %lu. ", FILE_NAME, adios_opts.transport, adios_groupsize, adios_totalsize);
+	printf("Writing checkpoint to file %s using the %s method: group size is %llu, total size is %llu. ", FILE_NAME, adios_opts.transport, adios_groupsize, adios_totalsize);
 
 
     // arbitrary, but this is what I am getting from Maya
diff --git a/tests/C/flexpath_tests/scalar/Makefile.in b/tests/C/flexpath_tests/scalar/Makefile.in
index 9169724..fc9a457 100644
--- a/tests/C/flexpath_tests/scalar/Makefile.in
+++ b/tests/C/flexpath_tests/scalar/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/C/flexpath_tests/scalar/reader.c b/tests/C/flexpath_tests/scalar/reader.c
index a612a15..fad707e 100644
--- a/tests/C/flexpath_tests/scalar/reader.c
+++ b/tests/C/flexpath_tests/scalar/reader.c
@@ -119,7 +119,6 @@ int main (int argc, char **argv){
 		}
 	//}
 
-just_clean:
 		// clean everything
 		adios_selection_delete(sel);
 		sel = NULL;
diff --git a/tests/C/flexpath_tests/scalar/writer.c b/tests/C/flexpath_tests/scalar/writer.c
index fcf387c..e93b3fe 100644
--- a/tests/C/flexpath_tests/scalar/writer.c
+++ b/tests/C/flexpath_tests/scalar/writer.c
@@ -53,7 +53,7 @@ int main(int argc, char ** argv){
 	adios_open( &adios_handle, "scalar", FILE_NAME, "w", comm);
 	adios_groupsize = 4 + 4 + 4;
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%lld, adios_totalsize=%lld, retval=%d\n",
 			rank, adios_groupsize, adios_totalsize, retval);
 
 	// write; don't check errors for simplicity reasons
diff --git a/tests/Fortran/Makefile.in b/tests/Fortran/Makefile.in
index b056e1e..6289202 100644
--- a/tests/Fortran/Makefile.in
+++ b/tests/Fortran/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -179,9 +182,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -248,6 +257,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 25d0793..8da3f06 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/bp_read/Makefile.am b/tests/bp_read/Makefile.am
index 3d2a49e..ac84a17 100644
--- a/tests/bp_read/Makefile.am
+++ b/tests/bp_read/Makefile.am
@@ -53,3 +53,5 @@ else
 CLEANFILES = *.o 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 17741db..aabc5fa 100644
--- a/tests/bp_read/Makefile.in
+++ b/tests/bp_read/Makefile.in
@@ -53,7 +53,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -64,6 +66,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -221,9 +224,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -290,6 +299,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -407,6 +420,7 @@ FCLINK = \
 
 @BUILD_FORTRAN_FALSE at CLEANFILES = *.o bp_read_c genbp read_coords read_phi read_parts_global
 @BUILD_FORTRAN_TRUE at CLEANFILES = *.o bp_read_c bp_read_f genbp read_coords read_phi read_parts_global
+EXTRA_DIST = testbp_c.xml
 all: all-am
 
 .SUFFIXES:
diff --git a/tests/bp_read/bp_read_c.c b/tests/bp_read/bp_read_c.c
index f35b0a9..5ef9867 100644
--- a/tests/bp_read/bp_read_c.c
+++ b/tests/bp_read/bp_read_c.c
@@ -22,18 +22,11 @@
 int main (int argc, char ** argv)
 {
     char * filename;
-    int    rank, pe_size, rc, version;    
-    struct bp_index_pg_struct_v1 * pg_root = 0;
-    struct bp_index_pg_struct_v1 * pg = 0;
+    int    rank, pe_size; 
 
-    struct  adios_index_var_struct_v1 * vars_root = 0;
-    struct  adios_index_attribute_struct_v1 * attrs_root = 0;
-    int     ngroup, nvar, nattr, ntstep;
+    int     nvar;
     int     i,j,k;    
 
-    int     NX = 10, G_NX=30;
-    int     NY = 10, G_NY=30;
-    int     NZ = 10, G_NZ=30;
     void    * var = NULL;
     MPI_Comm comm; 
 
@@ -83,7 +76,6 @@ int main (int argc, char ** argv)
     */
     uint64_t start[3], size[3];
     const char *type_str;
-    double time;
 
     /* variable int_1D */
     vi = adios_inq_var (gp, "int_1D");
@@ -130,7 +122,7 @@ int main (int argc, char ** argv)
     // vnamelist[14] is not written at time step 0
     // so the function returns as error
     adios_read_var (gp, "int_2D", start, size, var);
-    printf("\tslice (%d:%d, %d:%d) = ", 
+    printf("\tslice (%lld:%lld, %lld:%lld) = ", 
            start[0], start[0]+size[0]-1,
            start[1], start[1]+size[1]-1);
     k=0;
@@ -169,7 +161,7 @@ int main (int argc, char ** argv)
     size[2]=3;
     var = malloc ( sizeof(int) * size[0]*size[1]*size[2]);
     adios_read_var (gp, "int_3D", start, size, var);
-    printf("\t[%d:%d, %d:%d, %d:%d]", 
+    printf("\t[%lld:%lld, %lld:%lld, %lld:%lld]", 
            start[0], start[0]+size[0]-1,
            start[1], start[1]+size[1]-1,
            start[2], start[2]+size[2]-1
diff --git a/tests/bp_read/genbp.c b/tests/bp_read/genbp.c
index 4cc0dcf..c348be3 100644
--- a/tests/bp_read/genbp.c
+++ b/tests/bp_read/genbp.c
@@ -43,7 +43,7 @@ int main (int argc, char ** argv)
 
     uint64_t total;
 
-    int vi, vj, vk, vt, vl;
+    int vi, vj, vk, vl;
     for (i = 0; i < dim1; i++) {
         int_1D[i] = i;
         vi = i*dim2;
diff --git a/tests/bp_read/testbp_c.xml b/tests/bp_read/testbp_c.xml
new file mode 100644
index 0000000..0e4576e
--- /dev/null
+++ b/tests/bp_read/testbp_c.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="testbp" coordination-communicator="comm">
+    <var name="time_start"  type="integer"/>
+    <var name="dim1"  type="integer"/>
+    <var name="dim2"  type="integer"/>
+    <var name="dim3"  type="integer"/>
+    <var name="dim4"  type="integer"/>
+    <var name="dim5"  type="integer"/>
+    <var name="int_1D"  type="integer" dimensions="dim1"/>
+    <var name="int_2D"  type="integer" dimensions="dim1,dim2"/>
+    <var name="int_3D"  type="integer" dimensions="dim1,dim2,dim3"/>
+    <var name="int_4D"  type="integer" dimensions="dim1,dim2,dim3,dim4"/>
+    <var name="int_5D"  type="integer" dimensions="dim1,dim2,dim3,dim4,dim5"/>
+  </adios-group>
+
+  <method group="testbp" method="POSIX"/>
+
+  <buffer size-MB="1" allocate-time="now"/>
+
+</adios-config>
diff --git a/tests/genarray/CMakeLists.txt b/tests/genarray/CMakeLists.txt
index 622b646..e822620 100644
--- a/tests/genarray/CMakeLists.txt
+++ b/tests/genarray/CMakeLists.txt
@@ -34,4 +34,4 @@ add_custom_command(
 	DEPENDS genarray3d.xml
 	)
 
-file(COPY genarray.xml genarray3d.xml job.ewok job2D.ewok job.xt5 DESTINATION ${PROJECT_BINARY_DIR}/tests/genarray) 
+file(COPY genarray.xml genarray3d.xml job.ewok job2D.ewok DESTINATION ${PROJECT_BINARY_DIR}/tests/genarray) 
diff --git a/tests/genarray/Makefile.in b/tests/genarray/Makefile.in
index 3f4dd0c..743f649 100644
--- a/tests/genarray/Makefile.in
+++ b/tests/genarray/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -203,9 +206,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -272,6 +281,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/suite/Makefile.in b/tests/suite/Makefile.in
index 41cfaf0..7065d67 100644
--- a/tests/suite/Makefile.in
+++ b/tests/suite/Makefile.in
@@ -47,7 +47,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -58,6 +60,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -197,9 +200,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -266,6 +275,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/tests/suite/programs/Makefile.am b/tests/suite/programs/Makefile.am
index 1899bd5..7dcc3e4 100644
--- a/tests/suite/programs/Makefile.am
+++ b/tests/suite/programs/Makefile.am
@@ -23,9 +23,15 @@ check_C=local_array_time \
         path_test \
         reuse_dim \
         adios_transforms_read_write \
-        connect_to_space_subset
+        connect_to_space_subset \
+	big_file \
+	set_path \
+	set_path_var \
+	steps_write \
+	steps_read_file \
+	steps_read_stream
 
-test_C=hashtest copy_subvolume transforms_specparse
+test_C=hashtest copy_subvolume transforms_specparse group_free_test
 
 endif
 
@@ -144,6 +150,26 @@ connect_to_space_subset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 connect_to_space_subset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 connect_to_space_subset.o: connect_to_space_subset.c
 
+big_file_SOURCES=big_file.c
+big_file_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+big_file_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+big_file.o: big_file.c
+
+steps_write_SOURCES=steps_write.c
+steps_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+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_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_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+steps_read_stream.o: steps_read_stream.c
+
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
 #transforms_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -168,6 +194,12 @@ hashtest_LDFLAGS = $(AM_LDFLAGS)
 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.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 \
diff --git a/tests/suite/programs/Makefile.in b/tests/suite/programs/Makefile.in
index e8aa0e5..156017f 100644
--- a/tests/suite/programs/Makefile.in
+++ b/tests/suite/programs/Makefile.in
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -85,13 +88,18 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_WRITE_TRUE@	selections$(EXEEXT) path_test$(EXEEXT) \
 @BUILD_WRITE_TRUE@	reuse_dim$(EXEEXT) \
 @BUILD_WRITE_TRUE@	adios_transforms_read_write$(EXEEXT) \
- at BUILD_WRITE_TRUE@	connect_to_space_subset$(EXEEXT)
+ at BUILD_WRITE_TRUE@	connect_to_space_subset$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	big_file$(EXEEXT) set_path$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	set_path_var$(EXEEXT) steps_write$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	steps_read_file$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	steps_read_stream$(EXEEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__EXEEXT_2 =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	posix_method$(EXEEXT)
 am__EXEEXT_3 =
 @BUILD_WRITE_TRUE at am__EXEEXT_4 = hashtest$(EXEEXT) \
 @BUILD_WRITE_TRUE@	copy_subvolume$(EXEEXT) \
- at BUILD_WRITE_TRUE@	transforms_specparse$(EXEEXT)
+ at BUILD_WRITE_TRUE@	transforms_specparse$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	group_free_test$(EXEEXT)
 am_adios_amr_write_OBJECTS = adios_amr_write.$(OBJEXT)
 adios_amr_write_OBJECTS = $(am_adios_amr_write_OBJECTS)
 am__DEPENDENCIES_1 =
@@ -141,6 +149,13 @@ adios_transforms_read_write_LINK = $(LIBTOOL) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(AM_CFLAGS) $(CFLAGS) $(adios_transforms_read_write_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_big_file_OBJECTS = big_file.$(OBJEXT)
+big_file_OBJECTS = $(am_big_file_OBJECTS)
+big_file_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+big_file_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(big_file_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_connect_to_space_subset_OBJECTS =  \
 	connect_to_space_subset.$(OBJEXT)
 connect_to_space_subset_OBJECTS =  \
@@ -157,6 +172,14 @@ copy_subvolume_DEPENDENCIES =  \
 copy_subvolume_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(copy_subvolume_LDFLAGS) $(LDFLAGS) -o $@
+am_group_free_test_OBJECTS =  \
+	group_free_test-group_free_test.$(OBJEXT)
+group_free_test_OBJECTS = $(am_group_free_test_OBJECTS)
+group_free_test_DEPENDENCIES = $(top_builddir)/src/libadios_nompi.a \
+	$(am__DEPENDENCIES_1)
+group_free_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(group_free_test_LDFLAGS) $(LDFLAGS) -o $@
 am_hashtest_OBJECTS = hashtest-hashtest.$(OBJEXT)
 hashtest_OBJECTS = $(am_hashtest_OBJECTS)
 hashtest_DEPENDENCIES = $(top_builddir)/src/libadios_a-qhashtbl.o
@@ -205,6 +228,41 @@ selections_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 selections_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(selections_LDFLAGS) $(LDFLAGS) -o $@
+am_set_path_OBJECTS = set_path.$(OBJEXT)
+set_path_OBJECTS = $(am_set_path_OBJECTS)
+set_path_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+set_path_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(set_path_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_set_path_var_OBJECTS = set_path_var.$(OBJEXT)
+set_path_var_OBJECTS = $(am_set_path_var_OBJECTS)
+set_path_var_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+set_path_var_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(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 \
+	$(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 \
+	$(am__DEPENDENCIES_1)
+steps_read_stream_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(steps_read_stream_LDFLAGS) $(LDFLAGS) -o $@
+am_steps_write_OBJECTS = steps_write.$(OBJEXT)
+steps_write_OBJECTS = $(am_steps_write_OBJECTS)
+steps_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+steps_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(steps_write_LDFLAGS) $(LDFLAGS) -o $@
 am_transforms_specparse_OBJECTS =  \
 	transforms_specparse-transforms_specparse.$(OBJEXT)
 transforms_specparse_OBJECTS = $(am_transforms_specparse_OBJECTS)
@@ -257,26 +315,30 @@ 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) \
+	$(adios_transforms_read_write_SOURCES) $(big_file_SOURCES) \
 	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
-	$(hashtest_SOURCES) $(local_array_time_SOURCES) \
-	$(many_vars_SOURCES) $(path_test_SOURCES) \
-	$(posix_method_SOURCES) $(reuse_dim_SOURCES) \
-	$(selections_SOURCES) $(transforms_specparse_SOURCES) \
-	$(two_groups_SOURCES) $(write_alternate_SOURCES) \
-	$(write_read_SOURCES)
+	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
+	$(local_array_time_SOURCES) $(many_vars_SOURCES) \
+	$(path_test_SOURCES) $(posix_method_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) \
+	$(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) \
+	$(adios_transforms_read_write_SOURCES) $(big_file_SOURCES) \
 	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
-	$(hashtest_SOURCES) $(local_array_time_SOURCES) \
-	$(many_vars_SOURCES) $(path_test_SOURCES) \
-	$(posix_method_SOURCES) $(reuse_dim_SOURCES) \
-	$(selections_SOURCES) $(transforms_specparse_SOURCES) \
-	$(two_groups_SOURCES) $(write_alternate_SOURCES) \
-	$(write_read_SOURCES)
+	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
+	$(local_array_time_SOURCES) $(many_vars_SOURCES) \
+	$(path_test_SOURCES) $(posix_method_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) \
+	$(write_alternate_SOURCES) $(write_read_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -365,9 +427,15 @@ FC = $(MPIFC)
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -434,6 +502,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -545,9 +617,15 @@ check_readonly_C =
 @BUILD_WRITE_TRUE@        path_test \
 @BUILD_WRITE_TRUE@        reuse_dim \
 @BUILD_WRITE_TRUE@        adios_transforms_read_write \
- at BUILD_WRITE_TRUE@        connect_to_space_subset
-
- at BUILD_WRITE_TRUE@test_C = hashtest copy_subvolume transforms_specparse
+ at BUILD_WRITE_TRUE@        connect_to_space_subset \
+ at BUILD_WRITE_TRUE@	big_file \
+ at BUILD_WRITE_TRUE@	set_path \
+ at BUILD_WRITE_TRUE@	set_path_var \
+ at BUILD_WRITE_TRUE@	steps_write \
+ at BUILD_WRITE_TRUE@	steps_read_file \
+ at BUILD_WRITE_TRUE@	steps_read_stream
+
+ at BUILD_WRITE_TRUE@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 \
@@ -612,6 +690,18 @@ reuse_dim_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 connect_to_space_subset_SOURCES = connect_to_space_subset.c
 connect_to_space_subset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 connect_to_space_subset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+big_file_SOURCES = big_file.c
+big_file_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+big_file_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+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_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_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
@@ -632,6 +722,10 @@ 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
 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 \
@@ -703,12 +797,18 @@ adios_staged_read_v2$(EXEEXT): $(adios_staged_read_v2_OBJECTS) $(adios_staged_re
 adios_transforms_read_write$(EXEEXT): $(adios_transforms_read_write_OBJECTS) $(adios_transforms_read_write_DEPENDENCIES) 
 	@rm -f adios_transforms_read_write$(EXEEXT)
 	$(adios_transforms_read_write_LINK) $(adios_transforms_read_write_OBJECTS) $(adios_transforms_read_write_LDADD) $(LIBS)
+big_file$(EXEEXT): $(big_file_OBJECTS) $(big_file_DEPENDENCIES) 
+	@rm -f big_file$(EXEEXT)
+	$(big_file_LINK) $(big_file_OBJECTS) $(big_file_LDADD) $(LIBS)
 connect_to_space_subset$(EXEEXT): $(connect_to_space_subset_OBJECTS) $(connect_to_space_subset_DEPENDENCIES) 
 	@rm -f connect_to_space_subset$(EXEEXT)
 	$(connect_to_space_subset_LINK) $(connect_to_space_subset_OBJECTS) $(connect_to_space_subset_LDADD) $(LIBS)
 copy_subvolume$(EXEEXT): $(copy_subvolume_OBJECTS) $(copy_subvolume_DEPENDENCIES) 
 	@rm -f copy_subvolume$(EXEEXT)
 	$(copy_subvolume_LINK) $(copy_subvolume_OBJECTS) $(copy_subvolume_LDADD) $(LIBS)
+group_free_test$(EXEEXT): $(group_free_test_OBJECTS) $(group_free_test_DEPENDENCIES) 
+	@rm -f group_free_test$(EXEEXT)
+	$(group_free_test_LINK) $(group_free_test_OBJECTS) $(group_free_test_LDADD) $(LIBS)
 hashtest$(EXEEXT): $(hashtest_OBJECTS) $(hashtest_DEPENDENCIES) 
 	@rm -f hashtest$(EXEEXT)
 	$(hashtest_LINK) $(hashtest_OBJECTS) $(hashtest_LDADD) $(LIBS)
@@ -730,6 +830,21 @@ reuse_dim$(EXEEXT): $(reuse_dim_OBJECTS) $(reuse_dim_DEPENDENCIES)
 selections$(EXEEXT): $(selections_OBJECTS) $(selections_DEPENDENCIES) 
 	@rm -f selections$(EXEEXT)
 	$(selections_LINK) $(selections_OBJECTS) $(selections_LDADD) $(LIBS)
+set_path$(EXEEXT): $(set_path_OBJECTS) $(set_path_DEPENDENCIES) 
+	@rm -f set_path$(EXEEXT)
+	$(set_path_LINK) $(set_path_OBJECTS) $(set_path_LDADD) $(LIBS)
+set_path_var$(EXEEXT): $(set_path_var_OBJECTS) $(set_path_var_DEPENDENCIES) 
+	@rm -f set_path_var$(EXEEXT)
+	$(set_path_var_LINK) $(set_path_var_OBJECTS) $(set_path_var_LDADD) $(LIBS)
+steps_read_file$(EXEEXT): $(steps_read_file_OBJECTS) $(steps_read_file_DEPENDENCIES) 
+	@rm -f steps_read_file$(EXEEXT)
+	$(steps_read_file_LINK) $(steps_read_file_OBJECTS) $(steps_read_file_LDADD) $(LIBS)
+steps_read_stream$(EXEEXT): $(steps_read_stream_OBJECTS) $(steps_read_stream_DEPENDENCIES) 
+	@rm -f steps_read_stream$(EXEEXT)
+	$(steps_read_stream_LINK) $(steps_read_stream_OBJECTS) $(steps_read_stream_LDADD) $(LIBS)
+steps_write$(EXEEXT): $(steps_write_OBJECTS) $(steps_write_DEPENDENCIES) 
+	@rm -f steps_write$(EXEEXT)
+	$(steps_write_LINK) $(steps_write_OBJECTS) $(steps_write_LDADD) $(LIBS)
 transforms_specparse$(EXEEXT): $(transforms_specparse_OBJECTS) $(transforms_specparse_DEPENDENCIES) 
 	@rm -f transforms_specparse$(EXEEXT)
 	$(transforms_specparse_LINK) $(transforms_specparse_OBJECTS) $(transforms_specparse_LDADD) $(LIBS)
@@ -755,14 +870,21 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read_2vars.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read_v2.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_transforms_read_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/big_file.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@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/group_free_test-group_free_test.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hashtest-hashtest.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/local_array_time.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/many_vars.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/path_test.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reuse_dim.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/selections.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/set_path.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/set_path_var.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_read_file.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_read_stream.Po at am__quote@
+ at 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@
 @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@
@@ -812,6 +934,20 @@ copy_subvolume-copy_subvolume.obj: copy_subvolume.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(copy_subvolume_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o copy_subvolume-copy_subvolume.obj `if test -f 'copy_subvolume.c'; then $(CYGPATH_W) 'copy_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/copy_subvolume.c'; fi`
 
+group_free_test-group_free_test.o: group_free_test.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(group_free_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT group_free_test-group_free_test.o -MD -MP -MF $(DEPDIR)/group_free_test-group_free_test.Tpo -c -o group_free_test-group_free_test.o `test -f 'group_free_test.c' || echo '$(srcdir)/'`group_free_test.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/group_free_test-group_free_test.Tpo $(DEPDIR)/group_free_test-group_free_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='group_free_test.c' object='group_free_test-group_free_test.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(group_free_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o group_free_test-group_free_test.o `test -f 'group_free_test.c' || echo '$(srcdir)/'`group_free_test.c
+
+group_free_test-group_free_test.obj: group_free_test.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(group_free_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT group_free_test-group_free_test.obj -MD -MP -MF $(DEPDIR)/group_free_test-group_free_test.Tpo -c -o group_free_test-group_free_test.obj `if test -f 'group_free_test.c'; then $(CYGPATH_W) 'group_free_test.c'; else $(CYGPATH_W) '$(srcdir)/group_free_test.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/group_free_test-group_free_test.Tpo $(DEPDIR)/group_free_test-group_free_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='group_free_test.c' object='group_free_test-group_free_test.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(group_free_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o group_free_test-group_free_test.obj `if test -f 'group_free_test.c'; then $(CYGPATH_W) 'group_free_test.c'; else $(CYGPATH_W) '$(srcdir)/group_free_test.c'; fi`
+
 hashtest-hashtest.o: hashtest.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hashtest-hashtest.o -MD -MP -MF $(DEPDIR)/hashtest-hashtest.Tpo -c -o hashtest-hashtest.o `test -f 'hashtest.c' || echo '$(srcdir)/'`hashtest.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/hashtest-hashtest.Tpo $(DEPDIR)/hashtest-hashtest.Po
@@ -1161,7 +1297,12 @@ selections.o: selections.c
 path_test.o: path_test.c
 reuse_dim.o: reuse_dim.c
 connect_to_space_subset.o: connect_to_space_subset.c
+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
 hashtest.o: hashtest.c
+group_free_test.o: group_free_test.c
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/suite/programs/many_vars.c b/tests/suite/programs/big_file.c
similarity index 57%
copy from tests/suite/programs/many_vars.c
copy to tests/suite/programs/big_file.c
index 9f61c6d..65e4ac3 100644
--- a/tests/suite/programs/many_vars.c
+++ b/tests/suite/programs/big_file.c
@@ -6,11 +6,11 @@
  */
 
 /* ADIOS C test: 
- *  Write a huge number of variables
+ *  Write >2GB data per process
  *  Then read them all and check if they are correct. 
  *
- * How to run: mpirun -np <N> many_vars <nvars> <blocks per process> <steps>
- * Output: many_vars.bp
+ * How to run: mpirun -np <N> big_file <steps>
+ * Output: big_file.bp
  *
  */
 #include <stdio.h>
@@ -29,17 +29,17 @@
 #define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
 #define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
 
-int NVARS = 1;
-int NBLOCKS = 1;
 int NSTEPS = 1;
-static const char FILENAME[] = "many_vars.bp";
-#define VALUE(rank, step, block) (step * 10000 + 10*rank + block)
+static const char FILENAME[] = "big_file.bp";
+#define VALUE(rank, step) (step * 1000 + rank + 1)
 
 /* Variables to write */
 int  *a2;
 
-static const int ldim1 = 5;
-static const int ldim2 = 5;
+/* 2.5GB = 32*20 * 1M * sizeof(int) */
+/* 4.25GB = 32*34 * 1M * sizeof(int) */
+static const int ldim1 = 1024*32;
+static const int ldim2 = 1024*34;
 int gdim1, gdim2;
 int offs1, offs2;
 
@@ -51,58 +51,38 @@ int  *r2;
 MPI_Comm    comm = MPI_COMM_WORLD;
 int rank;
 int size;
-char ** varnames;
 
 void alloc_vars()
 {
-    int n,i;
+    size_t n;
 
-    n = ldim1 * ldim2;
+    n = (size_t)ldim1 * (size_t)ldim2;
+    log ("Allocate 2 arrays of %llu integers...\n",n);
     a2  = (int*) malloc (n * sizeof(int));
     r2  = (int*) malloc (n * sizeof(int));
-    varnames = (char**) malloc (NVARS * sizeof(char*));
-    for (i=0; i<NVARS; i++) {
-        varnames[i] = (char*) malloc (16);
-    }
-
-    /* make varnames like v001,v002,.. */
-    int digit=1, d=10;
-    while (NVARS/d > 0) {
-        d *= 10;
-        digit++;
-    }
-
-    char fmt[16];
-    sprintf (fmt, "v%%%d.%dd",digit,digit);
-    printf ("ftm=[%s]\n", fmt);
-    for (i=0; i<NVARS; i++) {
-        //sprintf(varnames[i], "v%-*d", digit, i);
-        sprintf(varnames[i], fmt, i);
-    }
-    printf ("varname[0]=%s\n", varnames[0]);
-    printf ("varname[%d]=%s\n", NVARS-1, varnames[NVARS-1]);
 }
 
 void set_gdim()
 {
     gdim1 = size*ldim1;
-    gdim2 = NBLOCKS*ldim2;
+    gdim2 = ldim2;
 }
 
-void set_offsets (int block)
+void set_offsets ()
 {
     offs1 = rank*ldim1;
-    offs2 = block*ldim2;
+    offs2 = 0;
 }
 
-void set_vars(int step, int block)
+void set_vars(int step)
 {
-    int n, i;
-    int v = VALUE(rank, step, block);
+    size_t n, i;
+    int v = VALUE(rank, step);
 
-    set_offsets(block);
+    set_offsets();
 
-    n = ldim1 * ldim2;
+    n = (size_t)ldim1 * (size_t)ldim2;
+    log ("  Fill up array of %llu elements to value %d...\n",n,v);
     for (i=0; i<n; i++) a2[i] = v;
 }
 
@@ -111,17 +91,11 @@ void fini_vars()
     int i;
     free (a2);
     free (r2);
-    for (i=0; i<NVARS; i++) {
-        free(varnames[i]);
-    }
-    free(varnames);
 }
 
 void Usage() 
 {
-    printf("Usage: many_vars <nvars> <nblocks> <nsteps>\n" 
-            "    <nvars>:   Number of variables to generate\n"
-            "    <nblocks>: Number of blocks per process to write\n"
+    printf("Usage: big_file <nsteps>\n" 
             "    <nsteps>:  Number of write cycles (to same file)\n");
 }
 
@@ -142,29 +116,17 @@ int main (int argc, char ** argv)
     errno = 0;
     i = strtol (argv[1], NULL, 10);
     if (errno || i < 1) { printf("Invalid 1st argument %s\n", argv[1]); Usage(); return 1;}
-    NVARS = i;
-
-    if (argc > 2) {
-        i = strtol (argv[2], NULL, 10);
-        if (errno || i < 1) { printf("Invalid 2nd argument %s\n", argv[2]); Usage(); return 1;}
-        NBLOCKS = i;
-    }
-
-    if (argc > 3) {
-        i = strtol (argv[3], NULL, 10);
-        if (errno || i < 1) { printf("Invalid 3rd argument %s\n", argv[3]); Usage(); return 1;}
-        NSTEPS = i;
-    }
+    NSTEPS = i;
 
     alloc_vars();
     adios_init_noxml (comm);
-    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 4400);
     err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
     if (err) {
         printE ("%s\n", adios_errmsg());
     }
 
-    adios_declare_group (&m_adios_group, "multiblock", "iter", adios_flag_yes);
+    adios_declare_group (&m_adios_group, "bigdata", "iter", adios_flag_yes);
     adios_select_method (m_adios_group, "MPI", "", "");
 
 
@@ -195,20 +157,17 @@ void define_vars ()
     adios_define_var (m_adios_group, "ldim2", "", adios_integer, 0, 0, 0);
     adios_define_var (m_adios_group, "gdim1", "", adios_integer, 0, 0, 0);
     adios_define_var (m_adios_group, "gdim2", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "offs1", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "offs2", "", adios_integer, 0, 0, 0);
 
-    for (block=0; block<NBLOCKS; block++) {
-        adios_define_var (m_adios_group, "offs1", "", adios_integer, 0, 0, 0);
-        adios_define_var (m_adios_group, "offs2", "", adios_integer, 0, 0, 0);
-
-        for (i=0; i<NVARS; i++) {
-            adios_define_var (m_adios_group, varnames[i], "", adios_integer, 
-                    "iter,ldim1,ldim2",
-                    "gdim1,gdim2",
-                    "offs1,offs2");
-        }
-    }
+    adios_define_var (m_adios_group, "data", "", adios_integer, 
+            "iter,ldim1,ldim2",
+            "gdim1,gdim2",
+            "offs1,offs2");
 }
 
+int NVARS=1; 
+int NBLOCKS=1;
 int write_file (int step) 
 {
     int64_t       fh;
@@ -217,38 +176,34 @@ int write_file (int step)
     double        tb, te;
 
     log ("Write step %d to %s\n", step, FILENAME);
-    tb = MPI_Wtime();
-    adios_open (&fh, "multiblock", FILENAME, (step ? "a" : "w"), comm);
+    adios_open (&fh, "bigdata", FILENAME, (step ? "a" : "w"), comm);
     
     groupsize  = (4 + NBLOCKS*2) * sizeof(int);             // dimensions 
-    groupsize += NVARS * NBLOCKS * ldim1 * ldim2 * sizeof(int);     // 2D  blocks
+    log ("  groupsize calculated = %llu\n", groupsize);
+    groupsize += ldim1 * ldim2 * sizeof(int);     // 2D  blocks
     //groupsize +=1024;
+    log ("  groupsize calculated = %llu\n", groupsize);
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("  groupsize %lld, totalsize %lld\n", groupsize, totalsize);
+    log ("  groupsize %llu, totalsize %llu\n", groupsize, totalsize);
 
+    v = VALUE(rank, step);
+    log ("  Write data to %s\n", FILENAME);
+    set_vars (step);
+
+    tb = MPI_Wtime();
     adios_write (fh, "gdim1", &gdim1);
     adios_write (fh, "gdim2", &gdim2);
     adios_write (fh, "ldim1", &ldim1);
     adios_write (fh, "ldim2", &ldim2);
-
-    for (block=0; block<NBLOCKS; block++) {
-        v = VALUE(rank, step, block);
-        log ("  Write block %d, value %d to %s\n", block, v, FILENAME);
-        set_vars (step, block);
-
-        adios_write (fh, "offs1", &offs1);
-        adios_write (fh, "offs2", &offs2);
-
-        for (i=0; i<NVARS; i++) {
-            adios_write (fh, varnames[i], a2);
-        }
-    }
-
+    adios_write (fh, "offs1", &offs1);
+    adios_write (fh, "offs2", &offs2);
+    adios_write (fh, "data", a2);
     adios_close (fh);
     te = MPI_Wtime();
+
     if (rank==0) {
-        log ("  Write time for step %d was %6.3lf seconds\n", step, te-tb);
+        log ("  Write time for step %d was %6.3lf seconds\n", rank, step, te-tb);
     }
     MPI_Barrier (comm);
     return 0;
@@ -281,21 +236,36 @@ int write_file (int step)
         /*goto endread;*/\
     }
 
-#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,BLOCK,i) \
+#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
     for (i=0;i<N;i++) \
         if (A[i] != VALUE) { \
-            printE ("%s[%d] step %d block %d: wrote %d but read %d\n",VARNAME,i,STEP,BLOCK,VALUE,A[i]);\
+            printE ("%s[%d] step %d: wrote %d but read %d\n",VARNAME,i,STEP,VALUE,A[i]);\
             err = 104; \
             /*goto endread;*/\
             break; \
         }
 
+#define CHECK_2DARRAY(VARNAME,A,DIM1,DIM2,VALUE,STEP,i,j,k) \
+    k=0; \
+    for (i=0;i<DIM1;i++) {\
+        for (j=0;j<DIM2;j++) {\
+            if (A[k] != VALUE) { \
+                printE ("%s[%d,%d] step %d: wrote %d but read %d\n",VARNAME,i,j,STEP,VALUE,A[k]);\
+                err = 104; \
+               /*goto endread;*/\
+               i=DIM1; /*break to end */\
+               break; \
+            }\
+            k++; \
+        }\
+    }
+
 void reset_readvars()
 {
-    int n;
+    size_t n;
     
-    n = ldim1 * ldim2;
-    memset (r2,  -1, n*sizeof(int));
+    n = (size_t)ldim1 * (size_t)ldim2;
+    memset (r2,  0, n*sizeof(int));
 }
 
 int read_file ()
@@ -305,7 +275,7 @@ int read_file ()
     ADIOS_VARINFO * vi;
     int err=0,v,n;
     int block,step,var; // loop variables
-    int iMacro; // loop variable in macros
+    size_t iMacro,jMacro,kMacro; // loop variable in macros
     double        tb, te, tsched;
     double        tsb, ts; // time for just scheduling for one step/block
 
@@ -325,9 +295,7 @@ int read_file ()
 
     log ("  Check variable definitions... %s\n", FILENAME);
     tb = MPI_Wtime();
-    for (var=0; var<NVARS; var++) {
-        CHECK_VARINFO(varnames[var], 2, NSTEPS)
-    }
+    CHECK_VARINFO("data", 2, NSTEPS)
     MPI_Barrier (comm);
     te = MPI_Wtime();
     if (rank==0) {
@@ -338,24 +306,22 @@ int read_file ()
     for (step=0; step<NSTEPS; step++) {
         tb = MPI_Wtime();
         ts = 0;
-        for (block=0; block<NBLOCKS; block++) {
-            v = VALUE(rank,step,block);
-            set_offsets(block);
-            start[0] = offs1;
-            start[1] = offs2;
-            sel2 = adios_selection_boundingbox (2, start, count); 
-            log ("    Step %d block %d: value=%d\n", step, block, v);
-
-            tsb = MPI_Wtime();
-            for (var=0; var<NVARS; var++) {
-                adios_schedule_read (f, sel2, varnames[var], step, 1, r2);
-                //adios_perform_reads (f, 1);
-                //CHECK_ARRAY (varnames[var],  r2,  ldim1*ldim2, v, step, block, iMacro)
-            }
-            ts += MPI_Wtime() - tsb;
-            adios_perform_reads (f, 1);
-            adios_selection_delete (sel2);
-        }
+        v = VALUE(rank,step);
+        log ("    Step %d expected value=%d\n", step, v);
+        set_offsets();
+        start[0] = offs1;
+        start[1] = offs2;
+        log ("    Step %d bounding box start={%llu,%llu}, count={%llu,%llu}\n", 
+             step, start[0], start[1], count[0], count[1]);
+        sel2 = adios_selection_boundingbox (2, start, count); 
+
+        tsb = MPI_Wtime();
+        adios_schedule_read (f, sel2, "data", step, 1, r2);
+        ts += MPI_Wtime() - tsb;
+        adios_perform_reads (f, 1);
+        CHECK_2DARRAY ("data",  r2, count[0], count[1], v, step, iMacro, jMacro, kMacro)
+
+        adios_selection_delete (sel2);
         MPI_Barrier (comm);
         te = MPI_Wtime();
         if (rank==0) {
diff --git a/tests/suite/programs/group_free_test.c b/tests/suite/programs/group_free_test.c
new file mode 100644
index 0000000..da72edd
--- /dev/null
+++ b/tests/suite/programs/group_free_test.c
@@ -0,0 +1,85 @@
+/* 
+ * 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 test: declare multiple groups and free them. 
+ * Test issue that was fixed in 084d601de8fca676361b0ac4b96735e04295fa0f
+ *
+ * How to run: group_free_test
+ * Output: None
+ * ADIOS config file: None
+ *
+ * This is a sequential test.
+*/
+
+/* This example will create 3 adios groups for writing, then frees them.
+*/
+
+#define _NOMPI
+
+#include <stdio.h>
+#include <string.h>
+#include "public/adios.h"
+#include "public/adios_types.h"
+
+const int  NBLOCKS = 3;
+const int  NGROUPS = 3;
+
+int main (int argc, char ** argv) 
+{
+	int         rank, size, i, j;
+	int         NX = 100, gb, offset;  //local/global/offset
+	MPI_Comm    comm = MPI_COMM_WORLD;
+        char g_str[100], o_str[100], l_str[100];
+        char groupname[256];
+
+	MPI_Init (&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+        gb = NBLOCKS * NX * size;
+        sprintf (g_str, "%d", gb);
+        sprintf (l_str, "%d", NX);
+
+
+	adios_init_noxml (comm);
+        adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+
+        int64_t   groupid[NGROUPS];
+        int64_t   var_ids[NGROUPS][NBLOCKS];
+
+        for (j = 0; j < NGROUPS; j++) 
+        {
+            sprintf (groupname, "group%1.1d", j);
+            adios_declare_group (&groupid[j], groupname, "", adios_flag_yes);
+            adios_select_method (groupid[j], "MPI", "", "");
+
+            for (i = 0; i < NBLOCKS; i++) 
+            {
+                offset = rank * NBLOCKS * NX + i * NX;
+                sprintf (o_str, "%d", offset);
+                var_ids[j][i] = adios_define_var (groupid[j], "temperature"
+                        ,"", adios_double
+                        ,l_str, g_str, o_str
+                        );
+                adios_set_transform (var_ids[j][i], "identity");
+            }
+        }
+
+        MPI_Barrier (comm);
+
+        // free groups in an illogical order 1, 0, 2 [3 4 ...]
+        if (NGROUPS > 1) adios_free_group (groupid[1]);
+        adios_free_group (groupid[0]);
+        for (j = 2; j < NGROUPS; j++) 
+        {
+            adios_free_group (groupid[j]);
+        }
+
+	adios_finalize (rank);
+	MPI_Finalize ();
+	return 0;
+}
diff --git a/tests/suite/programs/hashtest.c b/tests/suite/programs/hashtest.c
index 4bdb210..a1d1dee 100644
--- a/tests/suite/programs/hashtest.c
+++ b/tests/suite/programs/hashtest.c
@@ -85,6 +85,23 @@ void alloc_vars()
     printf ("data[%d]=%lf\n", npaths*nvars-1, data[npaths*nvars-1]);
 }
 
+void free_vars()
+{
+    int p,v;
+
+    for (p=0; p<npaths; p++) {
+        free (varpaths[p]);
+    }
+    free (varpaths);
+
+    for (v=0; v<nvars; v++) {
+        free(varnames[v]);
+    }
+    free(varnames);
+
+    free(data);
+}
+
 
 int dotest ()
 {
@@ -105,10 +122,6 @@ int dotest ()
     time (&tput);
     tput = tput - tbegin;
 
-    /* Print hashtable */
-    printf("============== PRINT HASHTABLE ============\n");
-    tbl->debug(tbl,NULL,0);
-
     /* Get each element and check value */
     printf("============== GET DATA FROM HASHTABLE ============\n");
     time (&tbegin);
@@ -133,8 +146,14 @@ int dotest ()
     printf("Timing: put %d elements in %d seconds, got them back in %d seconds\n",
             npaths*nvars, tput, tget);
 
+    /* Print hashtable */
+    printf("============== PRINT HASHTABLE ============\n");
+    tbl->debug(tbl,NULL,0);
+
     /* Free hashtable */
     tbl->free(tbl);
+
+    free_vars();
     return 0;
 }
 
diff --git a/tests/suite/programs/many_vars.c b/tests/suite/programs/many_vars.c
index 9f61c6d..b7ce52b 100644
--- a/tests/suite/programs/many_vars.c
+++ b/tests/suite/programs/many_vars.c
@@ -158,7 +158,7 @@ int main (int argc, char ** argv)
 
     alloc_vars();
     adios_init_noxml (comm);
-    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 100);
     err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
     if (err) {
         printE ("%s\n", adios_errmsg());
@@ -180,6 +180,7 @@ int main (int argc, char ** argv)
     if (!err)
         err = read_file (); 
 
+    adios_free_group (m_adios_group);
     adios_read_finalize_method (ADIOS_READ_METHOD_BP);
     adios_finalize (rank);
     fini_vars();
diff --git a/tests/suite/programs/set_path.c b/tests/suite/programs/set_path.c
new file mode 100644
index 0000000..d7c588b
--- /dev/null
+++ b/tests/suite/programs/set_path.c
@@ -0,0 +1,334 @@
+/* 
+ * 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 variables with different paths
+ *  Then read them all and check if they are correct. 
+ *
+ * How to run: mpirun -np <N> set_path
+ * Output: set_path.bp
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+static const char FILENAME[] = "set_path.bp";
+#define VALUE(rank,varid) (100*varid+rank)
+#define VALUE0(varid) VALUE(0,varid)
+
+/* Variables to write */
+int s0, s1, s2;
+int  *a0, *a1, *a2;
+
+/* Variables to read */
+int rs0, rs1, rs2;
+int  *ra0, *ra1, *ra2;
+
+static const int ldim1 = 7;
+int gdim1;
+int offs1;
+
+MPI_Comm    comm = MPI_COMM_WORLD;
+int rank;
+int size;
+
+void alloc_vars()
+{
+    int n;
+
+    gdim1 = size*ldim1;
+    offs1 = rank*ldim1;
+
+    n = ldim1;
+    a0  = (int*) malloc (n * sizeof(int));
+    a1  = (int*) malloc (n * sizeof(int));
+    a2  = (int*) malloc (n * sizeof(int));
+    ra0  = (int*) malloc (n * sizeof(int));
+    ra1  = (int*) malloc (n * sizeof(int));
+    ra2  = (int*) malloc (n * sizeof(int));
+}
+
+void set_vars(int rank)
+{
+    int n, i;
+    int v0, v1, v2;
+    
+    n = ldim1;
+
+    s0 = VALUE(rank,0);
+    s1 = VALUE(rank,1);
+    s2 = VALUE(rank,2);
+
+    for (i=0; i<n; i++) {
+        a0[i] = s0;
+        a1[i] = s1;
+        a2[i] = s2;
+    }
+}
+
+void fini_vars()
+{
+    free (a0);
+    free (a1);
+    free (a2);
+    free (ra0);
+    free (ra1);
+    free (ra2);
+}
+
+
+int write_file ();
+int read_file ();
+
+int main (int argc, char ** argv) 
+{
+    int err,i ; 
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    alloc_vars();
+    adios_init ("set_path.xml", comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+
+    if (!err) {
+        set_vars (rank);
+        err = write_file (); 
+    }
+
+    if (!err)
+        err = read_file (); 
+
+    adios_finalize (rank);
+    fini_vars();
+    MPI_Finalize ();
+    return err;
+}
+
+char *getpath (int varid) 
+{
+    static char newpath[128];
+    sprintf (newpath, "/data/vars_%d", varid);
+    return newpath;
+}
+
+int write_file () 
+{
+    int64_t       fh;
+    uint64_t      groupsize=0, totalsize;
+    char          *newpath, *oldpath;
+    char          varpath[128];
+
+    log ("Write to %s\n", FILENAME);
+    adios_open (&fh, "abc", FILENAME, "w", comm);
+    
+    groupsize  = 3 * sizeof(int);                           // dimensions 
+    groupsize += 3 * sizeof(int);                           // scalars 
+    groupsize += 3 * ldim1 * sizeof(int);                   // 1D 
+    groupsize += 1000; // add for extra metadata of triplicated variables, which is not expected from the xml itself
+
+    adios_group_size (fh, groupsize, &totalsize);
+    log ("Group size: data only = %lld, with metadata = %lld\n", groupsize, totalsize);
+
+    adios_write (fh, "gdim1", &gdim1);
+    adios_write (fh, "ldim1", &ldim1);
+    adios_write (fh, "offs1", &offs1);
+
+    newpath = getpath(0);
+    log ("  Change path of all variables to %s\n", newpath);
+    adios_set_path (fh, newpath);
+    log ("    Write s0\n", varpath);
+    adios_write (fh, "s0", &s0);
+    log ("    Write a1\n", varpath);
+    adios_write (fh, "a1", a0);
+
+    newpath = getpath(1);
+    log ("  Change path of all variables to %s\n", newpath);
+    adios_set_path (fh, newpath);
+    log ("    Write s0\n", varpath);
+    adios_write (fh, "s0", &s1);
+    log ("    Write a1\n", varpath);
+    adios_write (fh, "a1", a1);
+
+    newpath = getpath(2);
+    log ("  Change path of all variables to %s\n", newpath);
+    adios_set_path (fh, newpath);
+    log ("    Write s0\n", varpath);
+    adios_write (fh, "s0", &s2);
+    log ("    Write a1\n", varpath);
+    adios_write (fh, "a1", a2);
+
+    adios_close (fh);
+    MPI_Barrier (comm);
+    return 0;
+}
+
+
+#define CHECK_VARINFO(VARNAME, NDIM, NSTEPS) \
+    log ("    Check variable %s ...\n", VARNAME) \
+    vi = adios_inq_var (f, VARNAME); \
+    if (vi == NULL) { \
+        printE ("No such variable %s\n", VARNAME); \
+        err = 101; \
+        goto endread; \
+    } \
+    if (vi->ndim != NDIM) { \
+        printE ("Variable %s has %d dimensions, but expected %d\n", VARNAME, vi->ndim, NDIM); \
+        err = 102; \
+        goto endread; \
+    } \
+    if (vi->nsteps != NSTEPS) { \
+        printE ("Variable %s has %d steps, but expected %d\n", VARNAME, vi->nsteps, NSTEPS); \
+        err = 103; \
+        /*goto endread; */\
+    } \
+    adios_free_varinfo (vi);
+
+#define CHECK_SCALAR(VARNAME, VAR, VALUE, STEP) \
+    if (VAR != VALUE) { \
+        printE ("%s step %d: wrote %d but read %d\n",VARNAME,STEP,VALUE,VAR);\
+        err = 104; \
+        /*goto endread;*/\
+    }
+
+#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
+    for (i=0;i<N;i++) \
+        if (A[i] != VALUE) { \
+            printE ("%s [%d] step %d: wrote %d but read %d\n",VARNAME,i,STEP,VALUE,A[i]);\
+            err = 104; \
+            /*goto endread;*/\
+            break; \
+        }
+
+void reset_readvars()
+{
+    int n;
+    
+    rs0  = -1;
+    rs1  = -1;
+    rs2  = -1;
+
+    n = ldim1;
+    memset (ra0,  -1, n*sizeof(int));
+    memset (ra1,  -1, n*sizeof(int));
+    memset (ra2,  -1, n*sizeof(int));
+}
+
+int read_file ()
+{
+    ADIOS_SELECTION *sel0,*sel1;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,v,v0,i,n;
+    int iMacro; // loop variable in macros
+    char *newpath;
+    char varpath[128];
+
+    uint64_t start[1] = {offs1};
+    uint64_t count[1] = {ldim1};
+    uint64_t ndim;
+    
+    reset_readvars();
+
+
+    log ("Read and check data in %s\n", FILENAME);
+    f = adios_read_open_file (FILENAME, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", rank, adios_errmsg());
+        return 1;
+    }
+
+    sel0 = adios_selection_boundingbox (0, start, count); 
+    sel1 = adios_selection_boundingbox (1, start, count); 
+
+
+    log ("  Check variable definitions... %s\n", FILENAME);
+    sprintf (varpath, "%s/s0", getpath(0));
+    CHECK_VARINFO(varpath, 0, 1)
+    sprintf (varpath, "%s/s0", getpath(1));
+    CHECK_VARINFO(varpath, 0, 1)
+    sprintf (varpath, "%s/s0", getpath(2));
+    CHECK_VARINFO(varpath, 0, 1)
+
+    sprintf (varpath, "%s/a1", getpath(0));
+    CHECK_VARINFO(varpath, 1, 1)
+    sprintf (varpath, "%s/a1", getpath(1));
+    CHECK_VARINFO(varpath, 1, 1)
+    sprintf (varpath, "%s/a1", getpath(2));
+    CHECK_VARINFO(varpath, 1, 1)
+
+    log ("  Read variables ...\n");
+
+    sprintf (varpath, "%s/s0", getpath(0));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs0);
+    sprintf (varpath, "%s/s0", getpath(1));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs1);
+    sprintf (varpath, "%s/s0", getpath(2));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs2);
+
+    sprintf (varpath, "%s/a1", getpath(0));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra0);
+    sprintf (varpath, "%s/a1", getpath(1));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra1);
+    sprintf (varpath, "%s/a1", getpath(2));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra2);
+
+    adios_perform_reads (f, 1);
+
+    log ("  Check variable content ...\n");
+
+    v0 = VALUE0(0); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(0));
+    CHECK_SCALAR (varpath,  rs0,  v0, i) 
+    v0 = VALUE0(1); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(1));
+    CHECK_SCALAR (varpath,  rs1,  v0, i) 
+    v0 = VALUE0(2); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(2));
+    CHECK_SCALAR (varpath,  rs2,  v0, i) 
+
+    v = VALUE(rank,0);
+    sprintf (varpath, "%s/a1", getpath(0));
+    CHECK_ARRAY (varpath,  ra0, ldim1, v, 0, iMacro)
+    v = VALUE(rank,1);
+    sprintf (varpath, "%s/a1", getpath(1));
+    CHECK_ARRAY (varpath,  ra1, ldim1, v, 0, iMacro)
+    v = VALUE(rank,2);
+    sprintf (varpath, "%s/a1", getpath(2));
+    CHECK_ARRAY (varpath,  ra2, ldim1, v, 0, iMacro)
+
+endread:
+
+    adios_selection_delete (sel0);
+    adios_selection_delete (sel1);
+
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
+
+
+
+
+
diff --git a/tests/suite/programs/set_path_var.c b/tests/suite/programs/set_path_var.c
new file mode 100644
index 0000000..84456cc
--- /dev/null
+++ b/tests/suite/programs/set_path_var.c
@@ -0,0 +1,353 @@
+/* 
+ * 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 variables with different paths
+ *  Then read them all and check if they are correct. 
+ *
+ * How to run: mpirun -np <N> set_path_var
+ * Output: set_path_var.bp
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+static const char FILENAME[] = "set_path_var.bp";
+#define VALUE(rank,varid) (100*varid+rank)
+#define VALUE0(varid) VALUE(0,varid)
+
+/* Variables to write */
+int s0, s1, s2;
+int  *a0, *a1, *a2;
+
+/* Variables to read */
+int rs0, rs1, rs2;
+int  *ra0, *ra1, *ra2;
+
+static const int ldim1 = 7;
+int gdim1;
+int offs1;
+
+MPI_Comm    comm = MPI_COMM_WORLD;
+int rank;
+int size;
+
+void alloc_vars()
+{
+    int n;
+
+    gdim1 = size*ldim1;
+    offs1 = rank*ldim1;
+
+    n = ldim1;
+    a0  = (int*) malloc (n * sizeof(int));
+    a1  = (int*) malloc (n * sizeof(int));
+    a2  = (int*) malloc (n * sizeof(int));
+    ra0  = (int*) malloc (n * sizeof(int));
+    ra1  = (int*) malloc (n * sizeof(int));
+    ra2  = (int*) malloc (n * sizeof(int));
+}
+
+void set_vars(int rank)
+{
+    int n, i;
+    int v0, v1, v2;
+    
+    n = ldim1;
+
+    s0 = VALUE(rank,0);
+    s1 = VALUE(rank,1);
+    s2 = VALUE(rank,2);
+
+    for (i=0; i<n; i++) {
+        a0[i] = s0;
+        a1[i] = s1;
+        a2[i] = s2;
+    }
+}
+
+void fini_vars()
+{
+    free (a0);
+    free (a1);
+    free (a2);
+    free (ra0);
+    free (ra1);
+    free (ra2);
+}
+
+
+int write_file ();
+int read_file ();
+
+int main (int argc, char ** argv) 
+{
+    int err,i ; 
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    alloc_vars();
+    adios_init ("set_path_var.xml", comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+
+    if (!err) {
+        set_vars (rank);
+        err = write_file (); 
+    }
+
+    if (!err)
+        err = read_file (); 
+
+    adios_finalize (rank);
+    fini_vars();
+    MPI_Finalize ();
+    return err;
+}
+
+char *getpath (int varid) 
+{
+    static char newpath[128];
+    sprintf (newpath, "/data/var_%d", varid);
+    return newpath;
+}
+
+int write_file () 
+{
+    int64_t       fh;
+    uint64_t      groupsize=0, totalsize;
+    char          *newpath, *oldpath;
+    char          varpath[128];
+
+    log ("Write to %s\n", FILENAME);
+    adios_open (&fh, "abc", FILENAME, "w", comm);
+    
+    groupsize  = 3 * sizeof(int);                           // dimensions 
+    groupsize += 3 * sizeof(int);                           // scalars 
+    groupsize += 3 * ldim1 * sizeof(int);                   // 1D 
+    groupsize += 1000; // add for extra metadata of triplicated variables, which is not expected from the xml itself
+
+    adios_group_size (fh, groupsize, &totalsize);
+    log ("Group size: data only = %lld, with metadata = %lld\n", groupsize, totalsize);
+
+    adios_write (fh, "gdim1", &gdim1);
+    adios_write (fh, "ldim1", &ldim1);
+    adios_write (fh, "offs1", &offs1);
+
+    newpath = getpath(0);
+    log ("  Change path of s0 to %s\n", newpath);
+    adios_set_path_var (fh, newpath, "s0");
+    sprintf (varpath, "%s/s0", newpath);
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "s0", &s0);
+
+    newpath = getpath(1);
+    log ("  Change path of s0 to %s\n", newpath);
+    adios_set_path_var (fh, newpath, "s0");
+    sprintf (varpath, "%s/s0", newpath);
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "s0", &s1);
+
+    newpath = getpath(2);
+    log ("  Change path of s0 to %s\n", newpath);
+    adios_set_path_var (fh, newpath, "s0");
+    sprintf (varpath, "%s/s0", newpath);
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "s0", &s2);
+
+    newpath = getpath(3);
+    log ("  Change path of a1 to %s\n", newpath);
+    adios_set_path_var (fh, newpath, "a1");
+    sprintf (varpath, "%s/a1", newpath);
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "a1", a0);
+
+    newpath = getpath(4);
+    log ("  Change path of a1 to %s\n", newpath);
+    adios_set_path_var (fh, newpath, "a1");
+    sprintf (varpath, "%s/a1", newpath);
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "a1", a1);
+
+    newpath = getpath(5);
+    log ("  Change path of a1 to %s\n", newpath);
+    sprintf (varpath, "%s/a1", newpath);
+    adios_set_path_var (fh, newpath, "a1");
+    log ("  Write %s\n", varpath);
+    adios_write (fh, "a1", a2);
+
+    adios_close (fh);
+    MPI_Barrier (comm);
+    return 0;
+}
+
+
+#define CHECK_VARINFO(VARNAME, NDIM, NSTEPS) \
+    log ("    Check variable %s ...\n", VARNAME) \
+    vi = adios_inq_var (f, VARNAME); \
+    if (vi == NULL) { \
+        printE ("No such variable %s\n", VARNAME); \
+        err = 101; \
+        goto endread; \
+    } \
+    if (vi->ndim != NDIM) { \
+        printE ("Variable %s has %d dimensions, but expected %d\n", VARNAME, vi->ndim, NDIM); \
+        err = 102; \
+        goto endread; \
+    } \
+    if (vi->nsteps != NSTEPS) { \
+        printE ("Variable %s has %d steps, but expected %d\n", VARNAME, vi->nsteps, NSTEPS); \
+        err = 103; \
+        /*goto endread; */\
+    } \
+    adios_free_varinfo (vi);
+
+#define CHECK_SCALAR(VARNAME, VAR, VALUE, STEP) \
+    if (VAR != VALUE) { \
+        printE ("%s step %d: wrote %d but read %d\n",VARNAME,STEP,VALUE,VAR);\
+        err = 104; \
+        /*goto endread;*/\
+    }
+
+#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
+    for (i=0;i<N;i++) \
+        if (A[i] != VALUE) { \
+            printE ("%s [%d] step %d: wrote %d but read %d\n",VARNAME,i,STEP,VALUE,A[i]);\
+            err = 104; \
+            /*goto endread;*/\
+            break; \
+        }
+
+void reset_readvars()
+{
+    int n;
+    
+    rs0  = -1;
+    rs1  = -1;
+    rs2  = -1;
+
+    n = ldim1;
+    memset (ra0,  -1, n*sizeof(int));
+    memset (ra1,  -1, n*sizeof(int));
+    memset (ra2,  -1, n*sizeof(int));
+}
+
+int read_file ()
+{
+    ADIOS_SELECTION *sel0,*sel1;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,v,v0,i,n;
+    int iMacro; // loop variable in macros
+    char *newpath;
+    char varpath[128];
+
+    uint64_t start[1] = {offs1};
+    uint64_t count[1] = {ldim1};
+    uint64_t ndim;
+    
+    reset_readvars();
+
+
+    log ("Read and check data in %s\n", FILENAME);
+    f = adios_read_open_file (FILENAME, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", rank, adios_errmsg());
+        return 1;
+    }
+
+    sel0 = adios_selection_boundingbox (0, start, count); 
+    sel1 = adios_selection_boundingbox (1, start, count); 
+
+
+    log ("  Check variable definitions... %s\n", FILENAME);
+    sprintf (varpath, "%s/s0", getpath(0));
+    CHECK_VARINFO(varpath, 0, 1)
+    sprintf (varpath, "%s/s0", getpath(1));
+    CHECK_VARINFO(varpath, 0, 1)
+    sprintf (varpath, "%s/s0", getpath(2));
+    CHECK_VARINFO(varpath, 0, 1)
+
+    sprintf (varpath, "%s/a1", getpath(3));
+    CHECK_VARINFO(varpath, 1, 1)
+    sprintf (varpath, "%s/a1", getpath(4));
+    CHECK_VARINFO(varpath, 1, 1)
+    sprintf (varpath, "%s/a1", getpath(5));
+    CHECK_VARINFO(varpath, 1, 1)
+
+
+    log ("  Read variables ...\n");
+
+    sprintf (varpath, "%s/s0", getpath(0));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs0);
+    sprintf (varpath, "%s/s0", getpath(1));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs1);
+    sprintf (varpath, "%s/s0", getpath(2));
+    adios_schedule_read (f, sel0, varpath,  0, 1, &rs2);
+
+    sprintf (varpath, "%s/a1", getpath(3));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra0);
+    sprintf (varpath, "%s/a1", getpath(4));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra1);
+    sprintf (varpath, "%s/a1", getpath(5));
+    adios_schedule_read (f, sel1, varpath,  0, 1, ra2);
+
+    adios_perform_reads (f, 1);
+
+    log ("  Check variable content ...\n");
+
+    v0 = VALUE0(0); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(0));
+    CHECK_SCALAR (varpath,  rs0,  v0, i) 
+    v0 = VALUE0(1); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(1));
+    CHECK_SCALAR (varpath,  rs1,  v0, i) 
+    v0 = VALUE0(2); // scalar is from writer rank 0, not this rank!
+    sprintf (varpath, "%s/s0", getpath(2));
+    CHECK_SCALAR (varpath,  rs2,  v0, i) 
+
+    v = VALUE(rank,0);
+    sprintf (varpath, "%s/a1", getpath(3));
+    CHECK_ARRAY (varpath,  ra0, ldim1, v, 0, iMacro)
+    v = VALUE(rank,1);
+    sprintf (varpath, "%s/a1", getpath(4));
+    CHECK_ARRAY (varpath,  ra1, ldim1, v, 0, iMacro)
+    v = VALUE(rank,2);
+    sprintf (varpath, "%s/a1", getpath(5));
+    CHECK_ARRAY (varpath,  ra2, ldim1, v, 0, iMacro)
+
+endread:
+
+    adios_selection_delete (sel0);
+    adios_selection_delete (sel1);
+
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
+
+
+
+
+
diff --git a/tests/suite/programs/steps_read_file.c b/tests/suite/programs/steps_read_file.c
new file mode 100644
index 0000000..aaf7d4d
--- /dev/null
+++ b/tests/suite/programs/steps_read_file.c
@@ -0,0 +1,197 @@
+/* Staged write example code.
+   Assumptions:
+     - one output step fits into the memory of the staged writer.
+       Actually, this means, even more memory is needed than the size of output.
+       We need to read each variable while also buffering all of them for output.
+     - output steps contain the same variable set (no changes in variables)
+     - attributes are the same for all steps (will write only once here)
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios_read.h"
+#include "adios_error.h"
+
+// Input arguments
+enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_BP;
+
+static const int max_read_buffer_size  = 1024*1024*1024;
+static const int max_write_buffer_size = 1024*1024*1024;
+
+static int timeout_sec = 30; // will stop if no data found for this time (-1: never stop)
+
+
+// Global variables
+int         rank, numproc;
+MPI_Comm    comm; 
+ADIOS_FILE *f;      // stream for reading
+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       *readbuf; // read buffer
+int         decomp_values[10];
+
+
+int process_metadata();
+int read_records();
+
+int main (int argc, char ** argv) 
+{
+    int         err;
+    int         steps = 0, curr_step;
+    int         retval = 0;
+
+    MPI_Init (&argc, &argv);
+    comm = MPI_COMM_WORLD;
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &numproc);
+
+    char infilename[] = "steps.bp";
+
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, 
+                                 "max_chunk_size=100; "
+                                 "app_id =32767; \n"
+                                 "verbose= 3;"
+                                 "poll_interval  =  100;"
+                                );
+
+    if (!err) {
+        printf ("%s\n", adios_errmsg());
+    }
+
+
+    printf ("Waiting to open stream %s...\n", infilename);
+    f = adios_read_open_file (infilename, read_method, comm);
+    if (adios_errno == err_file_not_found) 
+    {
+        printf ("rank %d: Stream not found after waiting %d 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 
+    {
+        // read data here... 
+
+        /*
+        printf ("File info:\n");
+        printf ("  current step:   %d\n", f->current_step);
+        printf ("  last step:      %d\n", f->last_step);
+        printf ("  # of variables: %d:\n", f->nvars);
+        */
+
+        retval = process_metadata();
+
+        retval = read_records();
+
+        adios_read_close (f);
+    } 
+
+    adios_read_finalize_method (read_method);
+    MPI_Finalize ();
+
+    return retval;
+}
+
+
+
+ADIOS_VARINFO * varinfo;
+int NX, Width;
+
+int process_metadata()
+{
+    int retval = 0;
+    int i, j;
+    char gdims[256], ldims[256], offs[256];
+    uint64_t sum_count;
+    ADIOS_VARINFO *v; // shortcut pointer
+
+    /* First step processing */
+
+    printf ("Get info on variable Width\n"); 
+    v = adios_inq_var (f, "Width");
+    if (v == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "Width", adios_errmsg());
+        return 1;
+    }
+    Width = *(int *)v->value;
+    adios_free_varinfo (v);
+    printf ("rank %d: Width = %d\n", rank, Width); 
+
+    printf ("Get info on variable NX\n"); 
+    v = adios_inq_var (f, "NX");
+    if (v == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "NX", adios_errmsg());
+        return 1;
+    }
+    NX = *(int *)v->value;
+    adios_free_varinfo (v);
+    printf ("rank %d: NX = %d\n", rank, NX); 
+
+    printf ("Get info on variable record: %s\n", "record"); 
+    varinfo = adios_inq_var (f, "record"); // need this struct to the end of reading
+    if (varinfo == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "record", adios_errmsg());
+        return 1;
+    }
+    printf ("rank %d: record dims = %llu * %llu \n", rank, varinfo->dims[0], varinfo->dims[1]); 
+    printf ("rank %d: total nblocks = %d in %d steps\n", 
+             rank, varinfo->sum_nblocks, varinfo->nsteps); 
+
+    return retval;
+}
+
+int read_records()
+{
+    int retval = 0;
+    int i,j;
+
+    int N = varinfo->sum_nblocks/numproc;
+    int startidx=N*rank;
+
+    char *text;
+    text = malloc (Width*NX+1);
+    text[Width*NX] = 0;
+    
+    for (i=0; i<N; i++) 
+    {
+        memset (text, '+', Width*NX);
+        // read one block of record
+        //printf ("rank %d: Read block %d\n", rank, startidx+i); 
+        ADIOS_SELECTION *sel = adios_selection_writeblock (startidx+i);
+        adios_schedule_read (f, sel, "record", 0, 1, text);
+        adios_perform_reads (f, 1);   
+        adios_selection_delete (sel);
+
+        printf ("block %2d = ", startidx+i);
+        for (j=0; j<NX; j++)
+            printf ("[%s]", text+j*Width);
+        printf ("\n");
+    }
+
+    adios_free_varinfo (varinfo); // now we don't need this struct
+    return retval;
+}
+
+
+
diff --git a/tests/suite/programs/steps_read_stream.c b/tests/suite/programs/steps_read_stream.c
new file mode 100644
index 0000000..1edbf06
--- /dev/null
+++ b/tests/suite/programs/steps_read_stream.c
@@ -0,0 +1,231 @@
+/* Staged write example code.
+   Assumptions:
+     - one output step fits into the memory of the staged writer.
+       Actually, this means, even more memory is needed than the size of output.
+       We need to read each variable while also buffering all of them for output.
+     - output steps contain the same variable set (no changes in variables)
+     - attributes are the same for all steps (will write only once here)
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios_read.h"
+#include "adios_error.h"
+
+static const int max_read_buffer_size  = 1024*1024*1024;
+static const int max_write_buffer_size = 1024*1024*1024;
+
+static int timeout_sec = 30; // will stop if no data found for this time (-1: never stop)
+enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_BP;
+
+
+// Global variables
+int         rank, numproc;
+MPI_Comm    comm; 
+ADIOS_FILE *f;      // stream for reading
+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       *readbuf; // read buffer
+int         decomp_values[10];
+
+
+int process_metadata();
+int read_records();
+
+
+int main (int argc, char ** argv) 
+{
+    int         err;
+    int         steps = 0, curr_step;
+    int         retval = 0;
+
+    MPI_Init (&argc, &argv);
+    comm = MPI_COMM_WORLD;
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &numproc);
+
+    
+    char infilename[] = "steps.bp";
+
+    err = adios_read_init_method(read_method, comm, 
+                                 "max_chunk_size=100; "
+                                 "app_id =32767; \n"
+                                 "verbose= 3;"
+                                 "poll_interval  =  100;"
+                                );
+
+    if (!err) {
+        printf ("%s\n", adios_errmsg());
+    }
+
+
+    printf ("Waiting to open stream %s...\n", infilename);
+    f = adios_read_open_stream (infilename, read_method, comm,
+            ADIOS_LOCKMODE_ALL, timeout_sec);
+    if (adios_errno == err_file_not_found) 
+    {
+        printf ("rank %d: Stream not found after waiting %d 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 
+    {
+        // read data here... 
+        while(1) {
+            steps++; // start counting from 1
+
+            /*
+            printf ("File info:\n");
+            printf ("  current step:   %d\n", f->current_step);
+            printf ("  last step:      %d\n", f->last_step);
+            printf ("  # of variables: %d:\n", f->nvars);
+            */
+
+            if (steps==1)
+                retval = process_metadata();
+
+            retval = read_records();
+
+            // advance to 1) next available step with 2) blocking wait 
+            curr_step = f->current_step; // save for final bye print
+            adios_advance_step (f, 0, 0.0);
+
+            if (adios_errno == err_end_of_stream)
+            {
+                break; // quit while loop
+            }
+            else 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
+            }
+            else if (f->current_step != curr_step+1)
+            {
+                // we missed some steps
+                printf ("rank %d: WARNING: steps %d..%d were missed when advancing.\n",
+                        rank, curr_step+1, f->current_step-1);
+            }
+
+
+        }
+        adios_read_close (f);
+    } 
+
+    adios_read_finalize_method (read_method);
+    MPI_Finalize ();
+
+    return retval;
+}
+
+
+typedef struct {
+    ADIOS_VARINFO * v;
+    uint64_t        start[10];
+    uint64_t        count[10];
+    uint64_t        writesize; // size of subset this process writes, 0: do not write
+} VarInfo;
+
+VarInfo * varinfo;
+
+int NX, Width, nblocks;
+
+int process_metadata()
+{
+    int retval = 0;
+    int i, j;
+    char gdims[256], ldims[256], offs[256];
+    uint64_t sum_count;
+    ADIOS_VARINFO *v; // shortcut pointer
+
+    /* First step processing */
+
+    printf ("Get info on variable Width\n"); 
+    v = adios_inq_var (f, "Width");
+    if (v == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "Width", adios_errmsg());
+        return 1;
+    }
+    Width = *(int *)v->value;
+    adios_free_varinfo (v);
+    printf ("rank %d: Width = %d\n", rank, Width); 
+
+    printf ("Get info on variable NX\n"); 
+    v = adios_inq_var (f, "NX");
+    if (v == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "NX", adios_errmsg());
+        return 1;
+    }
+    NX = *(int *)v->value;
+    adios_free_varinfo (v);
+    printf ("rank %d: NX = %d\n", rank, NX); 
+
+    printf ("Get info on variable record\n"); 
+    v = adios_inq_var (f, "record");
+    if (v == NULL) {
+        printf ("rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                rank, "record", adios_errmsg());
+        return 1;
+    }
+    nblocks = v->nblocks[0];
+    printf ("rank %d: record dims = %llu * %llu \n", rank, v->dims[0], v->dims[1]); 
+    adios_free_varinfo (v);
+    printf ("rank %d: nblocks = %d\n", rank, nblocks); 
+
+    return retval;
+}
+
+int read_records()
+{
+    int retval = 0;
+    int i,j;
+
+    int N = nblocks/numproc;
+    int startidx=N*rank;
+
+    char *text;
+    text = malloc (Width*NX+1);
+    text[Width*NX] = 0;
+    
+    for (i=0; i<N; i++) 
+    {
+        memset (text, '+', Width*NX);
+        // read one block of records
+        //printf ("rank %d: Read block %d\n", rank, startidx+i); 
+        ADIOS_SELECTION *sel = adios_selection_writeblock (startidx+i);
+        adios_schedule_read (f, sel, "record", 0, 1, text);
+        adios_perform_reads (f, 1);   
+        adios_selection_delete (sel);
+
+        printf ("block %2d = ", startidx+i);
+        for (j=0; j<NX; j++) 
+            printf ("[%s]", text+j*Width);
+        printf ("\n");
+    }
+
+    return retval;
+}
+
+
+
diff --git a/tests/suite/programs/steps_write.c b/tests/suite/programs/steps_write.c
new file mode 100644
index 0000000..f27b2b8
--- /dev/null
+++ b/tests/suite/programs/steps_write.c
@@ -0,0 +1,91 @@
+
+/*  Write a lot of text
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_types.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+int main (int argc, char ** argv) 
+{
+	char        filename [256];
+	int         rank, size, i, j, step, block;
+        int         Offset; 
+
+	int         NX = 2; // number of records written per step per process
+        int         Width=20;
+        int         sub_blocks = 2; // number of record-blocks written per process in one step
+        int         steps = 3;
+
+	char        t[NX][Width];
+	MPI_Comm    comm = MPI_COMM_WORLD;
+
+	/* ADIOS variables declarations for matching gwrite_temperature.ch */
+	int         adios_err;
+	uint64_t    adios_groupsize, adios_totalsize;
+	int64_t     adios_handle;
+
+	MPI_Init (&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+        //Global_bounds = sub_blocks * NX * size;
+
+	strcpy (filename, "steps.bp");
+
+	adios_init_noxml (comm);
+        adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 1);
+
+        int64_t       m_adios_group;
+        int64_t       m_adios_file;
+
+        adios_declare_group (&m_adios_group, "steps", "", 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, "Width" ,"", adios_integer ,0, 0, 0);
+        adios_define_var (m_adios_group, "nproc" ,"", adios_integer ,0, 0, 0);
+   
+        for (i=0;i<sub_blocks;i++) {
+   
+           adios_define_var (m_adios_group, "record" ,"", adios_byte ,"NX,Width", "", "");
+        }
+
+
+        for (step=0; step<steps; step++) {
+
+            adios_open (&m_adios_file, "steps", filename, "a", comm);
+
+            adios_groupsize = sub_blocks * (4 + 4 + 4 + (uint64_t) NX * (uint64_t)Width);
+
+            adios_group_size (m_adios_file, adios_groupsize, &adios_totalsize);
+            adios_write(m_adios_file, "nproc", (void *) &size);
+            adios_write(m_adios_file, "NX", (void *) &NX);
+            adios_write(m_adios_file, "Width", (void *) &Width);
+            /* now we will write the data for each sub block */
+            for (block=0;block<sub_blocks;block++) {
+
+                for (i = 0; i < NX; i++)
+                    //print 19 chars here + '\0'
+                    sprintf (t[i], "r%2d  b%2d  s%2d  i%2d ", rank, block, step, i); 
+
+                adios_write(m_adios_file, "record", t);
+            }
+
+            adios_close (m_adios_file);
+        }
+
+        MPI_Barrier (comm);
+
+	adios_finalize (rank);
+
+	MPI_Finalize ();
+	return 0;
+}
diff --git a/tests/suite/programs/transforms_specparse.c b/tests/suite/programs/transforms_specparse.c
index 2e68cd7..62728d4 100644
--- a/tests/suite/programs/transforms_specparse.c
+++ b/tests/suite/programs/transforms_specparse.c
@@ -10,14 +10,18 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 #include <assert.h>
 #include "core/transforms/adios_transforms_specparse.h"
 
-struct specparse_test {
-    const char *specstr;
-    struct adios_transform_spec expected;
-} TESTS[4];
-#if 0
+#define DISABLE_SPECPARSE_TESTS
+
+#ifdef DISABLE_SPECPARSE_TESTS
+
+int main(int argc, char **argv) { return 0; }
+
+#else
+
 struct specparse_test {
     const char *specstr;
     struct adios_transform_spec expected;
@@ -53,15 +57,6 @@ struct specparse_test {
             .params             = NULL
         }
     },
-// Commented this test out since aliasing "raw" to the "none" transform is currently disabled
-//    {   .specstr = "raw:a=123,b,c=321,,,f=12321",
-//        .expected = {
-//            .transform_type     = adios_transform_none,
-//            .transform_type_str = "raw",
-//            .param_count        = 0,
-//            .params             = NULL
-//        }
-//    },
     {   .specstr = "***impossible-transform-name***:a=123,b,c=321,,,f=12321",
         .expected = {
             .transform_type     = adios_transform_unknown,
@@ -71,11 +66,12 @@ struct specparse_test {
         }
     },
 };
-#endif
+
+
 const int NUM_TESTS = sizeof(TESTS)/sizeof(TESTS[0]);
 
 void run_test(struct specparse_test *test) {
-    const struct adios_transform_spec *actual = adios_transform_parse_spec(test->specstr);
+    const struct adios_transform_spec *actual = adios_transform_parse_spec(test->specstr, NULL);
     const struct adios_transform_spec *expected = &test->expected;
 
     // Check transform type ID
@@ -163,3 +159,5 @@ int main(int argc, char **argv) {
 
     return 0;
 }
+
+#endif /* else of DISABLE_SPECPARSE_TESTS */
diff --git a/tests/suite/reference/arrays_bpls.txt b/tests/suite/reference/arrays_bpls.txt
index f1c5157..60c2d37 100644
--- a/tests/suite/reference/arrays_bpls.txt
+++ b/tests/suite/reference/arrays_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   integer  NX                  scalar = 10 
diff --git a/tests/suite/reference/attributes_bpls.txt b/tests/suite/reference/attributes_bpls.txt
index d34d9d8..6a59906 100644
--- a/tests/suite/reference/attributes_bpls.txt
+++ b/tests/suite/reference/attributes_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 4
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   integer  NX                            scalar = 10 
diff --git a/tests/suite/reference/global_array_no_xml_bpls.txt b/tests/suite/reference/global_array_no_xml_bpls.txt
index 98d0838..8b4669f 100644
--- a/tests/suite/reference/global_array_no_xml_bpls.txt
+++ b/tests/suite/reference/global_array_no_xml_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   integer  NX             scalar = 100 
diff --git a/tests/suite/reference/global_array_no_xml_f_bpls.txt b/tests/suite/reference/global_array_no_xml_f_bpls.txt
index 51c88ed..42ce305 100644
--- a/tests/suite/reference/global_array_no_xml_f_bpls.txt
+++ b/tests/suite/reference/global_array_no_xml_f_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   integer  NX           scalar = 10 
diff --git a/tests/suite/reference/no_xml_write_byid_bpls.txt b/tests/suite/reference/no_xml_write_byid_bpls.txt
index 76aeecf..ea80c26 100644
--- a/tests/suite/reference/no_xml_write_byid_bpls.txt
+++ b/tests/suite/reference/no_xml_write_byid_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   double   temperature  {2100} = 0 / 2099 / 1049.5 / 606.218 
diff --git a/tests/suite/reference/no_xml_write_byid_f_bpls.txt b/tests/suite/reference/no_xml_write_byid_f_bpls.txt
index c51ea04..be11b59 100644
--- a/tests/suite/reference/no_xml_write_byid_f_bpls.txt
+++ b/tests/suite/reference/no_xml_write_byid_f_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   double   temperature  {140} = 0 / 139 / 69.5 / 40.4135 
diff --git a/tests/suite/reference/scalars_write_bpls.txt b/tests/suite/reference/scalars_write_bpls.txt
index 7c61311..3eb07e8 100644
--- a/tests/suite/reference/scalars_write_bpls.txt
+++ b/tests/suite/reference/scalars_write_bpls.txt
@@ -4,7 +4,7 @@ File info:
   of attributes: 0
   of meshes:     0
   time steps:    0 - 0
-  bp version:    1
+  bp version:    2
   statistics:    Min / Max / Avg / Std_dev
 
   byte                var_byte            scalar = -4 
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 2b50ab3..8e68388 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -4,6 +4,7 @@ add_subdirectory(bp2ascii)
 add_subdirectory(bpsplit)
 add_subdirectory(bpls)
 add_subdirectory(bpdiff)
+add_subdirectory(list_methods)
 
 if(BUILD_WRITE)
   add_subdirectory(adios_lint)
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 324078a..139fd59 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -1,6 +1,6 @@
-SUBDIRS= gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump
+SUBDIRS= gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump list_methods
 if BUILD_WRITE
-SUBDIRS += adios_lint bp2bp
+SUBDIRS += adios_lint bp2bp 
 endif
 if HAVE_HDF5
 SUBDIRS += bp2h5
diff --git a/utils/Makefile.in b/utils/Makefile.in
index b0923f5..0de17e1 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -33,7 +33,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
- at BUILD_WRITE_TRUE@am__append_1 = adios_lint bp2bp
+ at BUILD_WRITE_TRUE@am__append_1 = adios_lint bp2bp 
 @HAVE_HDF5_TRUE at am__append_2 = bp2h5
 @HAVE_NETCDF_TRUE at am__append_3 = bp2ncd
 subdir = utils
@@ -50,7 +50,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -61,6 +63,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -91,7 +94,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
-	adios_lint bp2bp bp2h5 bp2ncd skel
+	list_methods adios_lint bp2bp bp2h5 bp2ncd skel
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -201,9 +204,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -270,6 +279,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -357,7 +370,8 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
-	$(am__append_1) $(am__append_2) $(am__append_3) skel
+	list_methods $(am__append_1) $(am__append_2) $(am__append_3) \
+	skel
 all: all-recursive
 
 .SUFFIXES:
diff --git a/utils/adios_lint/Makefile.in b/utils/adios_lint/Makefile.in
index ce1d8c9..e22233d 100644
--- a/utils/adios_lint/Makefile.in
+++ b/utils/adios_lint/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -186,9 +189,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -255,6 +264,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/adios_lint/adios_lint.c b/utils/adios_lint/adios_lint.c
index 3bd3e2d..3c6b17e 100644
--- a/utils/adios_lint/adios_lint.c
+++ b/utils/adios_lint/adios_lint.c
@@ -20,6 +20,7 @@
 #include "adios.h"
 #include "adios_transport_hooks.h"
 #include "adios_internals.h"
+#include "adios_internals_mxml.h"
 
 #define STR_LEN 1000
 
@@ -47,13 +48,14 @@ int main (int argc, char ** argv)
     struct adios_method_list_struct * methods = 0;
     struct adios_group_list_struct * groups = 0;
     char * filename;
+    MPI_Comm comm = 0; //dummy comm
 
     if (argc < 2)
         filename = "config.xml";
     else
         filename = argv [1];
 
-    if (!adios_parse_config (filename))
+    if (!adios_parse_config (filename, comm))
         return 1;
 
     methods = adios_get_methods ();
diff --git a/utils/bp2ascii/Makefile.in b/utils/bp2ascii/Makefile.in
index 4dd471b..841d2cb 100644
--- a/utils/bp2ascii/Makefile.in
+++ b/utils/bp2ascii/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -184,9 +187,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -253,6 +262,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bp2ascii/bp2ascii.c b/utils/bp2ascii/bp2ascii.c
index 859f28a..9bdb7d1 100644
--- a/utils/bp2ascii/bp2ascii.c
+++ b/utils/bp2ascii/bp2ascii.c
@@ -8,7 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
-//#include "adios_types.h"
+#include "adios_internals.h"
 #include "adios_bp_v1.h"
 #include "adios_read.h"
 
@@ -35,12 +35,9 @@ void print_var_header (struct adios_var_header_struct_v1 * var_header);
 int main (int argc, char ** argv)
 {
     char * filename;
-    char * var;
     char newfilename [256];
     int i = 0;
     int rc = 0;
-    uint64_t element_num = 0, element_count;
-    struct adios_bp_element_struct * element = NULL;
     struct dump_struct dump;
 
     if (argv [1][0] && argv [1][0] == '-' && argc > 3)
@@ -94,9 +91,8 @@ int main (int argc, char ** argv)
     adios_parse_version (b, &version);
 
     struct adios_index_process_group_struct_v1 * pg_root = 0;
-    struct adios_index_process_group_struct_v1 * pg = 0;
     struct adios_index_var_struct_v1 * vars_root = 0;
-    struct adios_index_attribute_struct_v1 * attrs_root = 0;
+    //struct adios_index_attribute_struct_v1 * attrs_root = 0;
 
     adios_posix_read_index_offsets (b);
     adios_parse_index_offsets_v1 (b);
@@ -118,7 +114,7 @@ int main (int argc, char ** argv)
     }
 
     uint64_t element_counts = vars_root->characteristics_count;
-    struct adios_process_group_header_struct_v1 pg_header;
+    //struct adios_process_group_header_struct_v1 pg_header;
     struct adios_var_header_struct_v1 var_header;
     struct adios_var_payload_struct_v1 var_payload;
     uint64_t offset, var_len;
@@ -163,7 +159,7 @@ int main (int argc, char ** argv)
         switch (var_header.type) {
             case adios_long_double:
                 for (j=0; j<var_header.payload_size/16;j++) 
-                    fprintf(outf, "%f ", *((long double*)var_payload.payload+j));
+                    fprintf(outf, "%Lf ", *((long double*)var_payload.payload+j));
                     break;
             case adios_double:
                 for (j=0; j<var_header.payload_size/8;j++) 
@@ -206,7 +202,7 @@ int main (int argc, char ** argv)
                     fprintf(outf, "%c ", *((char *)var_payload.payload+j));
                     break;
             case adios_string:
-                    fprintf(outf, "%s ", var_payload.payload);
+                    fprintf(outf, "%s ", (char *)var_payload.payload);
                     break;
             case adios_complex:
                 for (j=0; j<(var_header.payload_size)/8;j++) 
@@ -216,6 +212,8 @@ int main (int argc, char ** argv)
                 for (j=0; j<(var_header.payload_size)/16;j++) 
                     fprintf(outf, "%f + %fi", *((double *)var_payload.payload+2*j),*((double *)var_payload.payload+j*2+1));
                     break;
+            case adios_unknown:
+                    break;
          }        
          fprintf(outf,"\n");
     }
@@ -228,7 +226,6 @@ void print_process_group_header (uint64_t num
                       ,struct adios_process_group_header_struct_v1 * pg_header
                       )
 {
-    int i;
     struct adios_method_info_struct_v1 * m;
 
     printf ("Process Group: %llu\n", num);
@@ -267,7 +264,6 @@ void print_process_group_index (
 }
 void print_var_header (struct adios_var_header_struct_v1 * var_header)
 {
-    int i = 0;
     printf ("\t\tVar Name (ID): %s (%d)\n", var_header->name, var_header->id);
     printf ("\t\tVar Path: %s\n", var_header->path);
     printf ("\t\tDatatype: %s\n", adios_type_to_string_int (var_header->type));
diff --git a/utils/bp2bp/Makefile.in b/utils/bp2bp/Makefile.in
index 9c8b2f1..5703b67 100644
--- a/utils/bp2bp/Makefile.in
+++ b/utils/bp2bp/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -185,9 +188,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -254,6 +263,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bp2bp/bp2bp.c b/utils/bp2bp/bp2bp.c
index 31eb065..78ff4e3 100644
--- a/utils/bp2bp/bp2bp.c
+++ b/utils/bp2bp/bp2bp.c
@@ -76,7 +76,6 @@ int main (int argc, char ** argv) {
     char       gbounds[1007], lbounds[1007], offs[1007],tstring[100];
     //size = number of cores,  gidx = adios group index
     int        rank, size, gidx, i, j, k, ii;
-    enum       ADIOS_DATATYPES attr_type;
     //data = pointer to read-in data
     void       * data = NULL;
     uint64_t   s[] = {0,0,0,0,0,0,0,0,0,0};  //starting offset
@@ -86,7 +85,6 @@ int main (int argc, char ** argv) {
     int64_t    new_adios_group, m_adios_file;
     uint64_t   var_size;  //portion_bound,
     uint64_t   adios_groupsize, adios_totalsize;
-    int        err;
     int        read_buffer;        //possible maximum size you the user would like for each chunk in MB
     int           write_buffer = 1536;  //actual buffer size you use in MB
     int        itime;
@@ -199,7 +197,7 @@ int main (int argc, char ** argv) {
             {   
                 // scalars: every process does them the same.
                 adios_define_var(new_adios_group,var_name,var_path,v->type,0,0,0);
-                err = getTypeInfo( v->type, &element_size);    //element_size is size per element based on its type
+                getTypeInfo( v->type, &element_size);    //element_size is size per element based on its type
                 if (v->type == adios_string) {  //special case when the scalar is string.
                     adios_groupsize += strlen(v->value);
                 } else {
@@ -209,7 +207,7 @@ int main (int argc, char ** argv) {
             else 
             { 
                 // vector variables
-                err = getTypeInfo( v->type, &element_size);
+                getTypeInfo( v->type, &element_size);
                 var_size=1;
                 for (ii=0;ii<v->ndim;ii++) {
                     var_size*=v->dims[ii];
@@ -441,7 +439,7 @@ int main (int argc, char ** argv) {
                         s[j] = 0;
                         c[j] = 1;
                     }
-                    err = getTypeInfo( v->type, &element_size);
+                    getTypeInfo( v->type, &element_size);
 
                     uint64_t total_size = 1;
                     for (ii=0;ii<v->ndim;ii++)
@@ -1097,6 +1095,9 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype)
         case adios_double_complex:
             printf ("(%g,i%g)", ((double *) data)[2*item], ((double *) data)[2*item+1]);
             break;
+
+        case adios_unknown:
+            break;
     } // end switch
     return 0;
 }
diff --git a/utils/bp2h5/Makefile.in b/utils/bp2h5/Makefile.in
index 34c7df2..a7a1782 100644
--- a/utils/bp2h5/Makefile.in
+++ b/utils/bp2h5/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -189,9 +192,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -258,6 +267,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bp2ncd/Makefile.in b/utils/bp2ncd/Makefile.in
index b0aefb5..a1824b4 100644
--- a/utils/bp2ncd/Makefile.in
+++ b/utils/bp2ncd/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -188,9 +191,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -257,6 +266,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bpdiff/Makefile.in b/utils/bpdiff/Makefile.in
index d17d8fd..8023ead 100644
--- a/utils/bpdiff/Makefile.in
+++ b/utils/bpdiff/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -184,9 +187,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -253,6 +262,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bpdiff/bpdiff.c b/utils/bpdiff/bpdiff.c
index f8cfb87..d587547 100644
--- a/utils/bpdiff/bpdiff.c
+++ b/utils/bpdiff/bpdiff.c
@@ -24,6 +24,7 @@
 #include <errno.h>
 #include "mpi.h"
 #include "utils.h"
+#include "decompose.h"
 #include "adios.h"
 #include "adios_read.h"
 #include "adios_error.h"
@@ -47,9 +48,6 @@ char   methodparams[256];  // ADIOS write method
 static const int max_read_buffer_size  = 1024*1024*1024;
 static const int max_write_buffer_size = 1024*1024*1024;
 
-static int timeout_sec = 0; // will stop if no data found for this time (-1: never stop)
-
-
 // Global variables
 int         rank, numproc;
 MPI_Comm    comm; 
@@ -146,7 +144,7 @@ int main (int argc, char ** argv)
 
     if (adios_errno == err_file_not_found) 
     {
-        print ("rank %d: File not found: %s\n", adios_errmsg());
+        print ("rank %d: File not found: %s\n", rank, adios_errmsg());
         retval = adios_errno;
     } 
     else if (f1 == NULL) {
@@ -189,20 +187,18 @@ uint64_t sum_count1, sum_count2;
 
 int process_metadata()
 {
-    int retval = 0;
     int i, j;
-    char gdims[256], ldims[256], offs[256];
     ADIOS_VARINFO *v1, *v2; // shortcut pointer
 
 
     varinfo1 = (VarInfo *) malloc (sizeof(VarInfo) * f1->nvars);
     if (!varinfo1) {
-        print("ERROR: rank %d cannot allocate %lu bytes\n", rank, sizeof(VarInfo)*f1->nvars);
+        print("ERROR: rank %d cannot allocate %zu bytes\n", rank, sizeof(VarInfo)*f1->nvars);
         return 1;
     }
     varinfo2 = (VarInfo *) malloc (sizeof(VarInfo) * f2->nvars);
     if (!varinfo2) {
-        print("ERROR: rank %d cannot allocate %lu bytes\n", rank, sizeof(VarInfo)*f2->nvars);
+        print("ERROR: rank %d cannot allocate %zu bytes\n", rank, sizeof(VarInfo)*f2->nvars);
         return 1;
     }
 
@@ -316,8 +312,8 @@ int diff(){
                 varinfo1[i].count, varinfo1[i].start, &sum_count1);
       decompose (numproc, rank, v2->ndim, v2->dims, decomp_values,
                 varinfo2[cross_ref].count, varinfo2[cross_ref].start, &sum_count2);
-      //for(x=0; x<v1->ndim; x++) print("%d %d %d %d %d %d %d\n",rank, varinfo1[i].count[x], varinfo1[i].start[x], sum_count1,\
-       //                                                              varinfo2[cross_ref].start[x], varinfo2[cross_ref].count[x], sum_count2);
+      /*for(x=0; x<v1->ndim; x++) print("%d %d %d %d %d %d %d\n",rank, varinfo1[i].count[x], varinfo1[i].start[x], sum_count1,\
+                                                                     varinfo2[cross_ref].start[x], varinfo2[cross_ref].count[x], sum_count2); */
 
       //read from files
       uint64_t size = adios_type_size (v1->type, v1->value);
@@ -336,7 +332,7 @@ int diff(){
       adios_perform_reads (f2, 1);   
 
       int sum_count = MIN(sum_count1, sum_count2);
-	    int ret = compare_data(f1->var_namelist[i], readbuf1, readbuf2, sum_count, v1->type);
+      int ret = compare_data(f1->var_namelist[i], readbuf1, readbuf2, sum_count, v1->type);
       int allret;
       MPI_Reduce(&ret, &allret, 1, MPI_INT, MPI_SUM, 0, comm);
       if(allret > 0){
@@ -356,7 +352,7 @@ int diff(){
       adios_selection_delete(sel2);
     }
   }//for
-
+  return 0;
 }
 
 int compare_buffer(char * variable_name, void *data1, void *data2, int total, enum ADIOS_DATATYPES adiosvartype){
@@ -368,132 +364,135 @@ int compare_buffer(char * variable_name, void *data1, void *data2, int total, en
   return total_diff;
 }
 
-int compare_data(char * variable_name, void *data1, void *data2, int item, enum ADIOS_DATATYPES adiosvartype){
+int compare_data(char * variable_name, void *data1, void *data2, int item, enum ADIOS_DATATYPES adiosvartype)
+{
     int ret = 0;
     if (data1 == NULL || data2 == NULL) {
         print("null data");
         return ret;
     }
-    
-    
+
+
     // print next data item into vstr
     switch(adiosvartype) {
         case adios_unsigned_byte:
-	    if(((unsigned char *) data1)[item] !=  ((unsigned char *) data2)[item] )//not identical
-	    {
-		    print("%s : %hhu in %s | %hhu in %s\n", variable_name, ((unsigned char *) data1)[item], infilename1, ((unsigned char *) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((unsigned char *) data1)[item] !=  ((unsigned char *) data2)[item] )//not identical
+            {
+                print("%s : %hhu in %s | %hhu in %s\n", variable_name, ((unsigned char *) data1)[item], infilename1, ((unsigned char *) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_byte:
-	    if(((signed char *) data1)[item] != ((signed char *) data2)[item])//not identical
-	    {
-		print("%s : %hhd in %s | %hhd in %s\n", variable_name, ((signed char *) data1)[item], infilename1, ((signed char *) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((signed char *) data1)[item] != ((signed char *) data2)[item])//not identical
+            {
+                print("%s : %hhd in %s | %hhd in %s\n", variable_name, ((signed char *) data1)[item], infilename1, ((signed char *) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_string:
-	    if(strcmp(((char *) data1), ((char *) data2))!= 0 )//not identical
-	    {
-		print("%s : %s in %s | %s in %s\n", variable_name, ((char *) data1)[item], infilename1, ((char *) data2)[item], infilename2);
-        ret++;
-	    }
+            if(strcmp(((char *) data1), ((char *) data2))!= 0 )//not identical
+            {
+                print("%s : %s in %s | %s in %s\n", variable_name, (char *) data1, infilename1, (char *) data2, infilename2);
+                ret++;
+            }
             break;
         case adios_unsigned_short:
-	    if(((unsigned short*) data1)[item] != ((unsigned short *) data2)[item])//not identical
-	    {
-		print("%s : %hu in %s | %hu in %s\n", variable_name, ((unsigned short *) data1)[item], infilename1, ((unsigned short *) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((unsigned short*) data1)[item] != ((unsigned short *) data2)[item])//not identical
+            {
+                print("%s : %hu in %s | %hu in %s\n", variable_name, ((unsigned short *) data1)[item], infilename1, ((unsigned short *) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_short:
-	    if(((signed short*) data1)[item] != ((signed short *) data2)[item])//not identical
-	    {
-		print("%s : %hd in %s | %hd in %s\n", variable_name, ((signed short *) data1)[item], infilename1, ((signed short *) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((signed short*) data1)[item] != ((signed short *) data2)[item])//not identical
+            {
+                print("%s : %hd in %s | %hd in %s\n", variable_name, ((signed short *) data1)[item], infilename1, ((signed short *) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_unsigned_integer:
-	    if(((unsigned int*) data1)[item] != ((unsigned int*) data2)[item])//not identical
-	    {
-		print("%s : %u in %s | %u in %s\n", variable_name, ((unsigned int*) data1)[item], infilename1, ((unsigned int*) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((unsigned int*) data1)[item] != ((unsigned int*) data2)[item])//not identical
+            {
+                print("%s : %u in %s | %u in %s\n", variable_name, ((unsigned int*) data1)[item], infilename1, ((unsigned int*) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_integer:
-	    if(((signed int*) data1)[item] != ((signed int*) data2)[item] != 0 )//not identical
-	    {
-		print("%s : %d in %s | %d in %s\n", variable_name, ((signed int*) data1)[item], infilename1, ((signed int*) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((signed int*) data1)[item] != ((signed int*) data2)[item])//not identical
+            {
+                print("%s : %d in %s | %d in %s\n", variable_name, ((signed int*) data1)[item], infilename1, ((signed int*) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_unsigned_long:
-	    if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
-	    {
-		print("%s : %llu in %s | %llu in %s\n", variable_name, ((unsigned long long*) data1)[item], infilename1, ((unsigned long long*) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
+            {
+                print("%s : %llu in %s | %llu in %s\n", variable_name, ((unsigned long long*) data1)[item], infilename1, ((unsigned long long*) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_long:
-	    if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
-	    {
-		print("%s : %lld in %s | %lld in %s\n", variable_name, ((signed long long*) data1)[item], infilename1, ((signed long long*) data2)[item], infilename2);
-        ret++;
-	    }
+            if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
+            {
+                print("%s : %lld in %s | %lld in %s\n", variable_name, ((signed long long*) data1)[item], infilename1, ((signed long long*) data2)[item], infilename2);
+                ret++;
+            }
             break;
         case adios_real:
-	    {
-	    float a, b;
-	    a = ((float *) data1)[item];
-	    b = ((float *) data2)[item];
-	    if(abs(a-b)> fuzz_factor){
- 	      print("%s : %g in %s | %g in %s\n", variable_name, a, infilename1, b, infilename2);
-        ret++;
-	    }
-            break;
-	    }
+            {
+                float a, b;
+                a = ((float *) data1)[item];
+                b = ((float *) data2)[item];
+                if(abs(a-b)> fuzz_factor){
+                    print("%s : %g in %s | %g in %s\n", variable_name, a, infilename1, b, infilename2);
+                    ret++;
+                }
+                break;
+            }
         case adios_double:
-	    {
-	    double aa, bb;
-	    aa = ((double *) data1)[item];
-	    bb = ((double *) data2)[item];
-	    if(abs(aa-bb)> fuzz_factor){
- 	      print("%s : %g in %s | %g in %s\n", variable_name, aa, infilename1, bb, infilename2);
-        ret++;
-	    }
-            break;
-	    }
+            {
+                double aa, bb;
+                aa = ((double *) data1)[item];
+                bb = ((double *) data2)[item];
+                if(abs(aa-bb)> fuzz_factor){
+                    print("%s : %g in %s | %g in %s\n", variable_name, aa, infilename1, bb, infilename2);
+                    ret++;
+                }
+                break;
+            }
         case adios_long_double:
             //fprintf(outf,(f ? format : "%g "), ((double *) data1)[item]);
-        //                fprintf(outf,(f ? format : "????????"));
+            //                fprintf(outf,(f ? format : "????????"));
             break;
         case adios_complex:
-	    {
-	    float a11, a12, b11, b12;
-	    a11 = ((float *) data1)[2*item];
-	    a12 = ((float *) data1)[2*item+1];
-	    b11 = ((float *) data2)[2*item];
-	    b12 = ((float *) data2)[2*item+1];
-	    if(abs(a11-b11)> fuzz_factor || abs(a12-b12)>fuzz_factor){
- 	      print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a11, b11, infilename1, a12, b12, infilename2);
-        ret++;
-	    }
-	 
-            break;
-	    }
+            {
+                float a11, a12, b11, b12;
+                a11 = ((float *) data1)[2*item];
+                a12 = ((float *) data1)[2*item+1];
+                b11 = ((float *) data2)[2*item];
+                b12 = ((float *) data2)[2*item+1];
+                if(abs(a11-b11)> fuzz_factor || abs(a12-b12)>fuzz_factor){
+                    print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a11, b11, infilename1, a12, b12, infilename2);
+                    ret++;
+                }
+
+                break;
+            }
         case adios_double_complex:
             {
-	    double a21, a22, b21, b22;
-	    a21 = ((float *) data1)[2*item];
-	    a22 = ((float *) data1)[2*item+1];
-	    b21 = ((float *) data2)[2*item];
-	    b22 = ((float *) data2)[2*item+1];
-	    if(abs(a21-b21)> fuzz_factor || abs(a22-b22)>fuzz_factor){
- 	      print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a21, b21, infilename1, a22, b22, infilename2);
-        ret++;
-	    }
+                double a21, a22, b21, b22;
+                a21 = ((float *) data1)[2*item];
+                a22 = ((float *) data1)[2*item+1];
+                b21 = ((float *) data2)[2*item];
+                b22 = ((float *) data2)[2*item+1];
+                if(abs(a21-b21)> fuzz_factor || abs(a22-b22)>fuzz_factor){
+                    print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a21, b21, infilename1, a22, b22, infilename2);
+                    ret++;
+                }
+                break;
+            }
+        default:
             break;
- 	    }
     } // end switch
     return ret;
 }
diff --git a/utils/bpdump/Makefile.in b/utils/bpdump/Makefile.in
index deb38ae..cf1bea5 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpdump/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -185,9 +188,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -254,6 +263,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bpdump/bpdump.c b/utils/bpdump/bpdump.c
index fd5f574..354fe9b 100644
--- a/utils/bpdump/bpdump.c
+++ b/utils/bpdump/bpdump.c
@@ -64,11 +64,7 @@ const char * value_to_string_ptr (enum ADIOS_DATATYPES type, void * data, uint64
 int main (int argc, char ** argv)
 {
     char * filename;
-    char * var;
-    int i = 0;
     int rc = 0;
-    uint64_t element_size = 0;
-    struct adios_bp_element_struct * element = NULL;
     struct dump_struct dump;
 
     if (argc < 2)
@@ -118,7 +114,6 @@ int main (int argc, char ** argv)
 
     struct adios_bp_buffer_struct_v1 * b = 0;
     uint32_t version = 0;
-    uint16_t flag = 0;
 
     b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     adios_buffer_struct_init (b);
@@ -133,6 +128,15 @@ int main (int argc, char ** argv)
 
     adios_posix_read_version (b);
     adios_parse_version (b, &version);
+    version = version & ADIOS_VERSION_NUM_MASK;
+    printf ("BP format version: %d\n", version);
+    if (version < 2)
+    {
+        fprintf (stderr, "bpdump: This version of bpdump can only dump BP format version 2. "
+                 "Use an older bpdump from adios 1.6 to dump this file.\n");
+        adios_posix_close_internal (b);
+        return -1;
+    }
 
     struct adios_index_process_group_struct_v1 * pg_root = 0;
     struct adios_index_process_group_struct_v1 * pg = 0;
@@ -224,9 +228,10 @@ int main (int argc, char ** argv)
             adios_parse_var_data_header_v1 (b, &var_header);
             print_var_header (&var_header);
 
-            if (   var_header.dims == 0
-                ||    dump.do_dump
-                   && !strcasecmp (dump.dump_var, var_header.name)
+            if ( var_header.dims == 0 || 
+                 ( dump.do_dump &&
+                   !strcasecmp (dump.dump_var, var_header.name)
+                 )
                )
             {
                 // add one for string null terminators
@@ -451,9 +456,8 @@ const char * value_to_string_ptr (enum ADIOS_DATATYPES type, void * data, uint64
 
         case adios_string:
         {
-            char * p = (char *) data;
+            //char * p = (char *) data;
             //sprintf (s, "%s", p [element]);
-            sprintf (s, "");
             fprintf (stderr, "arrays of strings not fully supported\n");
             break;
         }
@@ -475,6 +479,9 @@ const char * value_to_string_ptr (enum ADIOS_DATATYPES type, void * data, uint64
                     );
             break;
         }
+
+        case adios_unknown:
+            break;
     }
 
     return s;
@@ -484,7 +491,6 @@ void print_process_group_header (uint64_t num
                       ,struct adios_process_group_header_struct_v1 * pg_header
                       )
 {
-    int i;
     struct adios_method_info_struct_v1 * m;
 
     printf ("Process Group: %llu\n", num);
@@ -861,7 +867,6 @@ void print_var_payload (struct adios_var_header_struct_v1 * var_header
             uint64_t * position = 0;
             uint64_t * dims = 0;
             int i = 0;
-            int size_of_type = adios_get_type_size (var_header->type, "");
 
             while (d)
             {
@@ -1013,7 +1018,7 @@ void print_vars_index (struct adios_index_var_struct_v1 * vars_root)
                    ,vars_root->var_name, vars_root->group_name, vars_root->id
                    );
 	}
-        char * typestr = adios_type_to_string_int (vars_root->type);
+        const char * typestr = adios_type_to_string_int (vars_root->type);
         printf ("\tDatatype: %s\n", typestr);
         //printf ("\tDatatype: %s\n", adios_type_to_string_int (vars_root->type));
         printf ("\tVars Characteristics: %llu\n"
diff --git a/utils/bpls/Makefile.in b/utils/bpls/Makefile.in
index 1016d7a..dff4866 100644
--- a/utils/bpls/Makefile.in
+++ b/utils/bpls/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -183,9 +186,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -252,6 +261,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bpls/bpls.c b/utils/bpls/bpls.c
index fc9a400..18e2594 100644
--- a/utils/bpls/bpls.c
+++ b/utils/bpls/bpls.c
@@ -179,8 +179,8 @@ int main( int argc, char *argv[] ) {
     ////prgname = strdup(argv[0]);
 
     /* other variables */
-    int c, last_c='_';
-    int last_opt = -1;
+    int c;
+    //int last_c = '_';
     /* Process the arguments */
     while ((c = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
         switch (c) {
@@ -296,7 +296,7 @@ int main( int argc, char *argv[] ) {
                 printf("Processing default: %c\n", c);
                 break;
         } /* end switch */
-        last_c = c;
+        //last_c = c;
     } /* end while */
 
     /* Check if we have a file defined */
@@ -387,8 +387,8 @@ void init_globals(void) {
 }
 
 
-#define PRINT_DIMS(str, v, n, loopvar) printf("%s = { ", str); \
-    for (loopvar=0; loopvar<n;loopvar++) printf("%lld ", v[loopvar]);    \
+#define PRINT_DIMS32(str, v, n, loopvar) printf("%s = { ", str); \
+    for (loopvar=0; loopvar<n;loopvar++) printf("%d ", v[loopvar]);    \
 printf("}")
 
 void printSettings(void) {
@@ -404,10 +404,10 @@ void printSettings(void) {
     printf("  output : %s\n", (outpath ? outpath : "stdout"));
 
     if (start != NULL) {
-        PRINT_DIMS("  start", istart, ndimsspecified,i); printf("\n");
+        PRINT_DIMS32("  start", istart, ndimsspecified,i); printf("\n");
     }
     if (count != NULL) {
-        PRINT_DIMS("  count", icount, ndimsspecified,i); printf("\n");
+        PRINT_DIMS32("  count", icount, ndimsspecified,i); printf("\n");
     }
 
     if (longopt)
@@ -442,9 +442,8 @@ void printSettings(void) {
 
 void print_file_size(uint64_t size)
 {
-    static const int  sn=7;
     static const char *sm[]={"bytes", "KB", "MB", "GB", "TB", "PB", "EB"};
-    uint64_t s = size, r;
+    uint64_t s = size, r=0;
     int idx = 0;
     while ( s/1024 > 0 ) {
         r = s%1024; 
@@ -454,7 +453,6 @@ void print_file_size(uint64_t size)
     if (r > 511)
         s++;
     printf ("  file size:     %lld %s\n", s, sm[idx]); 
-
 }
 
 
@@ -473,9 +471,7 @@ int doList_group (ADIOS_FILE *fp)
     ADIOS_VARINFO **vis; 
     enum ADIOS_DATATYPES vartype;
     int     i, j, n;             // loop vars
-    int     status;
     int     attrsize;                       // info about one attribute
-    int     mpi_comm_dummy=0;
     bool    matches;
     int     len, maxlen, maxtypelen;
     int     retval;
@@ -591,7 +587,7 @@ int doList_group (ADIOS_FILE *fp)
                 }
 
                 if (longopt || plot) {
-                    status = adios_inq_var_stat (fp, vi, timestep && timed, 0);
+                    adios_inq_var_stat (fp, vi, timestep && timed, show_decomp);
                 }
 
                 if (plot && vi->statistics && vi->statistics->histogram) {
@@ -604,27 +600,21 @@ int doList_group (ADIOS_FILE *fp)
                     if(timestep == false || timed == false ) {
 
                         fprintf(outf," = ");
-                        print_data(vi->statistics->min, 0, vartype, false); 
-
-                        fprintf(outf,"/ ");
-                        print_data(vi->statistics->max, 0, vartype, false); 
-
                         if(vartype == adios_complex || vartype == adios_double_complex) {
-
+                            // force printing (double,double) here
+                            print_data(vi->statistics->min, 0, adios_double_complex, false); 
                             fprintf(outf,"/ ");
-                            print_data(vi->statistics->avg, 0, adios_double_complex, false);
-                        } else {
-
+                            print_data(vi->statistics->max, 0, adios_double_complex, false); 
                             fprintf(outf,"/ ");
-                            print_data(vi->statistics->avg, 0, adios_double, false);
-                        }
-
-                        if(vartype == adios_complex || vartype == adios_double_complex) {
-
+                            print_data(vi->statistics->avg, 0, adios_double_complex, false);
                             fprintf(outf,"/ ");
                             print_data(vi->statistics->std_dev, 0, adios_double_complex, false);
                         } else {
-
+                            print_data(vi->statistics->min, 0, vartype, false); 
+                            fprintf(outf,"/ ");
+                            print_data(vi->statistics->max, 0, vartype, false); 
+                            fprintf(outf,"/ ");
+                            print_data(vi->statistics->avg, 0, adios_double, false);
                             fprintf(outf,"/ ");
                             print_data(vi->statistics->std_dev, 0, adios_double, false);
                         }
@@ -762,6 +752,8 @@ int doList_group (ADIOS_FILE *fp)
 void printMeshes (ADIOS_FILE  *fp)
 {
     int meshid,i,j;     // loop vars
+    ADIOS_FILE *meshfp = NULL;
+    int     mpi_comm_dummy=0;
     if (fp->nmeshes==0) {
         fprintf(outf, "Mesh info: There are no meshes defined in this file\n");
         return;
@@ -778,6 +770,10 @@ void printMeshes (ADIOS_FILE  *fp)
                 fprintf(outf, "  bpls warning: mesh name in list (=\"%s\") != "
                         "inquired mesh name (\"%s\")\n", 
                         fp->mesh_namelist[meshid], mi->name);
+            if (mi->file_name) {
+               meshfp = adios_read_open_file(mi->file_name, ADIOS_READ_METHOD_BP, mpi_comm_dummy );
+               adios_complete_meshinfo (fp, meshfp, mi); 
+            }
             fprintf(outf, "    type:         ");
             switch (mi->type) {
                 case ADIOS_MESH_UNIFORM:
@@ -793,7 +789,6 @@ void printMeshes (ADIOS_FILE  *fp)
                                      j, %g) 
                     }
                     if (mi->uniform->spacings) {
-                        mi->uniform->spacings[0]=5.0;
                         PRINT_ARRAY ("    spacings:     ", 
                                      mi->uniform->num_dimensions, 
                                      mi->uniform->spacings,
@@ -864,7 +859,7 @@ void printMeshes (ADIOS_FILE  *fp)
                     for (i=0; i < mi->unstructured->ncsets; i++) { 
                         fprintf(outf, "    cell set %d:\n", i);
                         fprintf(outf, "      cell type:  %d\n", mi->unstructured->ctypes[i]);
-                        fprintf(outf, "      ncells:     %d\n", mi->unstructured->ccounts[i]);
+                        fprintf(outf, "      ncells:     %llu\n", mi->unstructured->ccounts[i]);
                         fprintf(outf, "      cells var:  \"%s\"\n", mi->unstructured->cdata[i]);
                     }
                     fprintf(outf, "    nspaces:      %d\n", mi->unstructured->nspaces);
@@ -876,6 +871,9 @@ void printMeshes (ADIOS_FILE  *fp)
             } 
             fprintf(outf, "    time varying: %s\n", (mi->time_varying ? "yes" : "no") );
             adios_free_meshinfo (mi);
+            if (meshfp) 
+                adios_read_close(meshfp);
+
         }
     }
     fprintf(outf, "\n");
@@ -1026,9 +1024,10 @@ int print_data_hist(ADIOS_VARINFO * vi, char * varname)
     strcat(xtics, ")\n");
 
     fprintf(out_plot, "start = -0.5\npos(x) = start + x * 1\nset boxwidth 1\nset style fill solid border 5#5lt6#6\n");
-    fprintf(out_plot, xtics);
+    fputs(xtics, out_plot);
     fprintf(out_plot, "plot '%s' using 3 smooth frequency w boxes\n", hist_file);
     fprintf(out_plot, "pause -1 'Press Enter to quit'\n");
+    return 0;
 }
 
 int cmpstringp(const void *p1, const void *p2)
@@ -1139,6 +1138,9 @@ int getTypeInfo( enum ADIOS_DATATYPES adiosvartype, int* elemsize)
     return 0;
 }
 
+#define PRINT_DIMS64(str, v, n, loopvar) printf("%s = { ", str); \
+    for (loopvar=0; loopvar<n;loopvar++) printf("%lld ", v[loopvar]);    \
+printf("}")
 /** Read data of a variable and print 
  * Return: 0: ok, != 0 on error
  */
@@ -1283,8 +1285,8 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
 
         if (verbose>2) {
             printf("adios_read_var name=%s ", name);
-            PRINT_DIMS("  start", s, tdims, j); 
-            PRINT_DIMS("  count", c, tdims, j); 
+            PRINT_DIMS64("  start", s, tdims, j); 
+            PRINT_DIMS64("  count", c, tdims, j); 
             printf("  read %d elems\n", actualreadn);
         }
 
@@ -1465,7 +1467,6 @@ int print_data_as_string(void * data, int maxlen, enum ADIOS_DATATYPES adiosvart
 {
     char *str = (char *)data;
     int len = maxlen;
-    bool cstring = false;
     switch(adiosvartype) {
         case adios_unsigned_byte:
         case adios_byte:
@@ -1604,8 +1605,7 @@ int print_data_characteristics(void * min, void * max, double * avg, double * st
             break;
 
         case adios_long_double:
-            //fprintf(outf,(f ? format : "%g "), ((double *) data)[item]);
-            fprintf(outf,(f ? format : "????????"));
+            fprintf(outf,"????????");
             break;
 
             // TO DO
@@ -1618,6 +1618,8 @@ int print_data_characteristics(void * min, void * max, double * avg, double * st
                fprintf(outf,(f ? format : "(%g,i%g)" ), ((double *) data)[2*item], ((double *) data)[2*item+1]);
                break;
              */
+        default:
+            break;
     } // end switch
     return 0;
 }
@@ -1629,7 +1631,7 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
         fprintf(outf, "null ");
         return 0;
     }
-    // print next data item into vstr
+    // print next data item 
     switch(adiosvartype) {
         case adios_unsigned_byte:
             fprintf(outf,(f ? format : "%hhu "), ((unsigned char *) data)[item]);
@@ -1672,8 +1674,8 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
 
 
         case adios_long_double:
-            //fprintf(outf,(f ? format : "%g "), ((double *) data)[item]);
-            fprintf(outf,(f ? format : "????????"));
+            fprintf(outf,(f ? format : "%Lg "), ((long double *) data)[item]);
+            //fprintf(outf,(f ? format : "????????"));
             break;
 
 
@@ -1684,6 +1686,9 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
         case adios_double_complex:
             fprintf(outf,(f ? format : "(%g,i%g)" ), ((double *) data)[2*item], ((double *) data)[2*item+1]);
             break;
+
+        default:
+            break;
     } // end switch
     return 0;
 }
@@ -1692,7 +1697,7 @@ int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype,
         uint64_t *s, uint64_t *c, int tdims, int *ndigits)
 {
     int i,item, steps;
-    char idxstr[128], vstr[128], buf[16];
+    char idxstr[128], buf[16];
     uint64_t ids[MAX_DIMS];  // current indices
     bool roll;
 
@@ -1769,7 +1774,7 @@ void print_endline(void)
 }
 
 
-int print_decomp(ADIOS_VARINFO *vi)
+void print_decomp(ADIOS_VARINFO *vi)
 {
     /* Print block info */
     int i,j,k;
@@ -1781,13 +1786,14 @@ int print_decomp(ADIOS_VARINFO *vi)
             fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
             fprintf(outf, "%d instances available\n", vi->nblocks[i]);
         }
-        return 0;
+        return;
     } 
     else 
     {
         // arrays
         int ndigits_nblocks;
         int ndigits_dims[32];
+        int blockid = 0;
         for (k=0; k < vi->ndim; k++) {
             // get digit lengths for each dimension
             ndigits_dims[k] = ndigits (vi->dims[k]-1);
@@ -1808,7 +1814,61 @@ int print_decomp(ADIOS_VARINFO *vi)
                     if (k < vi->ndim-1)
                         fprintf(outf, ", ");
                 }
-                fprintf(outf, "]\n");
+                fprintf(outf, "]");
+
+                /* Print per-block statistics if available */
+                if (longopt && vi->statistics->blocks) {
+                    fprintf(outf," = ");
+                    if (vi->statistics->blocks->mins) {
+                        if(vi->type == adios_complex || vi->type == adios_double_complex) {
+                            print_data(vi->statistics->blocks->mins[blockid], 0, adios_double_complex, false); 
+                        } else {
+                            print_data(vi->statistics->blocks->mins[blockid], 0, vi->type, false); 
+                        }
+                    } else {
+                        fprintf(outf,"N/A ");
+                    }
+
+                    fprintf(outf,"/ ");
+                    if (vi->statistics->blocks->maxs) {
+                        if(vi->type == adios_complex || vi->type == adios_double_complex) {
+                            print_data(vi->statistics->blocks->maxs[blockid], 0, adios_double_complex, false); 
+                        } else {
+                            print_data(vi->statistics->blocks->maxs[blockid], 0, vi->type, false); 
+                        }
+                    } else {
+                        fprintf(outf,"N/A ");
+                    }
+
+                    fprintf(outf,"/ ");
+                    if (vi->statistics->blocks->avgs) {
+                        if(vi->type == adios_complex || vi->type == adios_double_complex) {
+                            print_data (vi->statistics->blocks->avgs[blockid], 0, 
+                                        adios_double_complex, false);
+                        } else {
+                            print_data (vi->statistics->blocks->avgs[blockid], 0, 
+                                        adios_double, false);
+                        }
+                    } else {
+                        fprintf(outf,"N/A ");
+                    }
+
+                    fprintf(outf,"/ ");
+                    if (vi->statistics->blocks->avgs) {
+                        if(vi->type == adios_complex || vi->type == adios_double_complex) {
+                            print_data (vi->statistics->blocks->std_devs[blockid], 0, 
+                                        adios_double_complex, false);
+                        } else {
+                            print_data (vi->statistics->blocks->std_devs[blockid], 0, 
+                                        adios_double, false);
+                        }
+                    } else {
+                        fprintf(outf,"N/A ");
+                    }
+
+                }
+                fprintf(outf, "\n");
+                blockid++;
             }
         }
     }
diff --git a/utils/bpls/bpls.h b/utils/bpls/bpls.h
index b1a9db8..5e1cdbb 100644
--- a/utils/bpls/bpls.h
+++ b/utils/bpls/bpls.h
@@ -49,4 +49,4 @@ void print_endline(void);
 void print_stop(void);
 int print_data_hist(ADIOS_VARINFO * vi, char * varname);
 int print_data_characteristics(void * min, void * max, double * avg, double * std_dev, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
-int print_decomp(ADIOS_VARINFO *vi);
+void print_decomp(ADIOS_VARINFO *vi);
diff --git a/utils/bpsplit/Makefile.in b/utils/bpsplit/Makefile.in
index eb788e9..317eea4 100644
--- a/utils/bpsplit/Makefile.in
+++ b/utils/bpsplit/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -201,9 +204,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -270,6 +279,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/bpsplit/bpappend.c b/utils/bpsplit/bpappend.c
index 92a1749..c3b7f99 100644
--- a/utils/bpsplit/bpappend.c
+++ b/utils/bpsplit/bpappend.c
@@ -94,15 +94,14 @@ void display_help() {
 /** Main */
 int main( int argc, char *argv[] ) {
     int excode;
-    int from      = -1;           // split from  'from'. -1=last
-    int to        = -1;           // split until 'to'. -1=last
     char *filein  = NULL;
     char *fileout = NULL;       
 
     prgname = strdup(argv[0]);
 
     /* other variables */
-    int c, last_c='_';
+    int c;
+    //int last_c='_';
     int idx = 1;
     /* Process the arguments */
     while ((c = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
@@ -129,7 +128,7 @@ int main( int argc, char *argv[] ) {
             exit (1);
             break;
         } /* end switch */
-        last_c = c;
+        //last_c = c;
         idx++;
     } /* end while */
 
@@ -339,7 +338,7 @@ void recalc_offsets(void) {
     struct adios_index_process_group_struct_v1 * pg = in_pg_root;
     struct adios_index_var_struct_v1       * vg = in_vars_root;
     struct adios_index_attribute_struct_v1 * ag = in_attrs_root;
-    int i, start, count;
+    int i;
 
     // process group offsets
     if (verbose) printf("Recalc offsets for new process groups\n");
@@ -351,8 +350,6 @@ void recalc_offsets(void) {
     // variable characteristics offsets
     if (verbose) printf("Recalc offsets for new variable characteristics\n");
     while (vg) {
-        start = 0;
-        count = 0;
         for (i=0; i < vg->characteristics_count; i++) {
             vg->characteristics[i].offset += out_bp->pg_index_offset;
         }
@@ -362,8 +359,6 @@ void recalc_offsets(void) {
     // attribute characteristics offsets
     if (verbose) printf("Recalc offsets for new attribute characteristics\n");
     while (ag) {
-        start = 0;
-        count = 0;
         for (i=0; i < ag->characteristics_count; i++) {
             ag->characteristics[i].offset += out_bp->pg_index_offset;
         }
@@ -414,7 +409,7 @@ int recover(int f) {
         return 2;
     }
     if (bytes_written != buffer_offset) {
-        fprintf(stderr, "  Error: could not write complete original index into output file: %llu bytes from %llu\n"
+        fprintf(stderr, "  Error: could not write complete original index into output file: %zu bytes from %llu\n"
                 "Index in output file will be damaged.\n",
                 bytes_written, buffer_offset);
         return 2;
@@ -523,7 +518,7 @@ int append_in_to_out( const char *fileout, const char *filein) {
     if (verbose>1) printf("  write %llu 0x%llx bytes of indexes into %s\n", buffer_offset, buffer_offset, fileout);
     bytes_written = write (f, buffer, buffer_offset);
 
-    if (verbose>1) printf("  written %llu 0x%llx bytes of indexes into %s\n", bytes_written, bytes_written, fileout);
+    if (verbose>1) printf("  written %zu 0x%zx bytes of indexes into %s\n", bytes_written, bytes_written, fileout);
 
     // clean up
     free(buffer);
@@ -536,10 +531,6 @@ int append_in_to_out( const char *fileout, const char *filein) {
 
 int bpappend(char *filein, char *fileout) {
     int excode = 0;
-    uint32_t from, to;
-    uint32_t maxtime = 1;   // at least there is time=1 (single group) in a bp file
-    struct adios_bp_buffer_struct_v1 * b = 0;
-
     // open output file if exists, read and parse indexes 
     excode = read_indexes( fileout, false );
     if (excode == 128) {
diff --git a/utils/bpsplit/bpgettime.c b/utils/bpsplit/bpgettime.c
index d1f951f..9594a1c 100644
--- a/utils/bpsplit/bpgettime.c
+++ b/utils/bpsplit/bpgettime.c
@@ -95,7 +95,8 @@ int main( int argc, char *argv[] ) {
     prgname = strdup(argv[0]);
 
     /* other variables */
-    int c, last_c='_';
+    int c;
+    //int last_c='_';
     int idx = 1;
     /* Process the arguments */
     while ((c = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
@@ -125,7 +126,7 @@ int main( int argc, char *argv[] ) {
             exit (1);
             break;
         } /* end switch */
-        last_c = c;
+        //last_c = c;
         idx++;
     } /* end while */
 
diff --git a/utils/bpsplit/bpsplit.c b/utils/bpsplit/bpsplit.c
index 1465af2..92bc4c6 100644
--- a/utils/bpsplit/bpsplit.c
+++ b/utils/bpsplit/bpsplit.c
@@ -125,7 +125,8 @@ int main( int argc, char *argv[] ) {
     prgname = strdup(argv[0]);
 
     /* other variables */
-    int c, last_c='_';
+    int c; 
+    //int last_c='_';
     int idx = 1;
     /* Process the arguments */
     while ((c = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
@@ -175,7 +176,7 @@ int main( int argc, char *argv[] ) {
             exit (1);
             break;
         } /* end switch */
-        last_c = c;
+        //last_c = c;
         idx++;
     } /* end while */
 
@@ -589,7 +590,7 @@ int write_out( const char *fileout, const char *filein) {
     if (verbose>1) printf("  write %llu 0x%llx bytes of indexes into %s\n", buffer_offset, buffer_offset, fileout);
     bytes_written = write (f, buffer, buffer_offset);
 
-    if (verbose>1) printf("  written %llu 0x%llx bytes of indexes into %s\n", bytes_written, bytes_written, fileout);
+    if (verbose>1) printf("  written %zu 0x%zx bytes of indexes into %s\n", bytes_written, bytes_written, fileout);
 
     // clean up
     free(buffer);
@@ -602,8 +603,6 @@ int bpsplit(char *filein, char *fileout, char *recordfile, int from_in, int to_i
     int excode = 0;
     uint32_t from, to;
     uint32_t maxtime = 1;   // at least there is time=1 (single group) in a bp file
-    struct adios_bp_buffer_struct_v1 * b = 0;
-
     idx = adios_alloc_index_v1(0);
 
     // open input file, read and parse indexes 
diff --git a/utils/gpp/Makefile.in b/utils/gpp/Makefile.in
index b531a47..496f2ff 100644
--- a/utils/gpp/Makefile.in
+++ b/utils/gpp/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -182,9 +185,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -251,6 +260,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/gpp/ad_config.py b/utils/gpp/ad_config.py
index e379124..504e42c 100755
--- a/utils/gpp/ad_config.py
+++ b/utils/gpp/ad_config.py
@@ -154,8 +154,8 @@ class var:
         name = self.get_name()
         if (path == ''):
             fullpath = name
-        elif (path == '/'):
-            fullpath = '/'+name
+        elif (path[-1:] == '/'):
+            fullpath = path + name
         else:
             fullpath = path + '/' + name
         return fullpath
diff --git a/utils/list_methods/CMakeLists.txt b/utils/list_methods/CMakeLists.txt
new file mode 100644
index 0000000..93bddc1
--- /dev/null
+++ b/utils/list_methods/CMakeLists.txt
@@ -0,0 +1,28 @@
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/src/core)
+include_directories(${PROJECT_BINARY_DIR})
+include_directories(${PROJECT_SOURCE_DIR}/utils/list_methods)
+link_directories(${PROJECT_BINARY_DIR}/utils/list_methods)
+
+if(BUILD_WRITE)
+  add_executable(list_methods list_methods.c)
+  target_link_libraries(list_methods adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+  set_target_properties(list_methods PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}WRITE ${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${MPI_C_COMPILE_FLAGS}")
+
+  if(MPI_LINK_FLAGS)
+     set_target_properties(list_methods PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+
+  install(PROGRAMS ${PROJECT_BINARY_DIR}/utils/list_methods/list_methods DESTINATION ${bindir})
+endif(BUILD_WRITE)
+
+add_executable(list_methods_readonly list_methods.c)
+target_link_libraries(list_methods_readonly adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
+set_target_properties(list_methods_readonly PROPERTIES COMPILE_FLAGS
+"${ADIOSREADLIB_CPPFLAGS} ${ADIOSREADLIB_CFLAGS} ${ADIOSREADLIB_EXTRA_CPPFLAGS} ${MPI_C_COMPILE_FLAGS}")
+
+if(MPI_LINK_FLAGS)
+    set_target_properties(list_methods_readonly PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+
+install(PROGRAMS ${PROJECT_BINARY_DIR}/utils/list_methods/list_methods_readonly DESTINATION ${bindir})
diff --git a/utils/list_methods/Makefile.am b/utils/list_methods/Makefile.am
new file mode 100644
index 0000000..eb17c0d
--- /dev/null
+++ b/utils/list_methods/Makefile.am
@@ -0,0 +1,36 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/core
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+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_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_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_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_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
+list_methods_readonly_nompi_LDADD =  $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
+
+#if USE_PARALLEL_COMPILER
+CC=$(MPICC)
+CXX=$(MPICXX)
+#endif
+
+
diff --git a/utils/bpsplit/Makefile.in b/utils/list_methods/Makefile.in
similarity index 71%
copy from utils/bpsplit/Makefile.in
copy to utils/list_methods/Makefile.in
index eb788e9..baae30f 100644
--- a/utils/bpsplit/Makefile.in
+++ b/utils/list_methods/Makefile.in
@@ -34,8 +34,10 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = bpsplit$(EXEEXT) bpappend$(EXEEXT) bpgettime$(EXEEXT)
-subdir = utils/bpsplit
+bin_PROGRAMS = list_methods_readonly$(EXEEXT) \
+	list_methods_readonly_nompi$(EXEEXT) $(am__EXEEXT_1)
+ at BUILD_WRITE_TRUE@am__append_1 = list_methods list_methods_nompi 
+subdir = utils/list_methods
 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,7 +51,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -73,30 +78,48 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+ at BUILD_WRITE_TRUE@am__EXEEXT_1 = list_methods$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	list_methods_nompi$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bpappend_OBJECTS = bpappend-bpappend.$(OBJEXT)
-bpappend_OBJECTS = $(am_bpappend_OBJECTS)
+am__list_methods_SOURCES_DIST = list_methods.c
+ at BUILD_WRITE_TRUE@am_list_methods_OBJECTS =  \
+ at BUILD_WRITE_TRUE@	list_methods-list_methods.$(OBJEXT)
+list_methods_OBJECTS = $(am_list_methods_OBJECTS)
 am__DEPENDENCIES_1 =
-bpappend_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
-	$(am__DEPENDENCIES_1)
-bpappend_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpappend_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am_bpgettime_OBJECTS = bpgettime-bpgettime.$(OBJEXT)
-bpgettime_OBJECTS = $(am_bpgettime_OBJECTS)
-bpgettime_DEPENDENCIES =  \
-	$(top_builddir)/src/libadios_internal_nompi.a \
-	$(am__DEPENDENCIES_1)
-bpgettime_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ at BUILD_WRITE_TRUE@list_methods_DEPENDENCIES =  \
+ at BUILD_WRITE_TRUE@	$(top_builddir)/src/libadios.a \
+ at BUILD_WRITE_TRUE@	$(am__DEPENDENCIES_1)
+list_methods_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(list_methods_LDFLAGS) $(LDFLAGS) -o $@
+am__list_methods_nompi_SOURCES_DIST = list_methods.c
+ at BUILD_WRITE_TRUE@am_list_methods_nompi_OBJECTS =  \
+ at BUILD_WRITE_TRUE@	list_methods_nompi-list_methods.$(OBJEXT)
+list_methods_nompi_OBJECTS = $(am_list_methods_nompi_OBJECTS)
+ at BUILD_WRITE_TRUE@list_methods_nompi_DEPENDENCIES =  \
+ at BUILD_WRITE_TRUE@	$(top_builddir)/src/libadios_nompi.a \
+ at BUILD_WRITE_TRUE@	$(am__DEPENDENCIES_1)
+list_methods_nompi_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(list_methods_nompi_LDFLAGS) $(LDFLAGS) -o $@
+am_list_methods_readonly_OBJECTS =  \
+	list_methods_readonly-list_methods.$(OBJEXT)
+list_methods_readonly_OBJECTS = $(am_list_methods_readonly_OBJECTS)
+list_methods_readonly_DEPENDENCIES =  \
+	$(top_builddir)/src/libadiosread.a $(am__DEPENDENCIES_1)
+list_methods_readonly_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(bpgettime_LDFLAGS) $(LDFLAGS) -o $@
-am_bpsplit_OBJECTS = bpsplit-bpsplit.$(OBJEXT)
-bpsplit_OBJECTS = $(am_bpsplit_OBJECTS)
-bpsplit_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
-	$(am__DEPENDENCIES_1)
-bpsplit_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpsplit_LDFLAGS) \
+	$(list_methods_readonly_LDFLAGS) $(LDFLAGS) -o $@
+am_list_methods_readonly_nompi_OBJECTS =  \
+	list_methods_readonly_nompi-list_methods.$(OBJEXT)
+list_methods_readonly_nompi_OBJECTS =  \
+	$(am_list_methods_readonly_nompi_OBJECTS)
+list_methods_readonly_nompi_DEPENDENCIES =  \
+	$(top_builddir)/src/libadiosread_nompi.a $(am__DEPENDENCIES_1)
+list_methods_readonly_nompi_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(list_methods_readonly_nompi_LDFLAGS) \
 	$(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
@@ -110,9 +133,13 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(bpappend_SOURCES) $(bpgettime_SOURCES) $(bpsplit_SOURCES)
-DIST_SOURCES = $(bpappend_SOURCES) $(bpgettime_SOURCES) \
-	$(bpsplit_SOURCES)
+SOURCES = $(list_methods_SOURCES) $(list_methods_nompi_SOURCES) \
+	$(list_methods_readonly_SOURCES) \
+	$(list_methods_readonly_nompi_SOURCES)
+DIST_SOURCES = $(am__list_methods_SOURCES_DIST) \
+	$(am__list_methods_nompi_SOURCES_DIST) \
+	$(list_methods_readonly_SOURCES) \
+	$(list_methods_readonly_nompi_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -153,8 +180,9 @@ AWK = @AWK@
 BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
 BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
 BZIP2_LIBS = @BZIP2_LIBS@
-CC = @CC@
- at USE_PARALLEL_COMPILER_TRUE@CC = $(MPICC)
+
+#if USE_PARALLEL_COMPILER
+CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CPP = @CPP@
@@ -166,8 +194,7 @@ CRAY_UGNI_CPPFLAGS = @CRAY_UGNI_CPPFLAGS@
 CRAY_UGNI_LDFLAGS = @CRAY_UGNI_LDFLAGS@
 CRAY_UGNI_LIBS = @CRAY_UGNI_LIBS@
 CSH = @CSH@
-CXX = @CXX@
- at USE_PARALLEL_COMPILER_TRUE@CXX = $(MPICXX)
+CXX = $(MPICXX)
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
@@ -201,9 +228,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -270,6 +303,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -357,23 +394,24 @@ 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
+	-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_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_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_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
-bpgettime_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
-	$(ADIOSLIB_INT_LDADD)
+ at BUILD_WRITE_TRUE@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_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
+ at BUILD_WRITE_TRUE@list_methods_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+ at BUILD_WRITE_TRUE@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_LDFLAGS = $(ADIOSLIB_SEQ_LDFLAGS) 
+ at BUILD_WRITE_TRUE@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_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_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
+list_methods_readonly_nompi_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSREADLIB_SEQ_LDADD)
 all: all-am
 
 .SUFFIXES:
@@ -387,9 +425,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bpsplit/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/list_methods/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bpsplit/Makefile
+	  $(AUTOMAKE) --gnu utils/list_methods/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -451,15 +489,18 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bpappend$(EXEEXT): $(bpappend_OBJECTS) $(bpappend_DEPENDENCIES) 
-	@rm -f bpappend$(EXEEXT)
-	$(bpappend_LINK) $(bpappend_OBJECTS) $(bpappend_LDADD) $(LIBS)
-bpgettime$(EXEEXT): $(bpgettime_OBJECTS) $(bpgettime_DEPENDENCIES) 
-	@rm -f bpgettime$(EXEEXT)
-	$(bpgettime_LINK) $(bpgettime_OBJECTS) $(bpgettime_LDADD) $(LIBS)
-bpsplit$(EXEEXT): $(bpsplit_OBJECTS) $(bpsplit_DEPENDENCIES) 
-	@rm -f bpsplit$(EXEEXT)
-	$(bpsplit_LINK) $(bpsplit_OBJECTS) $(bpsplit_LDADD) $(LIBS)
+list_methods$(EXEEXT): $(list_methods_OBJECTS) $(list_methods_DEPENDENCIES) 
+	@rm -f list_methods$(EXEEXT)
+	$(list_methods_LINK) $(list_methods_OBJECTS) $(list_methods_LDADD) $(LIBS)
+list_methods_nompi$(EXEEXT): $(list_methods_nompi_OBJECTS) $(list_methods_nompi_DEPENDENCIES) 
+	@rm -f list_methods_nompi$(EXEEXT)
+	$(list_methods_nompi_LINK) $(list_methods_nompi_OBJECTS) $(list_methods_nompi_LDADD) $(LIBS)
+list_methods_readonly$(EXEEXT): $(list_methods_readonly_OBJECTS) $(list_methods_readonly_DEPENDENCIES) 
+	@rm -f list_methods_readonly$(EXEEXT)
+	$(list_methods_readonly_LINK) $(list_methods_readonly_OBJECTS) $(list_methods_readonly_LDADD) $(LIBS)
+list_methods_readonly_nompi$(EXEEXT): $(list_methods_readonly_nompi_OBJECTS) $(list_methods_readonly_nompi_DEPENDENCIES) 
+	@rm -f list_methods_readonly_nompi$(EXEEXT)
+	$(list_methods_readonly_nompi_LINK) $(list_methods_readonly_nompi_OBJECTS) $(list_methods_readonly_nompi_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -476,23 +517,29 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
-bpappend-bpappend.o: bpappend.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpappend_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpappend-bpappend.o `test -f 'bpappend.c' || echo '$(srcdir)/'`bpappend.c
+list_methods-list_methods.o: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods-list_methods.o `test -f 'list_methods.c' || echo '$(srcdir)/'`list_methods.c
+
+list_methods-list_methods.obj: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods-list_methods.obj `if test -f 'list_methods.c'; then $(CYGPATH_W) 'list_methods.c'; else $(CYGPATH_W) '$(srcdir)/list_methods.c'; fi`
+
+list_methods_nompi-list_methods.o: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_nompi_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_nompi-list_methods.o `test -f 'list_methods.c' || echo '$(srcdir)/'`list_methods.c
 
-bpappend-bpappend.obj: bpappend.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpappend_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpappend-bpappend.obj `if test -f 'bpappend.c'; then $(CYGPATH_W) 'bpappend.c'; else $(CYGPATH_W) '$(srcdir)/bpappend.c'; fi`
+list_methods_nompi-list_methods.obj: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_nompi_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_nompi-list_methods.obj `if test -f 'list_methods.c'; then $(CYGPATH_W) 'list_methods.c'; else $(CYGPATH_W) '$(srcdir)/list_methods.c'; fi`
 
-bpgettime-bpgettime.o: bpgettime.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpgettime_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpgettime-bpgettime.o `test -f 'bpgettime.c' || echo '$(srcdir)/'`bpgettime.c
+list_methods_readonly-list_methods.o: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_readonly_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_readonly-list_methods.o `test -f 'list_methods.c' || echo '$(srcdir)/'`list_methods.c
 
-bpgettime-bpgettime.obj: bpgettime.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpgettime_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpgettime-bpgettime.obj `if test -f 'bpgettime.c'; then $(CYGPATH_W) 'bpgettime.c'; else $(CYGPATH_W) '$(srcdir)/bpgettime.c'; fi`
+list_methods_readonly-list_methods.obj: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_readonly_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_readonly-list_methods.obj `if test -f 'list_methods.c'; then $(CYGPATH_W) 'list_methods.c'; else $(CYGPATH_W) '$(srcdir)/list_methods.c'; fi`
 
-bpsplit-bpsplit.o: bpsplit.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpsplit_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpsplit-bpsplit.o `test -f 'bpsplit.c' || echo '$(srcdir)/'`bpsplit.c
+list_methods_readonly_nompi-list_methods.o: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_readonly_nompi_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_readonly_nompi-list_methods.o `test -f 'list_methods.c' || echo '$(srcdir)/'`list_methods.c
 
-bpsplit-bpsplit.obj: bpsplit.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpsplit_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpsplit-bpsplit.obj `if test -f 'bpsplit.c'; then $(CYGPATH_W) 'bpsplit.c'; else $(CYGPATH_W) '$(srcdir)/bpsplit.c'; fi`
+list_methods_readonly_nompi-list_methods.obj: list_methods.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(list_methods_readonly_nompi_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_methods_readonly_nompi-list_methods.obj `if test -f 'list_methods.c'; then $(CYGPATH_W) 'list_methods.c'; else $(CYGPATH_W) '$(srcdir)/list_methods.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -698,6 +745,7 @@ 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/list_methods/list_methods.c b/utils/list_methods/list_methods.c
new file mode 100644
index 0000000..7ab48a7
--- /dev/null
+++ b/utils/list_methods/list_methods.c
@@ -0,0 +1,427 @@
+/*
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS list_methods utility
+ *  list available 
+ *    write methods
+ *    read methods
+ *    transform methods
+ *
+ * This is a sequential program but compiled with MPI to use libadios.a
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <getopt.h>
+#include <errno.h>
+
+#include <math.h>     // NAN
+#include <libgen.h>   // basename
+#include <regex.h>    // regular expression matching
+#include <fnmatch.h>  // shell pattern matching
+
+#include "core/adios_internals.h" // write hooks and adios_transport_struct
+#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"
+
+
+int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype);
+
+
+#ifdef WRITE
+static struct adios_transport_struct * adios_transports = 0;
+#endif
+static struct adios_read_hooks_struct * adios_read_hooks = 0;
+
+int main (int argc, char ** argv) {
+    int  rank, size, i;
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_rank(comm,&rank);
+    MPI_Comm_size(comm,&size);
+
+
+#ifdef WRITE
+    adios_init_transports (&adios_transports);
+#endif
+    adios_read_hooks_init (&adios_read_hooks);
+    adios_transform_read_init();
+
+    if(rank==0) {
+
+#ifdef WRITE
+        // print all write methods
+        printf ("Available write methods (in XML <method> element or in adios_select_method()):\n");
+        for (i = 0; i < ADIOS_METHOD_COUNT; i++) {    
+            if (adios_transports[i].method_name) {
+                printf("    \"%s\"\n", adios_transports[i].method_name);
+            }
+        }
+#endif
+
+        printf ("Available read methods (constants after #include \"adios_read.h\"):\n");
+        for (i = 0; i < ADIOS_READ_METHOD_COUNT; i++) {    
+            if (adios_read_hooks[i].method_name) {
+                printf("    %s (=%d)\n", adios_read_hooks[i].method_name, i);
+            }
+        }
+
+        printf ("Available data transformation methods (in XML transform tags in <var> elements):\n");
+        for (i = (int)adios_transform_none; i < num_adios_transform_types; i++) {    
+            if (adios_transform_is_implemented((enum ADIOS_TRANSFORM_TYPE)i)) {
+            printf("    \"%s\"\t: %s\n", 
+                    adios_transform_plugin_primary_xml_alias((enum ADIOS_TRANSFORM_TYPE)i),
+                    adios_transform_plugin_desc((enum ADIOS_TRANSFORM_TYPE)i));
+            }
+        }
+    }
+
+    MPI_Barrier(comm);
+    MPI_Finalize();
+    return(0);
+}
+
+//check whether or not s+c goes over the global bound of v
+//input:
+//loc (tell you whether the overflow occurs, var definition or read/write)
+//v (var info)
+//s (offsets array)
+//c (chunk block / local bounds array)
+
+void checkOverflow(int loc, ADIOS_VARINFO* v, uint64_t* s, uint64_t* c) {
+    int j;
+    for(j=0; j<v->ndim; j++){
+        if(s[j]+c[j]>v->dims[j]){
+            if(loc==0)
+                printf("in define: ");
+            else //loc == 1
+                printf("in read/write: ");
+            printf("bound overflow happened. use debug mode\n");
+        }
+    }
+}
+
+//tell you what the size per element is based on the type
+//input:
+//adiosvartype (variable type structure)
+//elemsize (pointer to the element size that you should set)
+//output:
+//tells you whether or not the adiosvartype is known.
+
+int getTypeInfo( enum ADIOS_DATATYPES adiosvartype, int* elemsize){
+
+    switch(adiosvartype) {
+    case adios_unsigned_byte:
+        *elemsize = 1;
+        break;
+    case adios_byte:
+        *elemsize = 1;
+        break;
+    case adios_string:
+        *elemsize = 1;
+        break;
+
+    case adios_unsigned_short:
+        *elemsize = 2;
+        break;
+    case adios_short:
+        *elemsize = 2;
+        break;
+
+    case adios_unsigned_integer:
+        *elemsize = 4;
+        break;
+    case adios_integer:
+        *elemsize = 4;
+        break;
+
+    case adios_unsigned_long:
+        *elemsize = 8;
+        break;
+    case adios_long:
+        *elemsize = 8;
+        break;
+
+    case adios_real:
+        *elemsize = 4;
+        break;
+
+    case adios_double:
+        *elemsize = 8;
+        break;
+
+    case adios_complex:
+        *elemsize = 8;
+        break;
+
+    case adios_double_complex:
+        *elemsize = 16;
+        break;
+
+    case adios_long_double: // do not know how to print
+        //*elemsize = 16;
+    default:
+        return 1;
+    }
+    return 0;
+}
+
+
+//advance s by "by" number of elements.
+//NOTE: you have to first make sure "by" doesn't go over "s" yourself. The function doesn't check this. If not, it could lead to error.
+//input:
+//v (variable info pointer)
+//s (offset array pointer to start from)
+//by (by how much elements do you want to advance?)
+//rank (rank of your process)
+
+void rS(ADIOS_VARINFO* v, uint64_t* s, uint64_t by, int rank){
+
+    int q;
+    uint64_t bulk = 1;
+
+    for(q=1; q<v->ndim; q++)
+        bulk *= v->dims[q];
+
+    for(q=0; q<v->ndim; q++){
+
+        //if(bulk == 0)
+        //break;
+
+        if(by == 0)
+            break;
+
+        uint64_t inc = by/bulk;
+
+        if(inc >= 1){
+
+            if(s[q]+inc<v->dims[q]){
+                s[q] += inc;
+            }else{
+                //s[q-1]++;
+
+                uint64_t r = 1;
+                while(1){
+                    if(s[q-r]+1 < v->dims[q-r]){
+                        s[q-r]++;
+                        break;
+                    }else{
+                        s[q-r] = 0;
+                        r++;
+                    }
+                }
+
+                uint64_t uinc = v->dims[q]-s[q];
+                uint64_t new_inc = inc - uinc;
+                s[q] = new_inc;
+            }
+            by -= inc*bulk;
+
+        }
+
+
+        if(q+1<v->ndim)
+            bulk /= v->dims[q+1];
+    }
+
+}
+
+
+//set chunk array block "c" based on the advised chunk_size
+//NOTE: c has to be all 1's; otherwise, there would be error.
+//input:
+//chunk_size (advised chunk_size)
+//v (variable info pointer)
+//c (chunk array block you want to set)
+
+void calcC(uint64_t chunk_size, ADIOS_VARINFO* v, uint64_t* c){
+    int i;
+    uint64_t tot = 1;
+    uint64_t t;
+    for(i=v->ndim-1; i>=0; i--){
+
+        if(v->dims[i]*tot<=chunk_size){
+            c[i] = v->dims[i];
+            tot *= v->dims[i];
+        }else{
+            t = chunk_size/tot;
+            c[i] = t;
+            break;
+        }
+    }
+
+}
+
+
+//Calculate rough best estimate for chunk_size
+//Input:
+//total_size (total number of elements in the array)
+//mne (maximum number of elements per for the chunk_size)
+//np (number of cores you have)
+//Output:
+//chunk_size (in terms of the number of elements)
+
+uint64_t calcChunkSize(uint64_t total_size, uint64_t mne, int np){
+
+    uint64_t chunk_size = 0;
+    if((total_size/np) <= mne)
+        chunk_size = total_size/np;
+    else
+        chunk_size = mne;
+
+    if(chunk_size<1)
+        chunk_size = 1;
+
+    return chunk_size;
+
+}
+
+//based on the the theoretical c you want to use, this function gives the real c, "uc" that you can use for the local bounds,
+//without going out of the global bounds, starting from offset s
+//NOTE: uc has to be all 1's
+//Input:
+//v (variable info pointer)
+//s (offset pointer)
+//c (chunk array block you want to use)
+//uc (real chunk array calculated that you can use as local bounds)
+//chunk_size (basically the product of dimensions of c)
+//Output:
+//remain_chunk (the number of elements still left to process after you process uc block of elements)
+
+uint64_t checkBound(ADIOS_VARINFO* v, uint64_t* s, uint64_t* c, uint64_t* uc, uint64_t chunk_size){
+    int i;
+    uint64_t remain_chunk = chunk_size;
+    int used_chunk = 1;
+    for(i=v->ndim-1;i>=0;i--){
+        if(s[i]+c[i]-1>=v->dims[i]){
+            uc[i] = v->dims[i]-s[i];
+            break;
+        }
+        uc[i] = c[i];
+    }
+
+    int j;
+
+    for(j=0; j<v->ndim; j++)
+        used_chunk *= uc[j];
+    remain_chunk -= used_chunk;
+
+    return remain_chunk;
+
+}
+
+
+//copy elements from "from" to "to"
+
+void arrCopy(uint64_t* from, uint64_t* to){
+    int i;
+    for(i=0; i<10; i++)
+        to[i] = from[i];
+}
+
+
+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);
+}
+
+
+int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype)
+{
+    if (data == NULL) {
+        printf ( "null ");
+        return 0;
+    }
+    // print next data item into vstr
+    switch(adiosvartype) {
+        case adios_unsigned_byte:
+            printf ("%hhu", ((unsigned char *) data)[item]);
+            break;
+        case adios_byte:
+            printf ("%hhd", ((signed char *) data)[item]);
+            break;
+        case adios_string:
+            printf ("\"%s\"", ((char *) data)+item);
+            break;
+
+        case adios_unsigned_short:
+            printf ("%hu", ((unsigned short *) data)[item]);
+            break;
+        case adios_short:
+            printf ("%hd", ((signed short *) data)[item]);
+            break;
+
+        case adios_unsigned_integer: 
+            printf ("%u", ((unsigned int *) data)[item]);
+            break;
+        case adios_integer:    
+            printf ("%d", ((signed int *) data)[item]);
+            break;
+
+        case adios_unsigned_long:
+            printf ("%llu", ((unsigned long long *) data)[item]);
+            break;
+        case adios_long:        
+            printf ("%lld", ((signed long long *) data)[item]);
+            break;
+
+        case adios_real:
+            printf ("%g", ((float *) data)[item]);
+            break;
+
+        case adios_double:
+            printf ("%g", ((double *) data)[item]);
+            break;
+
+
+        case adios_long_double:
+            //printf ("%g ", ((double *) data)[item]);
+            printf ("????????");
+            break;
+
+
+        case adios_complex:
+            printf ("(%g,i%g)", ((float *) data)[2*item], ((float *) data)[2*item+1]);
+            break;
+
+        case adios_double_complex:
+            printf ("(%g,i%g)", ((double *) data)[2*item], ((double *) data)[2*item+1]);
+            break;
+
+        case adios_unknown:
+            break;
+    } // end switch
+    return 0;
+}
+
diff --git a/utils/skel/CMakeLists.txt b/utils/skel/CMakeLists.txt
index a943792..ee9eaf4 100644
--- a/utils/skel/CMakeLists.txt
+++ b/utils/skel/CMakeLists.txt
@@ -7,12 +7,12 @@ install(PROGRAMS bin/skel bin/set_method.sh bin/skel_extract.py bin/skel_cat.py
 
 install(FILES lib/adios.py 
 	lib/argparse.py 
-    lib/skel_bpls.py
-    lib/skel_bpy.py
+	lib/skel_bpls.py
+	lib/skel_bpy.py
 	lib/skel_install.py 
 	lib/skel_makefile.py
 	lib/skel_params.py
-    lib/skel_replay.py
+	lib/skel_replay.py
 	lib/skel_settings.py 
 	lib/skel_source.py 
 	lib/skel_submit.py 
@@ -26,15 +26,18 @@ install(FILES lib/adios.py
 install(FILES etc/templates/Makefile.default.tpl
 	etc/templates/submit_sith.tpl
 	etc/templates/submit_jaguar.tpl
-    etc/templates/Makefile.tmpl
-    etc/templates/source_write_c.tmpl
-    etc/templates/source_write_fortran.tmpl
-    etc/templates/xml.tmpl
-    etc/templates/replay_bp.tmpl
-    etc/templates/replay_yaml.tmpl
+	etc/templates/Makefile.tmpl
+	etc/templates/source_write_c.tmpl
+	etc/templates/source_write_fortran.tmpl
+        etc/templates/submit_sith.tmpl
+	etc/templates/xml.tmpl
+	etc/templates/replay_bp.tmpl
+	etc/templates/replay_yaml.tmpl
 	DESTINATION ${prefix}/etc/skel/templates)
 
 
+
+
 #install(FILES etc/settings etc/compiler_fragment.mk
 #	etc/templates/Makefile.default.tpl
 #	etc/templates/submit_jaguar.tpl
diff --git a/utils/skel/Makefile.am b/utils/skel/Makefile.am
index 90894e5..6fa386a 100644
--- a/utils/skel/Makefile.am
+++ b/utils/skel/Makefile.am
@@ -27,6 +27,9 @@ dist_pythonlib_DATA=\
     lib/skel_settings.py \
     lib/skel_source.py \
     lib/skel_submit.py \
+    lib/skel_suite.py \
+    lib/skel_template.py \
+    lib/skel_test_plan.py \
     lib/skel_xml.py \
     lib/skelconf.py \
     lib/skel_have_adios_timing.py \
@@ -38,13 +41,34 @@ dist_template_DATA=\
     etc/templates/Makefile.default.tpl\
 	etc/templates/submit_sith.tpl\
 	etc/templates/submit_nautilus.tpl\
-	etc/templates/submit_jaguar.tpl
+	etc/templates/submit_jaguar.tpl \
+        etc/templates/create_suite.tmpl \
+        etc/templates/Makefile.tmpl \
+        etc/templates/replay_bp.tmpl \
+        etc/templates/replay.tmpl \
+        etc/templates/replay_yaml.tmpl \
+        etc/templates/source_write_c.tmpl \
+        etc/templates/source_write_fortran.tmpl \
+        etc/templates/submit_nautilus.tmpl \
+        etc/templates/submit_sith.tmpl \
+        etc/templates/xml.tmpl
+
 
 EXTRA_DIST=etc/settings \
            etc/templates/Makefile.default.tpl \
            etc/templates/submit_jaguar.tpl \
            etc/templates/submit_sith.tpl \
            etc/templates/submit_nautilus.tpl \
+           etc/templates/Makefile.tmpl \
+           etc/templates/create_suite.tmpl \
+           etc/templates/replay_bp.tmpl \
+           etc/templates/replay.tmpl \
+           etc/templates/replay_yaml.tmpl \
+           etc/templates/source_write_c.tmpl \
+           etc/templates/source_write_fortran.tmpl \
+           etc/templates/submit_nautilus.tmpl \
+           etc/templates/submit_sith.tmpl \
+           etc/templates/xml.tmpl \
            lib/skel_have_adios_timing.py.in
            ##etc/compiler_fragment.mk 
 
diff --git a/utils/skel/Makefile.in b/utils/skel/Makefile.in
index dbce5b3..09a3f91 100644
--- a/utils/skel/Makefile.in
+++ b/utils/skel/Makefile.in
@@ -51,7 +51,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -62,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -226,9 +229,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -295,6 +304,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
@@ -396,6 +409,9 @@ dist_pythonlib_DATA = \
     lib/skel_settings.py \
     lib/skel_source.py \
     lib/skel_submit.py \
+    lib/skel_suite.py \
+    lib/skel_template.py \
+    lib/skel_test_plan.py \
     lib/skel_xml.py \
     lib/skelconf.py \
     lib/skel_have_adios_timing.py \
@@ -406,13 +422,33 @@ dist_template_DATA = \
     etc/templates/Makefile.default.tpl\
 	etc/templates/submit_sith.tpl\
 	etc/templates/submit_nautilus.tpl\
-	etc/templates/submit_jaguar.tpl
+	etc/templates/submit_jaguar.tpl \
+        etc/templates/create_suite.tmpl \
+        etc/templates/Makefile.tmpl \
+        etc/templates/replay_bp.tmpl \
+        etc/templates/replay.tmpl \
+        etc/templates/replay_yaml.tmpl \
+        etc/templates/source_write_c.tmpl \
+        etc/templates/source_write_fortran.tmpl \
+        etc/templates/submit_nautilus.tmpl \
+        etc/templates/submit_sith.tmpl \
+        etc/templates/xml.tmpl
 
 EXTRA_DIST = etc/settings \
            etc/templates/Makefile.default.tpl \
            etc/templates/submit_jaguar.tpl \
            etc/templates/submit_sith.tpl \
            etc/templates/submit_nautilus.tpl \
+           etc/templates/Makefile.tmpl \
+           etc/templates/create_suite.tmpl \
+           etc/templates/replay_bp.tmpl \
+           etc/templates/replay.tmpl \
+           etc/templates/replay_yaml.tmpl \
+           etc/templates/source_write_c.tmpl \
+           etc/templates/source_write_fortran.tmpl \
+           etc/templates/submit_nautilus.tmpl \
+           etc/templates/submit_sith.tmpl \
+           etc/templates/xml.tmpl \
            lib/skel_have_adios_timing.py.in
 
 all: all-recursive
diff --git a/utils/skel/bin/skel b/utils/skel/bin/skel
index 08828bd..29640e7 100755
--- a/utils/skel/bin/skel
+++ b/utils/skel/bin/skel
@@ -23,6 +23,8 @@ import skel_params
 import skel_replay
 import skel_source
 import skel_submit
+import skel_suite
+import skel_template
 import skel_xml
 
 def get_parser():
@@ -35,17 +37,17 @@ def get_parser():
 Skel: Create, run and analyze skeletal I/O applications
 -------------------------------------------------------
 Available subcommands include:
-    skel install
     skel help
     skel makefile
     skel params
+    skel replay
     skel source
     skel submit
     skel xml
         
     Use skel help <subcommand> to see detailed options for each subcommand.''')
     parser.add_argument ('subcommand', metavar='subcommand', help='Skel command to execute')
-    parser.add_argument ('project', metavar='project', help='Name of the skel project')
+    #parser.add_argument ('project', metavar='project', help='Name of the skel project')
     #parser.add_argument ('-g', '--group', help='adios group (only valid for skel params)')
 
     return parser
@@ -54,35 +56,73 @@ Available subcommands include:
 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':
-        return 0;
+        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 
+        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)
+        elif sys.argv[2] == 'params':
+            sys.argv = ["skel", "params", "junk", "-h"]
+            skel_params.generate_param_file_with_args (None, 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)
+        elif sys.argv[2] == 'submit':
+            sys.argv = ["skel", "submit", "junk", "-h"]
+            skel_submit.generate_submit_scripts_with_args (parser)
+        elif sys.argv[2] == 'xml':
+            sys.argv = ["skel", "xml", "junk", "-h"]
+        else:
+            print "Unknown help topic" 
+            exit(1)
 
     #args = parse_command_line()
-    parser = get_parser()
     args, unknown = parser.parse_known_args()
 
     # ignore .xml suffix if used (tab completion)
-    if args.project and args.project.endswith (".xml"):
-        args.project = args.project[:-4]
+    #if args.project and args.project.endswith (".xml"):
+    #    args.project = args.project[:-4]
 
     if args.subcommand == 'install':
         return 0
 
+    if args.subcommand == 'template':
+        skel_template.fill_template (parser)
+        return 0
+
     if args.subcommand == 'xml':
-        skel_xml.create_skel_xml (args.project, parser)
+        skel_xml.create_skel_xml (parser)
         return 0
 
     if args.subcommand == 'replay':
         skel_replay.do_replay_with_args (parser)
         return 0
 
-    try:
-        config = adios.adiosConfig (args.project + '_skel.xml')
-    except (IOError):
-        print "Error reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
-        return 1
+    if args.subcommand == 'suite':
+        skel_suite.gen_suite_with_args (parser)
+        return 0
+
+
+    # Decided to push this further down rather than deal with increasingly
+    # complicated landscape of which subcommands do or don't require
+    # a project or an xml file.
+    #try:
+    #    config = adios.adiosConfig (args.project + '_skel.xml')
+    #except (IOError):
+    #    print "XXError reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+    #    return 1
 
     if args.subcommand == 'params':
         #outfilename = args.project + '_params.xml'
@@ -93,19 +133,19 @@ def main(argv=None):
             #return 999
 
         #skel_params.generate_param_file (args.project, outfilename, config, args.group)
-        skel_params.generate_param_file_with_args (config, parser)
+        skel_params.generate_param_file_with_args (parser)
         return 0
     
     
     if args.subcommand == 'source':
         #skel_source.create_sources (params, config, args.project)
-        skel_source.create_sources_with_args (config, parser)
+        skel_source.create_sources_with_args (parser)
         return 0
 
 
     if args.subcommand == 'makefile':
         #skel_makefile.generate_makefiles (params, config)
-        skel_makefile.generate_makefiles_with_args (config, parser)
+        skel_makefile.generate_makefiles_with_args (parser)
         return 0
 
 
diff --git a/utils/skel/etc/Makefile.in b/utils/skel/etc/Makefile.in
index f0c7034..f49cc68 100644
--- a/utils/skel/etc/Makefile.in
+++ b/utils/skel/etc/Makefile.in
@@ -48,7 +48,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -59,6 +61,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -181,9 +184,15 @@ FC = @MPIFC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -250,6 +259,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/skel/etc/templates/Makefile.tmpl b/utils/skel/etc/templates/Makefile.tmpl
new file mode 100644
index 0000000..0cd4e94
--- /dev/null
+++ b/utils/skel/etc/templates/Makefile.tmpl
@@ -0,0 +1,19 @@
+
+#if $bpy.get_language() == 'fortran' or $bpy.get_language() == 'Fortran' #
+${project}_skel_checkpoint: ${project}_skel_group1.f90
+	mpif90 `adios_config -fc` ${project}_skel_group1.f90 -o ${project}_skel_group1 `adios_config -fl` -L~/adios-github/adios-install/lib/skel -lskel
+
+${project}_skel_group1.f90: ${project}.yaml
+	skel xml ${project} -f -y ${project}.yaml
+	skel source ${project} #if $noxml#--noxml #end if #-f -y ${project}.yaml
+#else #
+${project}_skel_checkpoint: ${project}_skel_group1.c
+	mpicc `adios_config -c` ${project}_skel_group1.c -o ${project}_skel_group1 `adios_config -l` -L~/adios-github/adios-install/lib/skel -lskel
+
+${project}_skel_group1.c: ${project}.yaml
+	skel xml ${project} -f -y ${project}.yaml
+	skel source ${project} #if $noxml#--noxml #end if #-f -y ${project}.yaml
+#end if
+
+
+
diff --git a/utils/skel/etc/templates/create_suite.tmpl b/utils/skel/etc/templates/create_suite.tmpl
new file mode 100644
index 0000000..18edf2f
--- /dev/null
+++ b/utils/skel/etc/templates/create_suite.tmpl
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+#for test in $test_plan.get_tests():
+<%= '#####Start Test#####' %>
+mkdir $test.get_subdir()
+pushd $test.get_subdir()
+
+echo "$test.to_yaml()" > test.yaml
+
+skel template -y test.yaml -t ../writer.yaml.in -o writer.yaml
+skel replay writer -f -y writer.yaml
+popd
+<%= '#####End Test#####' %>
+
+#end for
diff --git a/utils/skel/etc/templates/replay.tmpl b/utils/skel/etc/templates/replay.tmpl
new file mode 100644
index 0000000..8ffc882
--- /dev/null
+++ b/utils/skel/etc/templates/replay.tmpl
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+#bootstrap a skeletal app using a yaml file
+
+
diff --git a/utils/skel/etc/templates/replay_bp.tmpl b/utils/skel/etc/templates/replay_bp.tmpl
new file mode 100644
index 0000000..30555a2
--- /dev/null
+++ b/utils/skel/etc/templates/replay_bp.tmpl
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+set -e
+
+#bootstrap a skeletal app using a bp file
+
+skeldump ${bpfile} > ${yamlfile}
+
+#if not $noxml
+skel xml ${project} #if $force #-f #end if#-y ${yamlfile}
+#end if
+
+skel makefile ${project} #if $force #-f #end if#-y ${yamlfile}
+
+skel submit ${project} #if $force #-f #end if#-y ${yamlfile}
+
+make
+
diff --git a/utils/skel/etc/templates/replay_yaml.tmpl b/utils/skel/etc/templates/replay_yaml.tmpl
new file mode 100644
index 0000000..119dd6a
--- /dev/null
+++ b/utils/skel/etc/templates/replay_yaml.tmpl
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+#bootstrap a skeletal app using a yaml file
+
+skel xml ${project} #if $force #-f #end if#-y ${yamlfile}
+
+skel makefile ${project} #if $force #-f #end if# #if $noxml # --noxml #end if#-y ${yamlfile}
+
+make
+
diff --git a/utils/skel/etc/templates/source_write_c.tmpl b/utils/skel/etc/templates/source_write_c.tmpl
new file mode 100644
index 0000000..73eaf5a
--- /dev/null
+++ b/utils/skel/etc/templates/source_write_c.tmpl
@@ -0,0 +1,207 @@
+## Cheetah template for skeletal writer in C
+## See the Cheetah documentation for proper syntax
+
+//
+// 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();
+
+#if $noxml
+adios_init_noxml (MPI_COMM_WORLD);
+#else
+adios_init ("${project}_skel.xml", MPI_COMM_WORLD);
+#end if
+
+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
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+$v.get_c_type() $v.get_safe_name();
+#end for
+
+// Skel variables for global array management
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+int $sv [$bpy.get_num_procs()] = {$v.get_offset_values_str($sv)};
+    #end for
+#end for
+
+
+// Array declarations
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+$v.get_c_type() * $v.get_safe_name();
+#end for
+
+#if $noxml
+int64_t skel_adios_group;
+
+int color = skel_mpi_rank / 2;
+
+adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, $bpy.get_buf_size_mb());
+adios_declare_group (&skel_adios_group, "${bpy.get_group_name()}", "", adios_flag_no);
+
+char paramstring[<%= len(self.bpy.get_parameters()) + 64 %>];
+//sprintf (paramstring, "color:%i;%s", color, "$bpy.get_parameters()");
+sprintf (paramstring, "%s", "$bpy.get_parameters()");
+adios_select_method (skel_adios_group, "$bpy.get_method()", paramstring, "");
+
+## This loop generates any needed skel auxiliary variables
+#for v in $bpy.get_vars():
+    #if $v.has_global_bounds():
+        #for sv in $v.get_offset_vars()
+adios_define_var (skel_adios_group, "$sv", "", adios_integer, "", "", "");
+        #end for
+    #end if
+#end for
+
+## This loop handles the user defined variables
+    #for v in $bpy.get_vars():
+adios_define_var (skel_adios_group, "$v.get_name()", "", $v.get_adios_type(), "$v.get_dims_str()", "$v.get_global_dims_str()", "$v.get_offset_vars_str()");
+    #end for
+
+
+#end if
+
+int skel_steps = ${bpy.get_steps()};
+int step;
+for (step = 0; step < skel_steps; step++)
+{
+
+  // Scalar Initializations
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+    #if not v.get_value(): 
+    $v.get_safe_name = 16; <% sys.stderr.write ('No value found for variable "%s", using default value.\n' % v.get_name()) %>
+    #else:
+    $v.get_safe_name = $v.get_value();
+    #end if
+#end for
+ 
+ 
+
+  // Array Allocation & Initializations
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    $v.get_safe_name() = ($v.get_c_type()*) malloc (#echo '*'.join (str(x) for x in $v.get_dims() )#*sizeof ($v.get_c_type()));
+    for (skel_i = 0; skel_i < #echo '*'.join (str(x) for x in $v.get_dims() )#; skel_i++)
+        $v.get_safe_name()[skel_i] = ($v.get_c_type()) skel_mpi_rank;
+#end for
+
+##fields_FieldE_x = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+##for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+##    fields_FieldE_x[skel_i] = (float) skel_mpi_rank;
+
+
+// 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, "${bpy.get_group_name()}", "out_${bpy.get_group_name()}_write.bp", "w", comm);
+skel_open_timer += MPI_Wtime();
+
+// Time the writes
+skel_access_timer -= MPI_Wtime();
+
+// Set the adios group size
+adios_groupsize =
+#for v in $bpy.get_vars():
+                     $v.get_size() +
+#end for
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+                     4 + 
+    #end for
+#end for
+                     0;
+
+adios_group_size (adios_handle, adios_groupsize, &skel_total_size);
+
+
+// Write each variable
+// First the scalars
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+    adios_write (adios_handle, "$v.get_name", &$v.get_safe_name());
+#end for
+
+// Next Skel variables
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+    adios_write (adios_handle, "$sv", &($sv [skel_mpi_rank] ) );
+    #end for
+#end for
+
+// Now the arrays
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    adios_write (adios_handle, "$v.get_name", $v.get_safe_name());
+#end for
+
+
+// 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 (skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer);
+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
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    free ($v.get_safe_name);
+#end for
+
+} // End for step = 0 to skel_steps - 1
+
+
+
+// Clean up
+adios_finalize(0);
+MPI_Finalize();
+}
diff --git a/utils/skel/etc/templates/source_write_fortran.tmpl b/utils/skel/etc/templates/source_write_fortran.tmpl
new file mode 100644
index 0000000..88f7cb9
--- /dev/null
+++ b/utils/skel/etc/templates/source_write_fortran.tmpl
@@ -0,0 +1,216 @@
+## Cheetah template for skeletal writer in fortran
+## See the Cheetah documentation for proper syntax
+
+!!
+!! Automatically generated by skel. Modify at your own risk.
+
+
+program skel
+
+
+  use mpi
+  use adios_write_mod
+  IMPLICIT NONE
+
+  real*8 :: skel_init_timer = 0, &
+    skel_open_timer = 0, &
+    skel_access_timer = 0, &
+    skel_close_timer = 0, &
+    skel_total_timer = 0
+
+  CHARACTER(LEN=128) :: skel_filename
+
+  integer*4 :: skel_mpi_size, skel_mpi_rank, skel_i
+  integer*4 :: error
+  integer*8 :: adios_error
+  integer*8 :: adios_groupsize
+#if $noxml
+  integer*8 :: skel_adios_group
+#end if
+
+  integer :: comm
+
+  integer*8 :: adios_handle, &
+    skel_total_size
+  real*8 :: skel_total_init, skel_total_open, skel_total_access, skel_total_close, skel_total_total
+
+! Scalar declarations
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+  $v.get_fortran_type() :: $v.get_safe_name()
+#end for
+
+! Skel variables for global array management
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+  integer*4 :: $sv ($bpy.get_num_procs())
+    #end for
+#end for
+
+! Array declarations
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+  $v.get_fortran_type(), ALLOCATABLE, DIMENSION(:#for d in range(int($v.get_ndims())-1)#,:#end for#) :: $v.get_safe_name()
+#end for
+
+  call MPI_INIT (error)
+
+! Time the init
+  call MPI_BARRIER (MPI_COMM_WORLD, error)
+  skel_init_timer = skel_init_timer - MPI_Wtime();
+
+#if $noxml
+  call adios_init_noxml (MPI_COMM_WORLD, error)
+#else
+  call adios_init ("${project}_skel.xml", MPI_COMM_WORLD, adios_error)
+#end if
+
+  skel_init_timer = skel_init_timer + MPI_WTIME();
+  call MPI_Comm_rank (MPI_COMM_WORLD, skel_mpi_rank, error)
+  call MPI_Comm_size (MPI_COMM_WORLD, skel_mpi_size, error)
+
+! Initialize the scalars
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+    #if not v.get_value(): 
+    $v.get_safe_name = 16 <% sys.stderr.write ('No value found for variable "%s", using default value.\n' % v.get_name()) %>
+    #else:
+    $v.get_safe_name = $v.get_value()
+    #end if
+#end for
+
+! Initialize Skel variables
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+    $sv = (/ $v.get_offset_values_str($sv) /)
+    #end for
+#end for
+ 
+
+! Initialize the arrays
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    allocate ($v.get_safe_name()(#echo ','.join (str(x) for x in $v.get_dims() )#))
+#end for
+
+  skel_total_timer = skel_total_timer - MPI_Wtime()
+
+ skel_i = 0
+
+
+#if $noxml
+
+call adios_allocate_buffer ($bpy.get_buf_size_mb(), error);
+call adios_declare_group (skel_adios_group, "${bpy.get_group_name()}", "", 1, error);
+call adios_select_method (skel_adios_group, "$bpy.get_method()", "$bpy.get_parameters()", "", error);
+
+## This loop generates any needed skel auxiliary variables
+#for v in $bpy.get_vars():
+    #if $v.has_global_bounds():
+        #for sv in $v.get_offset_vars()
+call adios_define_var (skel_adios_group, "$sv", "", adios_integer, "", "", "", adios_error)
+        #end for
+    #end if
+#end for
+
+## This loop handles the user defined variables
+    #for v in $bpy.get_vars():
+call adios_define_var (skel_adios_group, &
+                       "$v.get_name()", "", &
+                       $v.get_adios_type(), "$v.get_dims_str()", &
+                       "$v.get_global_dims_str()", "$v.get_offset_vars_str()", adios_error)
+    #end for
+
+
+#end if
+
+
+
+ DO
+  skel_i = skel_i + 1
+  IF (skel_i .GT. 1) EXIT
+
+! Time the opens
+  call MPI_Barrier (MPI_COMM_WORLD, error)
+  skel_open_timer = skel_open_timer - MPI_Wtime()
+
+  write (skel_filename, '(I0)') skel_i
+  skel_filename = "out_${bpy.get_group_name()}_write_"//skel_filename//".bp"
+ call MPI_Comm_dup (MPI_COMM_WORLD, comm, error)
+  call adios_open(adios_handle, "${bpy.get_group_name()}", skel_filename, "w", comm, error);
+  skel_open_timer = skel_open_timer + MPI_Wtime()
+
+! Time the writes
+  skel_access_timer = skel_access_timer - MPI_Wtime()
+
+! Set the adios group size
+  adios_groupsize = &
+#for v in $bpy.get_vars():
+                     $v.get_size() + &
+#end for
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+                     4 + &
+    #end for
+#end for
+                     0
+
+  call adios_group_size (adios_handle, adios_groupsize, skel_total_size, error)
+
+! Write each variable
+! First the scalars
+#for v in filter (lambda x: x.get_dims() is None, $bpy.get_vars() ):
+    call adios_write (adios_handle, "$v.get_name", $v.get_safe_name(), error)
+#end for
+
+! Next Skel variables
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    #for sv in $v.get_offset_vars()
+    call adios_write (adios_handle, &
+                      "$sv", &
+                       $sv (skel_mpi_rank+1), &
+                       error)
+    #end for
+#end for
+
+! Now the arrays
+#for v in filter (lambda x: x.get_dims() is not None, $bpy.get_vars() ):
+    call adios_write (adios_handle, "$v.get_name", $v.get_safe_name(), error)
+#end for
+
+
+! Stop timing the writes
+  skel_access_timer = skel_access_timer + MPI_Wtime()
+
+! Time the closes
+  skel_close_timer = skel_close_timer - MPI_Wtime()
+  call adios_close (adios_handle, error)
+  skel_close_timer = skel_close_timer + MPI_Wtime()
+
+ END DO
+
+  skel_total_timer = skel_total_timer + MPI_Wtime()
+
+! Output results
+
+  call skel_write_coarse_xml_data_f (skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer)
+
+  call MPI_Reduce (skel_init_timer, skel_total_init, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
+  call MPI_Reduce (skel_open_timer, skel_total_open, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
+  call MPI_Reduce (skel_access_timer, skel_total_access, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
+  call MPI_Reduce (skel_close_timer, skel_total_close, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, MPI_COMM_WORLD, error)
+  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 (*,*) '**************************'
+    write (*,*) '  Groupsize: ', adios_groupsize
+    write (*,*) '  Open Time: ', skel_total_open
+    write (*,*) 'Access Time: ', skel_total_access
+    write (*,*) ' Close Time: ', skel_total_close
+    write (*,*) ' Total Time: ', skel_total_total
+    write (*,*) '**************************'
+    write (*,*) '\n'
+  endif
+
+! Clean up
+  call adios_finalize(0, error)
+  call MPI_Finalize(error)
+
+end program skel
diff --git a/utils/skel/etc/templates/submit_nautilus.tmpl b/utils/skel/etc/templates/submit_nautilus.tmpl
new file mode 100644
index 0000000..03dec75
--- /dev/null
+++ b/utils/skel/etc/templates/submit_nautilus.tmpl
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Submission script for the $$TARGET$$ target
+# To make changes to this file, edit the appropriate submit_<target>.tpl file in ~/.skel/templates/
+
+#PBS -A $$ACCOUNT$$
+#PBS -N $$JOB_NAME$$
+#PBS -j oe
+#PBS -l walltime=$$WALLTIME$$,ncpus=$$CORES_TOTAL$$1$$
+
+##PBS -W depend=afterany:
+
+#Kludge to get around wrong python version on compute nodes
+export PYTHONPATH=../..:$PYTHONPATH
+
+cd $PBS_O_WORKDIR
+
+date
+
+$$START_TEST$$
+for i in {1..$$ITERATIONS$$}
+do
+echo $$METHOD$$
+$$PRE_RM$$
+./set_method.sh $$METHOD$$ $$APP$$_skel.xml.in $$APP$$_skel.xml 
+mpiexec ./$$EXEC$$
+mv $$APP$$_skel_time.xml $$APP$$_skel_time_${PBS_JOBID}_${i}.xml
+$$POST_RM$$
+done
+
+$$END_TEST$$
+
+
+
diff --git a/utils/skel/etc/templates/submit_sith.tmpl b/utils/skel/etc/templates/submit_sith.tmpl
new file mode 100644
index 0000000..65e2005
--- /dev/null
+++ b/utils/skel/etc/templates/submit_sith.tmpl
@@ -0,0 +1,29 @@
+#import math
+#!/bin/bash
+# Submission script for the $target target
+# To make changes to this file, edit the appropriate submit_<target>.tpl file in ~/.skel/templates/
+
+#PBS -A $account
+#PBS -N $job_name
+#PBS -j oe
+#PBS -l walltime=$walltime,nodes=#echo "%d" % (int (math.ceil( (float($bpy.get_num_procs()) / 32.0) ) ) )#:ppn=32
+#PBS -l gres=widow2
+
+cd \$PBS_O_WORKDIR
+
+date
+
+
+for i in {1..$iteration_count}
+do
+echo $bpy.get_method() 
+##dpre_rm
+rm -rf out*
+./set_method.sh $bpy.get_method() ${project}_skel.xml.in ${project}_skel.xml 
+mpirun -n $bpy.get_num_procs() $executable
+mv skel_time.xml ${project}_skel_time_\${PBS_JOBID}_\${i}.xml
+##dpost_rm
+done
+
+
+
diff --git a/utils/skel/etc/templates/xml.tmpl b/utils/skel/etc/templates/xml.tmpl
new file mode 100644
index 0000000..92c7494
--- /dev/null
+++ b/utils/skel/etc/templates/xml.tmpl
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<adios-config host-language="${bpy.get_language()}">
+  <adios-group name="${bpy.get_group_name()}" coordination-communicator="comm">
+
+    #for v in $bpy.get_vars():
+        #if $v.has_global_bounds():
+            #for sv in $v.get_offset_vars()
+                #if $bpy.get_language() == 'Fortran'
+      <var name="$sv" type="integer*4" dimensions="" />
+                #else
+      <var name="$sv" type="int" dimensions="" />
+                #end if
+            #end for
+        #end if
+    #end for
+
+    #for v in $bpy.get_vars():
+  #if $v.has_global_bounds() #  <global-bounds dimensions="$v.get_global_dims_str()" offsets="$v.get_offset_vars_str()"> #end if
+      <var name="$v.get_name()" type="$v.get_lang_type($bpy.get_language() )" dimensions="$v.get_dims_str()" />
+  #if $v.has_global_bounds() #  </global-bounds> #end if
+    #end for
+  </adios-group>
+
+  <method group="${bpy.get_group_name()}" method="${bpy.get_method()}" />
+  <buffer size-MB="10" allocate-time="now" />
+</adios-config>
+
+
+
diff --git a/utils/skel/lib/skel_bpy.py b/utils/skel/lib/skel_bpy.py
index f7d89a0..5bbf4f7 100755
--- a/utils/skel/lib/skel_bpy.py
+++ b/utils/skel/lib/skel_bpy.py
@@ -13,10 +13,15 @@ class skel_bpy:
 
         #print self.doc
 
+        if self.get_language().lower() == "fortran":
+            flip = True
+        else:
+            flip = False
+
         self.vars = {}
         for v in self.doc['variables']:
             name = v ['name']
-            self.vars [name] = var (name, v)
+            self.vars [name] = var (name, v, flip)
             #print "Added variable %s\n" % name
 
     def get_num_procs (self):
@@ -49,17 +54,118 @@ class skel_bpy:
             return ret_val
         return "POSIX" # default method
 
+    def get_parameters (self):
+        ret_val = self.doc.get ('parameters', None)
+        if ret_val:
+            return ret_val
+        return "" # default parameters 
+
+    def get_buf_size_mb (self):
+        ret_val = self.doc.get ('buf_size_mb', None)
+        if ret_val:
+            return ret_val
+        return "50"
+
 class var:
-    def __init__ (self, name, vardict):
+    def __init__ (self, name, vardict, flip):
         self.name = name
         self.vardict = vardict
+        self.global_dims = None
+
+        if self.is_scalar():
+            # This is a scalar
+            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
+        if flip:
+            if self.vardict.get('dims', None) != None and self.vardict['dims'] != 'scalar':
+                self.vardict['dims'].reverse()
+            if self.vardict.get('decomposition', None) != None:
+                for proc in self.vardict['decomposition']:
+                    proc.reverse()
+            if self.vardict.get('decomp-procs', None) != None:
+                self.vardict['decomp-procs'].reverse()
+            if self.vardict.get('global-dims', None) != None:
+                self.vardict['global-dims'].reverse()
+
+        # We want to accept either the individual blocks of the decomposition
+        # or do a regular decomposition based on given global dims and the
+        # number of procs to split in each dimension
+
+        # Case 1, we are given the individual blocks in vardict['decomposition']
+        if self.get_decomposition() != None:
+            # Calculate global dimensions
+            # Find the global dims by looking for the largest end of block in each dimension 
+            self.global_dims = []
+            for i in range (self.get_ndims() ):
+                self.global_dims.append (max ([x[i][1] for x in self.get_decomposition() ] ) + 1 )
+
+        # Case 2, we are given the global dimensions and decomposition parameters
+        elif self.get_decomp_procs() != None and self.get_global_dims() != None:
+            dp = self.get_decomp_procs()
+            gd = self.get_global_dims()
+
+            # Sanity check
+            if len(dp) != len(gd):
+                print 'Dimensional mismatch, exiting'
+                exit(13)
+            for i in range(len(dp)):
+                #divides evenly
+                if gd[i] % dp[i] != 0:
+                    print 'irregular decomposition not supported, exiting'
+                    exit(17)
+
+            # Calculate individual blocks
+            self.vardict['dims'] = []
+            procs = 1
+            for i in range(len(dp)):
+                self.vardict['dims'].append (gd[i] / dp[i])
+                procs = procs * dp[i]
+
+
+            self.vardict['decomposition'] = []
+            #Assume there is at least one dimension specified
+            for i in range(dp[0]):
+                if len(dp) == 1: #1D
+                    start0 = i * self.vardict['dims'][0]
+                    end0 = (i+1) * self.vardict['dims'][0] - 1
+                    self.vardict['decomposition'].append([[start0,end0]])
+                else:
+                    for j in range(dp[1]):
+                        if len(dp) == 2: #2D
+                            start0 = i * self.vardict['dims'][0]
+                            end0 = (i+1) * self.vardict['dims'][0] - 1
+                            start1 = j * self.vardict['dims'][1]
+                            end1 = (j+1) * self.vardict['dims'][1] - 1
+                            self.vardict['decomposition'].append([[start0,end0],[start1,end1]])
+                        else:
+                            for k in range(dp[2]):
+                                if len(dp) == 2: #3D
+                                    start0 = i * self.vardict['dims'][0]
+                                    end0 = (i+1) * self.vardict['dims'][0] - 1
+                                    start1 = j * self.vardict['dims'][1]
+                                    end1 = (j+1) * self.vardict['dims'][1] - 1
+                                    start2 = k * self.vardict['dims'][2]
+                                    end2 = (k+1) * self.vardict['dims'][2] - 1
+                                    self.vardict['decomposition'].append([[start0,end0],[start1,end1],[start2,end2]])
+                                else:
+                                    print "Failed sanity check, more than 3 dimensions specified"
+                                    exit (13) 
+                        
+        # Case 3, no decomposition given
+        else:
+            #What to do here? PANIC!
+            print "No decomposition found, exiting."
+            exit(11)
+
 
     def get_name (self):
         return self.name
 
     def get_safe_name (self):
         # Remove slashes
-        return '_slash_'.join(self.get_name().split('/'))
+        return 'SLASH'.join(self.get_name().split('/'))
 
     def get_type (self):
         return self.vardict['type']
@@ -72,8 +178,40 @@ class var:
             return self.get_fortran_type()
           
 
-    def get_fortran_type (self):
+    def get_adios_type (self):
+
+        self.ftypes = {
+            'string' : 'adios_string',
+            'byte' : 'adios_byte',
+            'integer*1' : 'adios_byte',
+            'short' : 'adios_short',
+            'integer*2' : 'adios_short',
+            'integer' : 'adios_integer',
+            'integer*4' : 'adios_integer',
+            'long' : 'adios_long',
+            'long long' : 'adios_long',
+            'integer*8' : 'adios_long',
+            'unsigned byte' : 'adios_unsigned_byte',
+            'unsigned integer*1' : 'adios_unsigned_byte',
+            'unsigned short' : 'adios_unsigned_short',
+            'unsigned integer*2' : 'adios_unsigned_short',
+            'unsigned integer' : 'adios_unsigned_integer',
+            'unsigned integer*4' : 'adios_unsigned_integer',
+            'unsigned long' : 'adios_unsigned_long',
+            'unsigned integer*8' : 'adios_unsigned_long',
+            'float' : 'adios_real',
+            'real' : 'adios_real',
+            'real*4' : 'adios_real',
+            'double' : 'adios_double',
+            'real*8' : 'adios_double',
+            'complex' : 'adios_complex',
+            'double complex' : 'adios_double_complex'
+        }
+
+        return self.ftypes.get(self.get_type(), "UNKNOWN_TYPE")
 
+
+    def get_fortran_type (self):
         self.ftypes = {
             'string' : 'string',
             'byte' : 'integer*1',
@@ -145,17 +283,24 @@ class var:
 
         return self.ftypes.get(self.get_type(), "UNKNOWN_TYPE")
 
+    def is_scalar (self):
+        d = self.vardict.get('dims', None)
+        return d == 'scalar'
+
+
     def get_dims (self):
-        if self.vardict['dims'] == 'scalar':
+        d = self.vardict.get('dims', None)
+        if d == None or d == 'scalar':
             return None
         else:
             return self.vardict['dims']
 
     def get_dims_str (self):
-        if self.vardict['dims'] == 'scalar':
+        dims = self.get_dims()
+        if dims == None:
             return ''
         else:
-            return ','.join(str (d) for d in self.vardict['dims'])
+            return ','.join(str (d) for d in dims)
 
     def get_ndims (self):
         if self.get_dims() is None:
@@ -219,13 +364,19 @@ class var:
 
     # This gives the size of a scalar or an array
     def get_size (self):
-        if self.vardict['dims'] == 'scalar':
+        if self.vardict.get ('dims', None) == 'scalar':
             return self.get_unit_size()
         else:
             return "%s * %s" % (self.get_unit_size(), '*'.join (str(x) for x in self.get_dims() ) ) 
 
+    # Okay, so this is pinned to the decomposition data from the yaml file. We'll just take the max value
+    # in each dimension...
     def get_global_dims (self):
-        return self.vardict.get ('global_dims', None)
+        if self.global_dims:
+            return self.global_dims
+
+        return self.vardict.get ('global-dims', None)
+
 
     def get_global_dims_str (self):
         gd = self.get_global_dims()
@@ -234,6 +385,21 @@ class var:
         else:
             return ",".join (str(glob_dim) for glob_dim in gd)
 
+    def get_offset_values_str (self, var_name):
+        dim = int (var_name[-1:] )
+        return ",".join ( [str(x[dim][0]) for x in self.get_decomposition()] )
+
+    # This is a list of var names to represent the global offsets in each dimension
+    def get_offset_vars (self):
+        return ["skel__offset_%s_%i" % (self.get_safe_name(),i) for i in range (self.get_ndims() )]
+
+    def get_offset_vars_str (self):
+        o = self.get_offset_vars()
+        if o is None:
+            return ""
+        else:
+            return ",".join (str(off) for off in o)
+
     def get_offsets (self):
         return self.vardict.get ('offsets', None)
 
@@ -245,7 +411,7 @@ class var:
             return ",".join (str(off) for off in o)
 
     def has_global_bounds (self):
-        return self.get_global_dims() is not None 
+        return self.get_decomposition() is not None 
 
     def get_value (self):
 
@@ -260,6 +426,13 @@ class var:
             return None
         return vals[0]['val']
 
+    def get_decomposition (self):
+        return self.vardict.get ('decomposition', None)
+
+    def get_decomp_procs (self):
+        return self.vardict.get ('decomp-procs', None)
+
+
 def main(argv=None):
     b = skel_bpy ("test.yaml")
     print "Num Procs is %d\n" % b.get_num_procs()
diff --git a/utils/skel/lib/skel_makefile.py b/utils/skel/lib/skel_makefile.py
index b89c305..3085d98 100644
--- a/utils/skel/lib/skel_makefile.py
+++ b/utils/skel/lib/skel_makefile.py
@@ -15,23 +15,33 @@ def pparse_command_line (parent_parser):
                 parents = [parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                add_help=True,
                 description='''\
         skel makefile 
             create a makefile for building a skeletal application''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to store I/O pattern')
     parser.add_argument ('-b', '--bp-file', dest='bpfile', help='bp file to extract I/O pattern')
     parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
+    parser.add_argument ('-n', '--noxml', dest='noxml', action='store_true', help='generate noxml code')
     parser.set_defaults(force=False)
+    parser.set_defaults(noxml=False)
 
     return parser.parse_args()
 
 
 
-def generate_makefiles_with_args (config, parent_parser):
+def generate_makefiles_with_args (parent_parser):
     args = pparse_command_line (parent_parser)
 
+    try:
+        config = adios.adiosConfig (args.project + '_skel.xml')
+    except (IOError):
+        print "XXError reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+        return 1
+
+
     if args.yamlfile:
         generate_makefile_from_yaml (args)
     else:
@@ -69,6 +79,7 @@ def generate_makefile_from_yaml (args):
     t.bpy = bpy
     t.project = args.project
     t.bpfile = args.bpfile
+    t.noxml = args.noxml
     skel_file.write (str(t) )
  
 
diff --git a/utils/skel/lib/skel_params.py b/utils/skel/lib/skel_params.py
index 337f203..08ac257 100644
--- a/utils/skel/lib/skel_params.py
+++ b/utils/skel/lib/skel_params.py
@@ -14,11 +14,12 @@ def pparse_command_line (parent_parser):
                 parents=[parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                #add_help=False,
                 description='''\
         skel params
             create a parameter file to define skeletal application behavior''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-g', '--group', help='adios group')
     parser.add_argument ('-b', '--bpls', help='file containing bpls output')
 
@@ -28,9 +29,16 @@ def pparse_command_line (parent_parser):
     return parser.parse_args()
 
 
-def generate_param_file_with_args (config, parent_parser):
+def generate_param_file_with_args (parent_parser):
     args = pparse_command_line (parent_parser)
-    
+   
+    try:
+        config = adios.adiosConfig (args.project + '_skel.xml')
+    except (IOError):
+        print "XXError reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+        return 1
+
+ 
     outfilename = args.project + '_params.xml'
 
     # Only proceed if outfilename does not already exist, or if -f was used
@@ -38,6 +46,12 @@ def generate_param_file_with_args (config, parent_parser):
         print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
         return 999
 
+    try:
+        config = adios.adiosConfig (args.project + '_skel.xml')
+    except (IOError):
+        print "Error reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+        return 1
+
     generate_param_file (args.project, outfilename, config, args.group, args.bpls)
 
 
@@ -76,23 +90,25 @@ def generate_param_file (app, outfile, config, groupname, bplsfile=None):
 
         for var in group.get_vars():
             if var.is_scalar():
-
-                scalar_value = None
-
-                first_use_name, first_use_dim_num = var.find_first_use () # Get the name and dimension number of the first array that uses this scalar, or None if it is not used
-                if first_use_name is not None:
-                    dims = bpdata.get_dims (first_use_name)
-                    if dims is None:
-                        # Try adding a leading slash to deal with the way that bpls reports variable names without one
-                        dims = bpdata.get_dims ("/%s" % first_use_name)
-                    if dims is not None:
-                        scalar_value = dims[first_use_dim_num]
+                if bplsfile is None:
+                    all_scalars.add ('\n    <scalar name="' + var.get_name() + '" type="' + var.get_type() + '" value="128" />')
+                else:
+                    scalar_value = None
+
+                    first_use_name, first_use_dim_num = var.find_first_use () # Get the name and dimension number of the first array that uses this scalar, or None if it is not used
+                    if first_use_name is not None:
+                        dims = bpdata.get_dims (first_use_name)
+                        if dims is None:
+                            # Try adding a leading slash to deal with the way that bpls reports variable names without one
+                            dims = bpdata.get_dims ("/%s" % first_use_name)
+                        if dims is not None:
+                            scalar_value = dims[first_use_dim_num]
                     
 
-                if scalar_value is None:
-                    scalar_value = 0 # Should be used only for variables that do not appear in any array dimensions
+                    if scalar_value is None:
+                        scalar_value = 0 # Should be used only for variables that do not appear in any array dimensions
 
-                all_scalars.add ('\n    <scalar name="' + var.get_name() + '" type="' + var.get_type() + '" value="%s" />' % scalar_value)
+                    all_scalars.add ('\n    <scalar name="' + var.get_name() + '" type="' + var.get_type() + '" value="%s" />' % scalar_value)
             else:
                 dims = var.get_dimensions()
                 dim_str ='dims="'
diff --git a/utils/skel/lib/skel_replay.py b/utils/skel/lib/skel_replay.py
index 79058e7..dbde945 100644
--- a/utils/skel/lib/skel_replay.py
+++ b/utils/skel/lib/skel_replay.py
@@ -17,15 +17,18 @@ def pparse_command_line (parent_parser):
                 parents = [parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                #add_help=False,
                 description='''\
-        skel makefile 
-            create a makefile for building a skeletal application''')
+        skel replay 
+            Generate an entire skeletal application that duplicates a specified I/O''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to load I/O pattern')
     parser.add_argument ('-b', '--bp-file', dest='bpfile', help='bp file to extract I/O pattern')
     parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source files')
+    parser.add_argument ('-n', '--noxml', dest='noxml', action='store_true', help='generate noxml code')
     parser.set_defaults(force=False)
+    parser.set_defaults(noxml=False)
 
     return parser.parse_args()
 
@@ -84,6 +87,7 @@ def do_replay_from_yaml (args):
     template_file = open (os.path.expanduser("~/.skel/templates/replay_yaml.tmpl"), 'r')
     t = Template(file=template_file)
     t.bpy = bpy
+    t.noxml = args.noxml
 
     # No, I don't like these either.
     t.yamlfile = args.yamlfile
diff --git a/utils/skel/lib/skel_source.py b/utils/skel/lib/skel_source.py
index 4929ae0..6806d5b 100644
--- a/utils/skel/lib/skel_source.py
+++ b/utils/skel/lib/skel_source.py
@@ -646,14 +646,17 @@ def pparse_command_line (parent_parser):
                 parents = [parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                #add_help=False,
                 description='''\
         skel source 
             create source code to access the I/O pattern for the target skeletal application''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
     parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
     parser.set_defaults(force=False)
+    parser.add_argument ('-n', '--noxml', dest='noxml', action='store_true', help='generate noxml code')
+    parser.set_defaults(noxml=False)
 
     return parser.parse_args()
 
@@ -693,16 +696,26 @@ def create_source_from_yaml (args, config):
 
     t.bpy = bpy
     t.project = args.project
+    t.noxml = args.noxml
     skel_file.write (str(t) )
 
 
-def create_sources_with_args (config, parent_parser):
+def create_sources_with_args (parent_parser):
 
     args = pparse_command_line (parent_parser)
 
+    try:
+        config = adios.adiosConfig (args.project + '_skel.xml')
+    except (IOError):
+        print "XXError reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+        return 1
+
+
     if args.yamlfile is not None:
         create_source_from_yaml(args, config)
     else:
+        if args.noxml:
+            print "NOXML generation only supported with yaml input. Generating XML based code."
         create_source_from_xml (args, config)
 
 
diff --git a/utils/skel/lib/skel_submit.py b/utils/skel/lib/skel_submit.py
index 5c406aa..7a57626 100644
--- a/utils/skel/lib/skel_submit.py
+++ b/utils/skel/lib/skel_submit.py
@@ -151,6 +151,13 @@ def generate_submit_scripts_with_args (parent_parser):
 
     args = pparse_command_line (parent_parser)
 
+    try:
+        config = adios.adiosConfig (args.project + '_skel.xml')
+    except (IOError):
+        print "XXError reading " + args.project + "_skel.xml. Try running skel xml " + args.project + " first."
+        return 1
+
+
     if args.yamlfile is not None:
         generate_submit_scripts_from_yaml(args)
     else:
@@ -169,11 +176,12 @@ def pparse_command_line (parent_parser):
                 parents = [parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                #add_help=False,
                 description='''\
         skel source 
             create source code to access the I/O pattern for the target skeletal application''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
     parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
     parser.set_defaults(force=False)
diff --git a/utils/skel/lib/skel_suite.py b/utils/skel/lib/skel_suite.py
new file mode 100644
index 0000000..8dd6e4f
--- /dev/null
+++ b/utils/skel/lib/skel_suite.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+
+import argparse
+import os
+import stat
+import subprocess
+import sys
+
+import adios
+import skelconf
+import skel_bpy
+import skel_settings
+import skel_test_plan
+
+
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                #add_help=False,
+                description='''\
+        skel suite 
+            instantiate a suite of tests based on a given test plan''')
+
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to load I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source files')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+
+def gen_suite_with_args (parent_parser):
+    args = pparse_command_line (parent_parser)
+
+    print "Generating test suite using %s" % args.yamlfile
+
+    suite_gen_file_name = "%s_gen_suite.sh" % args.project
+    suite_gen_file = open (suite_gen_file_name, "w")
+    plan = skel_test_plan.skel_test_plan (args.yamlfile)
+
+    # Generate gen_suite.sh shell script
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser("~/.skel/templates/create_suite.tmpl"), 'r')
+    t = Template(file=template_file)
+    t.test_plan = plan
+
+    # No, I don't like these either.
+    t.yamlfile = args.yamlfile
+    t.project = args.project
+    t.force = args.force
+
+    suite_gen_file.write (str(t) )
+
+    suite_gen_file.close()
+
+    # Adjust the permissions of the replay script to make it runnable by user
+    os.chmod (suite_gen_file_name, stat.S_IXUSR | stat.S_IWUSR | stat.S_IRUSR)
+
+    # Run it
+    #print "Run ./%s [disabled]" % suite_gen_file_name
+    subprocess.check_call ("./%s" % suite_gen_file_name)
+
+
+
+
diff --git a/utils/skel/lib/skel_template.py b/utils/skel/lib/skel_template.py
new file mode 100644
index 0000000..96c34a4
--- /dev/null
+++ b/utils/skel/lib/skel_template.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+import argparse
+import os
+import stat
+import subprocess
+import sys
+import yaml
+
+import adios
+import skel_settings
+
+
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                #add_help=False,
+                description='''\
+        skel template 
+            Apply the list of items in the given yaml file to a template''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', required=True, help='yaml file to provide template parameters')
+    parser.add_argument ('-o', '--output-file', dest='outfile', required=True, help='output file')
+    parser.add_argument ('-t', '--template-file', dest='templatefile', required=True, help='template file')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source files')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+
+def fill_template (parent_parser):
+    args = pparse_command_line (parent_parser)
+
+    print "filling template"
+
+
+    output_file = open (args.outfile, "w")
+    
+    #Get the yaml items visible for cheetah...
+    stream = file (args.yamlfile, 'r')
+    items = yaml.load(stream)
+
+    #Fill the template 
+    from Cheetah.Template import Template
+    template_file = open (args.templatefile, 'r')
+    t = Template(file=template_file)
+
+    # No, I don't like these either.
+    t.i = items 
+    print items
+
+
+    output_file.write (str(t) )
+
+    output_file.close()
+
+
+
+
+
diff --git a/utils/skel/lib/skel_test_plan.py b/utils/skel/lib/skel_test_plan.py
new file mode 100755
index 0000000..0fc8ab8
--- /dev/null
+++ b/utils/skel/lib/skel_test_plan.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+
+import yaml
+
+
+# A representation of a skel test plan that is stored in a yaml document
+class skel_test_plan:
+    def __init__ (self, filename):
+        stream = file (filename, 'r')
+        self.doc = yaml.load(stream)
+
+
+
+    # Returns a list of test objects that implement the test plan
+    def get_tests (self):
+
+        tests = []
+        for i in range (len (self.doc) ): # Assume each element of doc is a test
+            tests.append (test (self.doc[i]['procs'], self.doc[i]['name'], self.doc[i]['method'], self.doc[i]['parameters'], self.doc[i]['decomp-procs']) )
+
+        # This is the old way, convenient, but lacking in flexibility
+        #tests = []
+        #for i in range (len(self.doc['procs']) ):
+        #    for j in range (len(self.doc['methods']) ):
+        #        name = "T%s_%i" % (chr (ord('a') + j), self.doc['procs'][i])
+        #        tests.append (test (self.doc['procs'][i], name, 
+        #                      self.doc['methods'][j]['m'],
+        #                      self.doc['methods'][j]['p']) )
+
+        return tests        
+
+
+class test:
+    def __init__ (self, num_procs, subdir, method, parameters, decomp_procs):
+        self.num_procs = num_procs
+        self.subdir = subdir
+        self.method = method
+        self.parameters = parameters
+        self.decomp_procs = decomp_procs
+
+    def get_subdir (self):
+        return self.subdir
+
+    def get_method (self):
+        return self.method
+
+    def get_parameters (self):
+        return self.parameters
+
+    def get_decomp_procs (self):
+        return self.decomp_procs
+
+    def to_yaml (self):
+        return "procs: %s\nmethod: %s\nparameters: %s\ndecomp_procs: %s" % (self.num_procs, self.method, self.parameters, self.decomp_procs)
+
+
+
+
+def main(argv=None):
+    b = skel_test_plan ("test_plan.yaml")
+
+    print b.get_tests()
+
+
+if __name__ == "__main__":
+    main()
diff --git a/utils/skel/lib/skel_xml.py b/utils/skel/lib/skel_xml.py
index 7e6855d..dd8d143 100644
--- a/utils/skel/lib/skel_xml.py
+++ b/utils/skel/lib/skel_xml.py
@@ -13,11 +13,12 @@ def pparse_command_line (parent_parser):
                 parents = [parent_parser],
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 prog='skel',
-                add_help=False,
+                #add_help=False,
                 description='''\
         skel xml
             create an xml file to define the I/O pattern for the target skeletal application''')
 
+    parser.add_argument ('project', metavar='project', help='Name of the skel project')
     parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
     parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing XML file')
     parser.set_defaults(force=False)
@@ -51,13 +52,13 @@ def cleanse (str):
 
 
 
-def create_skel_xml (project, parent_parser):
+def create_skel_xml (parent_parser):
 
     args = pparse_command_line (parent_parser)
     if args.yamlfile is not None:
-        create_from_yaml (project, args)
+        create_from_yaml (args.project, args)
     else:
-        create_from_xml (project, args)
+        create_from_xml (args.project, args)
 
 
 def create_from_yaml (project,args):
diff --git a/utils/skel/src/Makefile.in b/utils/skel/src/Makefile.in
index d8da02a..8c83ac6 100644
--- a/utils/skel/src/Makefile.in
+++ b/utils/skel/src/Makefile.in
@@ -51,7 +51,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -62,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -208,9 +211,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -277,6 +286,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/skeldump/Makefile.in b/utils/skeldump/Makefile.in
index 1fa5514..c890eb3 100644
--- a/utils/skeldump/Makefile.in
+++ b/utils/skeldump/Makefile.in
@@ -49,7 +49,9 @@ 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_fgr.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
+	$(top_srcdir)/config/ac_glib.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
@@ -60,6 +62,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
+	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
 	$(top_srcdir)/config/ac_szip.m4 \
@@ -183,9 +186,15 @@ FC = @FC@
 FCFLAGS = @FCFLAGS@
 FCLIBS = @FCLIBS@
 FGREP = @FGREP@
+FGR_CPPFLAGS = @FGR_CPPFLAGS@
+FGR_LDFLAGS = @FGR_LDFLAGS@
+FGR_LIBS = @FGR_LIBS@
 FP_CPPFLAGS = @FP_CPPFLAGS@
 FP_LDFLAGS = @FP_LDFLAGS@
 FP_LIBS = @FP_LIBS@
+GLIB_CPPFLAGS = @GLIB_CPPFLAGS@
+GLIB_LDFLAGS = @GLIB_LDFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
 GREP = @GREP@
 HDF5_CPPFLAGS = @HDF5_CPPFLAGS@
 HDF5_LDFLAGS = @HDF5_LDFLAGS@
@@ -252,6 +261,10 @@ PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
+PAMI_CFLAGS = @PAMI_CFLAGS@
+PAMI_CPPFLAGS = @PAMI_CPPFLAGS@
+PAMI_LDFLAGS = @PAMI_LDFLAGS@
+PAMI_LIBS = @PAMI_LIBS@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@
diff --git a/utils/skeldump/skeldump.c b/utils/skeldump/skeldump.c
index 1916464..c04efd9 100644
--- a/utils/skeldump/skeldump.c
+++ b/utils/skeldump/skeldump.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.
  *
@@ -613,7 +613,7 @@ int doList_group (ADIOS_FILE *fp)
                         else
                             fprintf(outf,", %lld", vi->dims[j]);
                     }
-                    fprintf(outf,"]");
+                    fprintf(outf,"],");
                 } else {
                     fprintf(outf,"scalar");
                 }
@@ -726,7 +726,7 @@ int doList_group (ADIOS_FILE *fp)
                 } // longopt && vi->statistics 
                 fprintf(outf,"\n");
 
-                if (show_decomp) {
+                if (/*show_decomp*/1) { // Use the bpls -D mechanism to get domain decomposition info
                     adios_inq_var_blockinfo (fp, vi);
                     print_decomp(vi);
                 }
@@ -1686,23 +1686,26 @@ int print_decomp(ADIOS_VARINFO *vi)
             ndigits_dims[k] = ndigits (vi->dims[k]-1);
         }
 
-        for (i=0; i < vi->nsteps; i++) {
-            fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
+        for (i=0; i < /*vi->nsteps*/1; i++) { // For now, just look at the first step xx
+            fprintf(outf, "    decomposition: [", ndigits_nsteps, i);
             fprintf(outf,"\n");
             ndigits_nblocks = ndigits (vi->nblocks[i]-1);
             for (j=0; j < vi->nblocks[i]; j++) {
-                fprintf(outf,"          block %*d: [", ndigits_nblocks, j);
+                fprintf(outf,"        [");
+                //fprintf(outf,"        block %*d: [", ndigits_nblocks, j);
                 for (k=0; k < vi->ndim; k++) {
-                    fprintf(outf, "%*lld:%*lld", 
-                            ndigits_dims[k],
+                    fprintf(outf, "[%lld,%lld]", 
                             vi->blockinfo[j].start[k],
-                            ndigits_dims[k],
                             vi->blockinfo[j].start[k] + vi->blockinfo[j].count[k]-1);
                     if (k < vi->ndim-1)
                         fprintf(outf, ", ");
                 }
-                fprintf(outf, "]\n");
+                fprintf(outf, "]");
+                if (j < vi->nblocks[i]-1)
+                    fprintf(outf, ",");
+                fprintf(outf, "\n");
             }
+            fprintf(outf,"    ]\n");
         }
     }
 }
diff --git a/wrappers/matlab/adiosopenc_staging.c b/wrappers/matlab/adiosopenc_staging.c
new file mode 100644
index 0000000..e1dd39c
--- /dev/null
+++ b/wrappers/matlab/adiosopenc_staging.c
@@ -0,0 +1,427 @@
+/* 
+ * 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
new file mode 100644
index 0000000..b301f76
Binary files /dev/null and b/wrappers/matlab/writer.bp differ
diff --git a/wrappers/numpy/CMakeLists.txt b/wrappers/numpy/CMakeLists.txt
deleted file mode 100644
index 30517d1..0000000
--- a/wrappers/numpy/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-cmake_minimum_required (VERSION 2.8)
-set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules)
-include(${CMAKE_CURRENT_SOURCE_DIR}/Modules/CMakeUtilityFunctions.cmake)
-
-project (AdiosPython CXX)
-
-find_package (PythonInterp REQUIRED)
-
-find_package (PythonLibs REQUIRED)
-include_directories (${PYTHON_INCLUDE_DIRS})
-
-find_package (Numpy REQUIRED)
-include_directories (${PYTHON_NUMPY_INCLUDE_DIR})
-
-find_package (MPI4Py REQUIRED)
-
-option (ADIOS_USE_MPI "Use parallel ADIOS" ON)
-
-find_package (ADIOS REQUIRED)
-add_definitions (${ADIOS_COMPILE_FLAGS})  
-add_definitions (-DADIOS_USE_READ_API_1)
-include_directories (${ADIOS_INCLUDE_PATH})
-
-find_package (MPI REQUIRED)
-include_directories (${MPI_CXX_INCLUDE_PATH})
-
-set (PSRCS
-  adios.pyx
-  )
-
-foreach (FILE ${PSRCS})
-  string (REGEX REPLACE ".pyx" ".cpp" OUTFILE ${FILE})
-
-  add_custom_command (
-    OUTPUT ${OUTFILE}
-    COMMAND cython -o ${CMAKE_CURRENT_BINARY_DIR}/${OUTFILE} -I${PYTHON_MPI4PY_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
-    DEPENDS ${FILE}
-    )
-  list (APPEND SRCS ${OUTFILE})
-endforeach ()
-
-add_library (adios MODULE
-  ${SRCS}
-  )
-
-target_link_libraries (adios
-  ${ADIOS_LIBRARIES}
-  ${PYTHON_LIBRARIES}
-  ${MPI_CXX_LIBRARIES}
-  )
-
-set_target_properties (adios
-  PROPERTIES OUTPUT_NAME adios
-  PREFIX ""
-  ##LINK_FLAGS "-undefined dynamic_lookup"
-  )
-
-ENABLE_TESTING()
-add_test (test_write ${CMAKE_CURRENT_SOURCE_DIR}/test/test_adios_write.sh ${CMAKE_CURRENT_SOURCE_DIR}/test)
-add_test (test_read ${CMAKE_CURRENT_SOURCE_DIR}/test/test_adios_read.sh ${CMAKE_CURRENT_SOURCE_DIR}/test)
-add_test (test_noxml ${CMAKE_CURRENT_SOURCE_DIR}/test/test_adios_noxml.sh ${CMAKE_CURRENT_SOURCE_DIR}/test)
diff --git a/wrappers/numpy/Makefile b/wrappers/numpy/Makefile
new file mode 100644
index 0000000..fce55b2
--- /dev/null
+++ b/wrappers/numpy/Makefile
@@ -0,0 +1,53 @@
+MPI=n
+CYTHON=n
+
+OBJ = adios.so
+
+ifeq ($(CYTHON), y)
+	OBJ := adios.cpp $(OBJ)
+endif
+
+ifeq ($(MPI),y)
+	OBJ += adios_mpi.so
+	ifeq ($(CYTHON), y)
+		OBJ := adios_mpi.cpp $(OBJ)
+	endif
+endif
+
+
+default:
+	@echo "ADIOS wrapper for Python/Numpy"
+	@echo "Have 'adios_config' and 'python' in the path and run"
+	@echo "> make python"
+	@echo ""
+	@echo "MPI-enabled ADIOS wrapper can be built (MPI4Py is required):"
+	@echo "> make MPI=y python"
+	@echo ""
+
+python: $(OBJ)
+
+adios.cpp:  adios.pyx
+	cython --cplus adios.pyx
+
+adios.so:  
+	python setup.py build
+
+adios_mpi.cpp:  adios_mpi.pyx
+	cython --cplus adios_mpi.pyx
+
+adios_mpi.so:  
+	python setup_mpi.py build
+
+clean:
+	rm -rf build
+
+install:
+	@echo "Run (you may need an admin previlege):"
+	@echo "> python setup.py install"
+	@echo ""
+	@echo "You may specify PREFIX:"
+	@echo "> python setup.py install --prefix=/dir/to/install"
+	@echo ""
+	@echo "You can also install in your local directory, run"
+	@echo "> python setup.py install --user"
+
diff --git a/wrappers/numpy/Modules/CMakeUtilityFunctions.cmake b/wrappers/numpy/Modules/CMakeUtilityFunctions.cmake
deleted file mode 100644
index c29cb8a..0000000
--- a/wrappers/numpy/Modules/CMakeUtilityFunctions.cmake
+++ /dev/null
@@ -1,19 +0,0 @@
-function (print VAR)
-  set(NAME ${VAR})
-  list (APPEND VARS ${${VAR}})
-
-  set(MSG)
-  set(IS_FIRST TRUE)
-
-  foreach(ELM ${VARS})
-    if (IS_FIRST)
-      set(MSG ${ELM})
-      set(IS_FIRST FALSE)
-    else ()
-      set(MSG ${MSG}, ${ELM})
-    endif ()
-  endforeach()
-
-  message("${NAME} = "${MSG})
-endfunction(print VAR)
-
diff --git a/wrappers/numpy/Modules/FindADIOS.cmake b/wrappers/numpy/Modules/FindADIOS.cmake
deleted file mode 100644
index 8a55c77..0000000
--- a/wrappers/numpy/Modules/FindADIOS.cmake
+++ /dev/null
@@ -1,136 +0,0 @@
-# - Find a ADIOS implementation
-#
-# === Variables ===
-#
-# This module will set the following variables:
-#   ADIOS_USE_MPI         Can be set to ON to force the use of the MPI library
-#                         Defaults to ON.
-#   ADIOS_FOUND           TRUE if FindADIOS found ADIOS flags
-#   ADIOS_COMPILE_FLAGS   Compilation flags for ADIOS programs
-#   ADIOS_INCLUDE_PATH    Include path(s) for ADIOS header
-#   ADIOS_LINK_FLAGS      Linking flags for ADIOS programs
-#   ADIOS_LIBRARIES       All libraries to link ADIOS programs against
-# 
-# === Example ===
-#
-#   set (ADIOS_USE_MPI OFF)
-#   find_package (ADIOS)
-#   if (ADIOS_FOUND)
-#     add_definitions (${ADIOS_COMPILE_FLAGS})  
-#     include_directories (${ADIOS_INCLUDE_PATH})
-#     target_link_libraries(foo ${ADIOS_LIBRARIES})
-#   endif ()
-#
-
-# NOTE: 
-# This module is written based FindMPI. Most routines are copied from FindMPI.
-
-# include this to handle the QUIETLY and REQUIRED arguments
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-include(GetPrerequisites)
-
-if(NOT DEFINED ADIOS_USE_MPI)
-  set(ADIOS_USE_MPI TRUE)
-endif()
-
-if (ADIOS_USE_MPI)
-  set(CONFIG_OPTION "")
-else ()
-  set(CONFIG_OPTION "-s")
-endif()
-
-execute_process(
-  COMMAND adios_config -c ${CONFIG_OPTION}
-  OUTPUT_VARIABLE ADIOS_COMPILE_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-
-# Extract compile flags from the compile command line
-string(REGEX MATCHALL "(^| )-[Df]([^\" ]+|\"[^\"]+\")" ADIOS_ALL_COMPILE_FLAGS "${ADIOS_COMPILE_CMDLINE}")
-set(ADIOS_COMPILE_FLAGS_WORK)
-
-foreach(FLAG ${ADIOS_ALL_COMPILE_FLAGS})
-  if (ADIOS_COMPILE_FLAGS_WORK)
-    set(ADIOS_COMPILE_FLAGS_WORK "${ADIOS_COMPILE_FLAGS_WORK} ${FLAG}")
-  else()
-    set(ADIOS_COMPILE_FLAGS_WORK ${FLAG})
-  endif()
-endforeach()
-
-# Extract include paths from compile command line
-string(REGEX MATCHALL "(^| )-I([^\" ]+|\"[^\"]+\")" ADIOS_ALL_INCLUDE_PATHS "${ADIOS_COMPILE_CMDLINE}")
-unset(ADIOS_INCLUDE_PATH_WORK)
-foreach(IPATH ${ADIOS_ALL_INCLUDE_PATHS})
-  string(REGEX REPLACE "^ ?-I" "" IPATH ${IPATH})
-  string(REGEX REPLACE "//" "/" IPATH ${IPATH})
-  list(APPEND ADIOS_INCLUDE_PATH_WORK ${IPATH})
-endforeach()
-
-execute_process(
-  COMMAND adios_config -l ${CONFIG_OPTION}
-  OUTPUT_VARIABLE  ADIOS_LINK_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-
-
-# Extract linker paths from the link command line
-string(REGEX MATCHALL "(^| |-Wl,)-L([^\" ]+|\"[^\"]+\")" ADIOS_ALL_LINK_PATHS "${ADIOS_LINK_CMDLINE}")
-unset(ADIOS_LINK_PATH)
-foreach(LPATH ${ADIOS_ALL_LINK_PATHS})
-  string(REGEX REPLACE "^(| |-Wl,)-L" "" LPATH ${LPATH})
-  string(REGEX REPLACE "//" "/" LPATH ${LPATH})
-  list(APPEND ADIOS_LINK_PATH ${LPATH})
-endforeach()
-
-# try using showme:libdirs if extracting didn't work.
-if (NOT ADIOS_LINK_PATH)
-  set(ADIOS_LINK_PATH ${ADIOS_LIBDIRS})
-  separate_arguments(ADIOS_LINK_PATH)
-endif()
-
-# Extract linker flags from the link command line
-string(REGEX MATCHALL "(^| )-Wl,([^\" ]+|\"[^\"]+\")" ADIOS_ALL_LINK_FLAGS "${ADIOS_LINK_CMDLINE}")
-set(ADIOS_LINK_FLAGS_WORK)
-foreach(FLAG ${ADIOS_ALL_LINK_FLAGS})
-  if (ADIOS_LINK_FLAGS_WORK)
-    set(ADIOS_LINK_FLAGS_WORK "${ADIOS_LINK_FLAGS_WORK} ${FLAG}")
-  else()
-    set(ADIOS_LINK_FLAGS_WORK ${FLAG})
-  endif()
-endforeach()
-
-# Extract the set of libraries to link against from the link command
-# line
-string(REGEX MATCHALL "(^| )-l([^\" ]+|\"[^\"]+\")" ADIOS_LIBNAMES "${ADIOS_LINK_CMDLINE}")
-
-# Determine full path names for all of the libraries that one needs
-# to link against in an MPI program
-unset(ADIOS_LIBRARIES_WORK)
-foreach(LIB ${ADIOS_LIBNAMES})
-  string(REGEX REPLACE "^ ?-l" "" LIB ${LIB})
-  # ADIOS_LIB is cached by find_library, but we don't want that.  Clear it first.
-  set(ADIOS_LIB "ADIOS_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE)
-  find_library(ADIOS_LIB NAMES ${LIB} HINTS ${ADIOS_LINK_PATH})
-
-  if (ADIOS_LIB)
-    list(APPEND ADIOS_LIBRARIES_WORK ${ADIOS_LIB})
-  elseif (NOT ADIOS_FIND_QUIETLY)
-    message(WARNING "Unable to find ADIOS library ${LIB}")
-  endif()
-endforeach()
-
-# Sanity check ADIOS_LIBRARIES to make sure there are enough libraries
-list(LENGTH ADIOS_LIBRARIES_WORK ADIOS_NUMLIBS)
-list(LENGTH ADIOS_LIBNAMES ADIOS_NUMLIBS_EXPECTED)
-if (NOT ADIOS_NUMLIBS EQUAL ADIOS_NUMLIBS_EXPECTED)
-  message("Expected ${ADIOS_NUMLIBS_EXPECTED} but found ${ADIOS_NUMLIBS}")
-  set(ADIOS_LIBRARIES_WORK "ADIOS_LIBRARIES-NOTFOUND")
-endif()
-
-# If we found MPI, set up all of the appropriate cache entries
-set(ADIOS_COMPILE_FLAGS ${ADIOS_COMPILE_FLAGS_WORK} CACHE STRING "ADIOS compilation flags"         FORCE)
-set(ADIOS_INCLUDE_PATH  ${ADIOS_INCLUDE_PATH_WORK}  CACHE STRING "ADIOS include path"              FORCE)
-set(ADIOS_LINK_FLAGS    ${ADIOS_LINK_FLAGS_WORK}    CACHE STRING "ADIOS linking flags"             FORCE)
-set(ADIOS_LIBRARIES     ${ADIOS_LIBRARIES_WORK}     CACHE STRING "ADIOS libraries to link against" FORCE)
-
-find_package_handle_standard_args(ADIOS DEFAULT_MSG ADIOS_INCLUDE_PATH ADIOS_LIBRARIES)
-
-
diff --git a/wrappers/numpy/Modules/FindMPI4Py.cmake b/wrappers/numpy/Modules/FindMPI4Py.cmake
deleted file mode 100644
index 8e362b3..0000000
--- a/wrappers/numpy/Modules/FindMPI4Py.cmake
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copied from FindNumpy.cmake
-# ---
-#
-# $Id: $
-#
-# Author(s):  Anton Deguet
-# Created on: 2010-01-20
-#
-# (C) Copyright 2010 Johns Hopkins University (JHU), All Rights
-# Reserved.
-#
-# --- begin cisst license - do not edit ---
-# 
-# This software is provided "as is" under an open source license, with
-# no warranty.  The complete license can be found in license.txt and
-# http://www.cisst.org/cisst/license.txt.
-# 
-# --- end cisst license ---
-#
-# File based on FindNUMARRAY distributed with ITK 3.4 (see itk.org)
-#
-# Main modifications:
-# - use Numpy instead of Numarray for all naming
-# - added path for Python 2.5 and 2.6
-# - renamed python script generated (det_npp became determineNumpyPath)
-# - use lower case for CMake commands and keywords
-# - updated python script to use get_include, not get_numpy_include which is now deprecated
-#
-# ---
-#
-# Try to find mpi4py python package
-# Once done this will define
-#
-# PYTHON_MPI4PY_FOUND        - system has numpy development package and it should be used
-# PYTHON_MPI4PY_INCLUDE_DIR  - directory where the arrayobject.h header file can be found
-#
-#
-
-# include this to handle the QUIETLY and REQUIRED arguments
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-include(GetPrerequisites)
-
-if(PYTHON_EXECUTABLE)
-    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/determineMPI4PyPath.py "try: import mpi4py; print mpi4py.get_include()\nexcept: pass\n")
-    exec_program("${PYTHON_EXECUTABLE}"
-                 ARGS "\"${CMAKE_CURRENT_BINARY_DIR}/determineMPI4PyPath.py\""
-                 OUTPUT_VARIABLE MPI4PY_PATH
-                 )
-endif(PYTHON_EXECUTABLE)
-
-find_path(PYTHON_MPI4PY_INCLUDE_DIR mpi4py/mpi4py.h
-          "${MPI4PY_PATH}"
-          "${PYTHON_INCLUDE_PATH}/mpi4py/"
-          /usr/include/python2.6/mpi4py/
-          /usr/include/python2.5/mpi4py/
-          /usr/include/python2.4/mpi4py/
-          /usr/include/python2.3/mpi4py/
-          DOC "Directory where the mpi4py.h header file can be found. This file is part of the mpi4py package"
-    )
-
-##if(PYTHON_MPI4PY_INCLUDE_DIR)
-##    set(PYTHON_MPI4PY_FOUND 1 CACHE INTERNAL "Python mpi4py development package is available")
-##endif(PYTHON_MPI4PY_INCLUDE_DIR)
-
-find_package_handle_standard_args(PYTHON_MPI4PY DEFAULT_MSG PYTHON_MPI4PY_INCLUDE_DIR)
diff --git a/wrappers/numpy/Modules/FindNumpy.cmake b/wrappers/numpy/Modules/FindNumpy.cmake
deleted file mode 100644
index 6dfb1af..0000000
--- a/wrappers/numpy/Modules/FindNumpy.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# $Id: $
-#
-# Author(s):  Anton Deguet
-# Created on: 2010-01-20
-#
-# (C) Copyright 2010 Johns Hopkins University (JHU), All Rights
-# Reserved.
-#
-# --- begin cisst license - do not edit ---
-# 
-# This software is provided "as is" under an open source license, with
-# no warranty.  The complete license can be found in license.txt and
-# http://www.cisst.org/cisst/license.txt.
-# 
-# --- end cisst license ---
-#
-# File based on FindNUMARRAY distributed with ITK 3.4 (see itk.org)
-#
-# Main modifications:
-# - use Numpy instead of Numarray for all naming
-# - added path for Python 2.5 and 2.6
-# - renamed python script generated (det_npp became determineNumpyPath)
-# - use lower case for CMake commands and keywords
-# - updated python script to use get_include, not get_numpy_include which is now deprecated
-#
-# ---
-#
-# Try to find numpy python package
-# Once done this will define
-#
-# PYTHON_NUMPY_FOUND        - system has numpy development package and it should be used
-# PYTHON_NUMPY_INCLUDE_DIR  - directory where the arrayobject.h header file can be found
-#
-#
-if(PYTHON_EXECUTABLE)
-    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/determineNumpyPath.py "try: import numpy; print numpy.get_include()\nexcept: pass\n")
-    exec_program("${PYTHON_EXECUTABLE}"
-                 ARGS "\"${CMAKE_CURRENT_BINARY_DIR}/determineNumpyPath.py\""
-                 OUTPUT_VARIABLE NUMPY_PATH
-                 )
-endif(PYTHON_EXECUTABLE)
-
-find_path(PYTHON_NUMPY_INCLUDE_DIR numpy/arrayobject.h
-          "${NUMPY_PATH}"
-          "${PYTHON_INCLUDE_PATH}/numpy/"
-          /usr/include/python2.6/numpy/
-          /usr/include/python2.5/numpy/
-          /usr/include/python2.4/numpy/
-          /usr/include/python2.3/numpy/
-          DOC "Directory where the arrayobject.h header file can be found. This file is part of the numpy package"
-    )
-
-if(PYTHON_NUMPY_INCLUDE_DIR)
-    set(PYTHON_NUMPY_FOUND 1 CACHE INTERNAL "Python numpy development package is available")
-endif(PYTHON_NUMPY_INCLUDE_DIR)
-
diff --git a/wrappers/numpy/Modules/FindPackageHandleStandardArgs.cmake b/wrappers/numpy/Modules/FindPackageHandleStandardArgs.cmake
deleted file mode 100644
index 1acb021..0000000
--- a/wrappers/numpy/Modules/FindPackageHandleStandardArgs.cmake
+++ /dev/null
@@ -1,260 +0,0 @@
-# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
-#
-# This function is intended to be used in FindXXX.cmake modules files.
-# It handles the REQUIRED, QUIET and version-related arguments to FIND_PACKAGE().
-# It also sets the <UPPERCASED_NAME>_FOUND variable.
-# The package is considered found if all variables <var1>... listed contain
-# valid results, e.g. valid filepaths.
-#
-# There are two modes of this function. The first argument in both modes is
-# the name of the Find-module where it is called (in original casing).
-#
-# The first simple mode looks like this:
-#    FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") <var1>...<varN> )
-# If the variables <var1> to <varN> are all valid, then <UPPERCASED_NAME>_FOUND
-# will be set to TRUE.
-# If DEFAULT_MSG is given as second argument, then the function will generate
-# itself useful success and error messages. You can also supply a custom error message
-# for the failure case. This is not recommended.
-#
-# The second mode is more powerful and also supports version checking:
-#    FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>]
-#                                           [VERSION_VAR   <versionvar>
-#                                           [CONFIG_MODE]
-#                                           [FAIL_MESSAGE "Custom failure message"] )
-#
-# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND
-# will be set to TRUE.
-# After REQUIRED_VARS the variables which are required for this package are listed.
-# Following VERSION_VAR the name of the variable can be specified which holds
-# the version of the package which has been found. If this is done, this version
-# will be checked against the (potentially) specified required version used
-# in the find_package() call. The EXACT keyword is also handled. The default
-# messages include information about the required version and the version
-# which has been actually found, both if the version is ok or not.
-# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for
-# a find_package(... NO_MODULE) call, in this case all the information
-# provided by the config-mode of find_package() will be evaluated
-# automatically.
-# Via FAIL_MESSAGE a custom failure message can be specified, if this is not
-# used, the default message will be displayed.
-#
-# Example for mode 1:
-#
-#    FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2  DEFAULT_MSG  LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
-#
-# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
-# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE.
-# If it is not found and REQUIRED was used, it fails with FATAL_ERROR,
-# independent whether QUIET was used or not.
-# If it is found, success will be reported, including the content of <var1>.
-# On repeated Cmake runs, the same message won't be printed again.
-#
-# Example for mode 2:
-#
-#    FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON  REQUIRED_VARS BISON_EXECUTABLE
-#                                             VERSION_VAR BISON_VERSION)
-# In this case, BISON is considered to be found if the variable(s) listed
-# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case.
-# Also the version of BISON will be checked by using the version contained
-# in BISON_VERSION.
-# Since no FAIL_MESSAGE is given, the default messages will be printed.
-#
-# Another example for mode 2:
-#
-#    FIND_PACKAGE(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
-#    FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4  CONFIG_MODE)
-# In this case, FindAutmoc4.cmake wraps a call to FIND_PACKAGE(Automoc4 NO_MODULE)
-# and adds an additional search directory for automoc4.
-# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper
-# success/error message.
-
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-INCLUDE(FindPackageMessage)
-INCLUDE(CMakeParseArguments)
-
-# internal helper macro
-MACRO(_FPHSA_FAILURE_MESSAGE _msg)
-  IF (${_NAME}_FIND_REQUIRED)
-    MESSAGE(FATAL_ERROR "${_msg}")
-  ELSE (${_NAME}_FIND_REQUIRED)
-    IF (NOT ${_NAME}_FIND_QUIETLY)
-      MESSAGE(STATUS "${_msg}")
-    ENDIF (NOT ${_NAME}_FIND_QUIETLY)
-  ENDIF (${_NAME}_FIND_REQUIRED)
-ENDMACRO(_FPHSA_FAILURE_MESSAGE _msg)
-
-
-# internal helper macro to generate the failure message when used in CONFIG_MODE:
-MACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
-  # <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
-  IF(${_NAME}_CONFIG)
-    _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
-  ELSE(${_NAME}_CONFIG)
-    # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
-    # List them all in the error message:
-    IF(${_NAME}_CONSIDERED_CONFIGS)
-      SET(configsText "")
-      LIST(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
-      MATH(EXPR configsCount "${configsCount} - 1")
-      FOREACH(currentConfigIndex RANGE ${configsCount})
-        LIST(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
-        LIST(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
-        SET(configsText "${configsText}    ${filename} (version ${version})\n")
-      ENDFOREACH(currentConfigIndex)
-      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}")
-
-    ELSE(${_NAME}_CONSIDERED_CONFIGS)
-      # Simple case: No Config-file was found at all:
-      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
-    ENDIF(${_NAME}_CONSIDERED_CONFIGS)
-  ENDIF(${_NAME}_CONFIG)
-ENDMACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
-
-
-FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
-
-# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
-# new extended or in the "old" mode:
-  SET(options CONFIG_MODE)
-  SET(oneValueArgs FAIL_MESSAGE VERSION_VAR)
-  SET(multiValueArgs REQUIRED_VARS)
-  SET(_KEYWORDS_FOR_EXTENDED_MODE  ${options} ${oneValueArgs} ${multiValueArgs} )
-  LIST(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
-
-  IF(${INDEX} EQUAL -1)
-    SET(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
-    SET(FPHSA_REQUIRED_VARS ${ARGN})
-    SET(FPHSA_VERSION_VAR)
-  ELSE(${INDEX} EQUAL -1)
-
-    CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})
-
-    IF(FPHSA_UNPARSED_ARGUMENTS)
-      MESSAGE(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
-    ENDIF(FPHSA_UNPARSED_ARGUMENTS)
-
-    IF(NOT FPHSA_FAIL_MESSAGE)
-      SET(FPHSA_FAIL_MESSAGE  "DEFAULT_MSG")
-    ENDIF(NOT FPHSA_FAIL_MESSAGE)
-  ENDIF(${INDEX} EQUAL -1)
-
-# now that we collected all arguments, process them
-
-  IF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
-    SET(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
-  ENDIF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
-
-  # In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package()
-  # when it successfully found the config-file, including version checking:
-  IF(FPHSA_CONFIG_MODE)
-    LIST(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
-    LIST(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
-    SET(FPHSA_VERSION_VAR ${_NAME}_VERSION)
-  ENDIF(FPHSA_CONFIG_MODE)
-
-  IF(NOT FPHSA_REQUIRED_VARS)
-    MESSAGE(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
-  ENDIF(NOT FPHSA_REQUIRED_VARS)
-
-  LIST(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
-
-  STRING(TOUPPER ${_NAME} _NAME_UPPER)
-  STRING(TOLOWER ${_NAME} _NAME_LOWER)
-
-  # collect all variables which were not found, so they can be printed, so the
-  # user knows better what went wrong (#6375)
-  SET(MISSING_VARS "")
-  SET(DETAILS "")
-  SET(${_NAME_UPPER}_FOUND TRUE)
-  # check if all passed variables are valid
-  FOREACH(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
-    IF(NOT ${_CURRENT_VAR})
-      SET(${_NAME_UPPER}_FOUND FALSE)
-      SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}")
-    ELSE(NOT ${_CURRENT_VAR})
-      SET(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]")
-    ENDIF(NOT ${_CURRENT_VAR})
-  ENDFOREACH(_CURRENT_VAR)
-
-
-  # version handling:
-  SET(VERSION_MSG "")
-  SET(VERSION_OK TRUE)
-  SET(VERSION ${${FPHSA_VERSION_VAR}} )
-  IF (${_NAME}_FIND_VERSION)
-
-    IF(VERSION)
-
-      IF(${_NAME}_FIND_VERSION_EXACT)       # exact version required
-        IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
-          SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
-          SET(VERSION_OK FALSE)
-        ELSE (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
-          SET(VERSION_MSG "(found suitable exact version \"${VERSION}\")")
-        ENDIF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
-
-      ELSE(${_NAME}_FIND_VERSION_EXACT)     # minimum version specified:
-        IF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
-          SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"")
-          SET(VERSION_OK FALSE)
-        ELSE ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
-          SET(VERSION_MSG "(found suitable version \"${VERSION}\", required is \"${${_NAME}_FIND_VERSION}\")")
-        ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
-      ENDIF(${_NAME}_FIND_VERSION_EXACT)
-
-    ELSE(VERSION)
-
-      # if the package was not found, but a version was given, add that to the output:
-      IF(${_NAME}_FIND_VERSION_EXACT)
-         SET(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
-      ELSE(${_NAME}_FIND_VERSION_EXACT)
-         SET(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
-      ENDIF(${_NAME}_FIND_VERSION_EXACT)
-
-    ENDIF(VERSION)
-  ELSE (${_NAME}_FIND_VERSION)
-    IF(VERSION)
-      SET(VERSION_MSG "(found version \"${VERSION}\")")
-    ENDIF(VERSION)
-  ENDIF (${_NAME}_FIND_VERSION)
-
-  IF(VERSION_OK)
-    SET(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]")
-  ELSE(VERSION_OK)
-    SET(${_NAME_UPPER}_FOUND FALSE)
-  ENDIF(VERSION_OK)
-
-
-  # print the result:
-  IF (${_NAME_UPPER}_FOUND)
-    FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG}" "${DETAILS}")
-  ELSE (${_NAME_UPPER}_FOUND)
-
-    IF(FPHSA_CONFIG_MODE)
-      _FPHSA_HANDLE_FAILURE_CONFIG_MODE()
-    ELSE(FPHSA_CONFIG_MODE)
-      IF(NOT VERSION_OK)
-        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})")
-      ELSE(NOT VERSION_OK)
-        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}")
-      ENDIF(NOT VERSION_OK)
-    ENDIF(FPHSA_CONFIG_MODE)
-
-  ENDIF (${_NAME_UPPER}_FOUND)
-
-  SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE)
-
-ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG)
diff --git a/wrappers/numpy/README b/wrappers/numpy/README
index 412ccf6..8ad5d19 100644
--- a/wrappers/numpy/README
+++ b/wrappers/numpy/README
@@ -1,52 +1,65 @@
 ADIOS Python/Numpy wrapper
 -----------------
 
-This directory contains the codes for the ADIOS python/numpy wrapper
-to to call the native ADIOS library. This module is built by Cython.
+This directory contains the codes for the ADIOS Python/Numpy wrapper
+to call the native ADIOS library. This module is built by Cython.
 
+This module requires ADIOS built with the GNU C compiler with
+relocatable codes. Add -fPIC flag to CFLAGS before configuring ADIOS.
 
-== Build with CMake == 
 
-This program can be built with CMake (http://www.cmake.org/). You may
-want to a build directory and run cmake pointing the source directory
-containing CMakeLists.txt (this directory). For example, 
+== Build and install with make ==
 
-$ mkdir build; cd build
-$ cmake /dir/to/source
-
-CMake will search installed ADIOS library and Python/Numpy. Once
-completed, type make to build:
+A Makefile is included for building. The following commands will
+display instructions on how to build and install python wrappers for
+Adios.
 
 $ make
-Or, 
-$ make VERBOSE=1
-if you need verbose output.
+$ make install
+
+Have 'adios_config' and 'python' in the path and run
+
+$ make python
 
-After successful building, you can see adios.so. This file can be
-loaded in Python.
+If you need a MPI-enabled ADIOS wrapper, which requires MPI4Py, type
+the following:
 
-== Test == 
+$ make MPI=y python
 
-This program contains a test program. To run testing after building,
-type the following command:
+After successful building, you can install in a python path. There are
+three options
 
-$ make test
+$ python setup.py install
 
-If you need a verbose output, type the following
+which will install python's default installation location. This may
+require an admin privilege.
 
-$ ctest -V
+You may want to use a custom directory to install. Type
 
-== Build with Python == 
+$ python setup.py install --prefix=/dir/to/install
 
-This program also can be build and installed by using python's
-standard package distribution method. For example,
+and append the directory to the PYTHONPATH environment variable
 
-$ python setup.py build
-will compile adios python module. Once successfully completed, type
+You can also install in your local directory, run
 
-$ python setup.py install 
-Or,
 $ python setup.py install --user
-to install ADIOS module in python's default package directory or user
-local directory.
 
+== Test cases and examples ==
+
+Test cases and example files are located in tests and example
+directory.
+
+
+== Compile with Cython (only for developers) ==
+
+The C++ code (adios.cpp and adios_mpi.cpp) has been already generated
+by with Cython (version 0.20.1) and included here. Just in case to
+reproduce the C++ code, try the following command. Otherwise, one can
+skip this part.
+
+$ make CYTHON=y python
+
+for the serial version of Adios wrapper. If you need to generated C++
+for MPI-enabled version, try the following
+
+$ make CYTHON=y MPI=y python
diff --git a/wrappers/numpy/adios.cpp b/wrappers/numpy/adios.cpp
index 40270c0..928ea77 100644
--- a/wrappers/numpy/adios.cpp
+++ b/wrappers/numpy/adios.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.19.1 on Tue Jul 16 14:56:11 2013 */
+/* Generated by Cython 0.20.1 on Fri May 23 13:00:08 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -19,6 +19,7 @@
 #elif PY_VERSION_HEX < 0x02040000
     #error Cython requires Python 2.4+.
 #else
+#define CYTHON_ABI "0_20_1"
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -53,6 +54,9 @@
 #define CYTHON_COMPILING_IN_PYPY 0
 #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
+#if CYTHON_COMPILING_IN_PYPY
+#define Py_OptimizeFlag 0
+#endif
 #if PY_VERSION_HEX < 0x02050000
   typedef int Py_ssize_t;
   #define PY_SSIZE_T_MAX INT_MAX
@@ -60,7 +64,7 @@
   #define PY_FORMAT_SIZE_T ""
   #define CYTHON_FORMAT_SSIZE_T ""
   #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
-  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
+  #define 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), \
@@ -112,13 +116,15 @@
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
 #endif
-#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
+#if PY_VERSION_HEX < 0x02060000
   #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
 #endif
 #if PY_MAJOR_VERSION >= 3
@@ -131,19 +137,44 @@
 #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
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
+  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
 #else
   #define CYTHON_PEP393_ENABLED 0
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
-  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
+  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+#endif
+#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)
+#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))
+#endif
+#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)
+#else
+  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
@@ -176,7 +207,7 @@
 #else
   #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \
                                          PyString_Check(obj) || PyUnicode_Check(obj))
-  #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type)
+  #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)
@@ -201,11 +232,12 @@
   #define PyInt_AsSsize_t              PyLong_AsSsize_t
   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define PyNumber_Int                 PyNumber_Long
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
-#if PY_VERSION_HEX < 0x03020000
+#if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
@@ -264,7 +296,7 @@
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
     #define CYTHON_RESTRICT __restrict__
-  #elif defined(_MSC_VER)
+  #elif defined(_MSC_VER) && _MSC_VER >= 1400
     #define CYTHON_RESTRICT __restrict
   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     #define CYTHON_RESTRICT restrict
@@ -313,10 +345,10 @@ static CYTHON_INLINE float __PYX_NAN() {
 #include "stdlib.h"
 #include "numpy/arrayobject.h"
 #include "numpy/ufuncobject.h"
-#include "mpi.h"
 #include "stdint.h"
 #include "adios_types.h"
 #include "adios.h"
+#include "adios_selection.h"
 #include "adios_read.h"
 #ifdef _OPENMP
 #include <omp.h>
@@ -347,8 +379,20 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
 #define __PYX_DEFAULT_STRING_ENCODING ""
 #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
 #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (    \
+    (sizeof(type) < sizeof(Py_ssize_t))  ||             \
+    (sizeof(type) > sizeof(Py_ssize_t) &&               \
+          likely(v < (type)PY_SSIZE_T_MAX ||            \
+                 v == (type)PY_SSIZE_T_MAX)  &&         \
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||       \
+                                v == (type)PY_SSIZE_T_MIN)))  ||  \
+    (sizeof(type) == sizeof(Py_ssize_t) &&              \
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||        \
+                               v == (type)PY_SSIZE_T_MAX)))  )
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*);
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#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*);
@@ -359,9 +403,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
     #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
 #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)
 #if PY_MAJOR_VERSION < 3
@@ -383,7 +429,6 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
-static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
 #if CYTHON_COMPILING_IN_CPYTHON
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
@@ -392,7 +437,7 @@ static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
 static int __Pyx_sys_getdefaultencoding_not_ascii;
-static int __Pyx_init_sys_getdefaultencoding_params() {
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
     PyObject* sys = NULL;
     PyObject* default_encoding = NULL;
     PyObject* ascii_chars_u = NULL;
@@ -417,7 +462,7 @@ static int __Pyx_init_sys_getdefaultencoding_params() {
         if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
             PyErr_Format(
                 PyExc_ValueError,
-                "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.",
+                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
                 default_encoding_c);
             goto bad;
         }
@@ -441,7 +486,7 @@ bad:
 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
 static char* __PYX_DEFAULT_STRING_ENCODING;
-static int __Pyx_init_sys_getdefaultencoding_params() {
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
     PyObject* sys = NULL;
     PyObject* default_encoding = NULL;
     char* default_encoding_c;
@@ -512,12 +557,11 @@ static const char *__pyx_filename;
 
 static const char *__pyx_f[] = {
   "adios.pyx",
-  "numpy.pxd",
+  "__init__.pxd",
   "type.pxd",
-  "MPI.pxd",
 };
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -526,7 +570,7 @@ static const char *__pyx_f[] = {
  */
 typedef npy_int8 __pyx_t_5numpy_int8_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -535,7 +579,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t;
  */
 typedef npy_int16 __pyx_t_5numpy_int16_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -544,7 +588,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t;
  */
 typedef npy_int32 __pyx_t_5numpy_int32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -553,7 +597,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t;
  */
 typedef npy_int64 __pyx_t_5numpy_int64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -562,7 +606,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t;
  */
 typedef npy_uint8 __pyx_t_5numpy_uint8_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -571,7 +615,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t;
  */
 typedef npy_uint16 __pyx_t_5numpy_uint16_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -580,7 +624,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t;
  */
 typedef npy_uint32 __pyx_t_5numpy_uint32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -589,7 +633,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t;
  */
 typedef npy_uint64 __pyx_t_5numpy_uint64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -598,7 +642,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t;
  */
 typedef npy_float32 __pyx_t_5numpy_float32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -607,7 +651,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t;
  */
 typedef npy_float64 __pyx_t_5numpy_float64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -616,7 +660,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t;
  */
 typedef npy_long __pyx_t_5numpy_int_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -625,7 +669,7 @@ typedef npy_long __pyx_t_5numpy_int_t;
  */
 typedef npy_longlong __pyx_t_5numpy_long_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -634,7 +678,7 @@ typedef npy_longlong __pyx_t_5numpy_long_t;
  */
 typedef npy_longlong __pyx_t_5numpy_longlong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -643,7 +687,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t;
  */
 typedef npy_ulong __pyx_t_5numpy_uint_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -652,7 +696,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -661,7 +705,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -670,7 +714,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
  */
 typedef npy_intp __pyx_t_5numpy_intp_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -679,7 +723,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t;
  */
 typedef npy_uintp __pyx_t_5numpy_uintp_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -688,7 +732,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t;
  */
 typedef npy_double __pyx_t_5numpy_float_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -697,7 +741,7 @@ typedef npy_double __pyx_t_5numpy_float_t;
  */
 typedef npy_double __pyx_t_5numpy_double_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -727,28 +771,10 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
 
 /*--- Type declarations ---*/
-struct PyMPIErrhandlerObject;
-struct PyMPIGroupObject;
-struct PyMPICommObject;
-struct PyMPIIntercommObject;
-struct PyMPIIntracommObject;
-struct PyMPIDistgraphcommObject;
-struct __pyx_obj_5adios_AdiosFile;
-struct PyMPIRequestObject;
-struct PyMPIGrequestObject;
-struct PyMPIWinObject;
-struct PyMPIDatatypeObject;
-struct __pyx_obj_5adios_AdiosVariable;
-struct PyMPIFileObject;
-struct PyMPIGraphcommObject;
-struct PyMPIPrequestObject;
-struct PyMPIInfoObject;
-struct __pyx_obj_5adios_AdiosGroup;
-struct PyMPICartcommObject;
-struct PyMPIStatusObject;
-struct PyMPIOpObject;
-
-/* "numpy.pxd":762
+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
  * ctypedef npy_longdouble longdouble_t
  * 
  * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
@@ -757,7 +783,7 @@ struct PyMPIOpObject;
  */
 typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -766,7 +792,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
  */
 typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -775,7 +801,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
  */
 typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -787,22 +813,24 @@ struct __pyx_opt_args_5adios_init;
 struct __pyx_opt_args_5adios_open;
 struct __pyx_opt_args_5adios_finalize;
 struct __pyx_opt_args_5adios_init_noxml;
-struct __pyx_opt_args_5adios_13AdiosVariable_read;
+struct __pyx_opt_args_5adios_read_init;
+struct __pyx_opt_args_5adios_read_finalize;
+struct __pyx_opt_args_5adios_3var_read;
 
-/* "adios.pyx":211
- * ## ==========
+/* "adios.pyx":256
+ * ## ====================
  * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
+ * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm)
  * 
  */
 struct __pyx_opt_args_5adios_init {
   int __pyx_n;
-  struct PyMPICommObject *comm;
+  MPI_Comm comm;
 };
 
-/* "adios.pyx":214
- *     return adios_init(config, comm.ob_mpi)
+/* "adios.pyx":259
+ *     return adios_init(config, comm)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
  *                    char * name,
@@ -810,10 +838,10 @@ struct __pyx_opt_args_5adios_init {
  */
 struct __pyx_opt_args_5adios_open {
   int __pyx_n;
-  struct PyMPICommObject *comm;
+  MPI_Comm comm;
 };
 
-/* "adios.pyx":255
+/* "adios.pyx":300
  *     return adios_close(fd_p)
  * 
  * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -825,406 +853,134 @@ struct __pyx_opt_args_5adios_finalize {
   int mype;
 };
 
-/* "adios.pyx":261
+/* "adios.pyx":306
  * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
+ * ## ====================
+ * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm)
  * 
  */
 struct __pyx_opt_args_5adios_init_noxml {
   int __pyx_n;
-  struct PyMPICommObject *comm;
+  MPI_Comm comm;
 };
 
-/* "adios.pyx":567
- *         self.vp = NULL
+/* "adios.pyx":422
+ * ## ====================
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI_Comm comm = MPI_COMM_WORLD,
+ *                 char * parameters = ""):
  */
-struct __pyx_opt_args_5adios_13AdiosVariable_read {
+struct __pyx_opt_args_5adios_read_init {
   int __pyx_n;
-  PyObject *offset;
-  PyObject *count;
-};
-
-/* "mpi4py/MPI.pxd":106
- *     cdef int      flags
- * 
- * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
- *     type   PyMPIErrhandler_Type,
- *     object PyMPIErrhandlerObject,
- */
-struct PyMPIErrhandlerObject {
-  PyObject_HEAD
-  MPI_Errhandler ob_mpi;
-  int flags;
-};
-typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
-
-/* "mpi4py/MPI.pxd":92
- *     cdef int    ob_usrid
- * 
- * ctypedef public api class Group [             # <<<<<<<<<<<<<<
- *     type   PyMPIGroup_Type,
- *     object PyMPIGroupObject,
- */
-struct PyMPIGroupObject {
-  PyObject_HEAD
-  MPI_Group ob_mpi;
-  int flags;
+  ADIOS_READ_METHOD method;
+  MPI_Comm comm;
+  char *parameters;
 };
-typedef struct PyMPIGroupObject PyMPIGroupObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;
-
-/* "mpi4py/MPI.pxd":113
- *     cdef int            flags
+/* "adios.pyx":428
  * 
- * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
- *     type   PyMPIComm_Type,
- *     object PyMPICommObject,
- */
-struct PyMPICommObject {
-  PyObject_HEAD
-  MPI_Comm ob_mpi;
-  int flags;
-};
-typedef struct PyMPICommObject PyMPICommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;
-
-/* "mpi4py/MPI.pxd":144
- *     pass
  * 
- * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIIntercomm_Type,
- *     object PyMPIIntercommObject,
- */
-struct PyMPIIntercommObject {
-  struct PyMPICommObject __pyx_base;
-};
-typedef struct PyMPIIntercommObject PyMPIIntercommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
-
-/* "mpi4py/MPI.pxd":120
- *     cdef int      flags
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
- * ctypedef public api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIIntracomm_Type,
- *     object PyMPIIntracommObject,
  */
-struct PyMPIIntracommObject {
-  struct PyMPICommObject __pyx_base;
+struct __pyx_opt_args_5adios_read_finalize {
+  int __pyx_n;
+  ADIOS_READ_METHOD method;
 };
-typedef struct PyMPIIntracommObject PyMPIIntracommObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;
-
-/* "mpi4py/MPI.pxd":138
- *     pass
+/* "adios.pyx":520
+ *         self.vp = NULL
  * 
- * ctypedef public api class Distgraphcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIDistgraphcomm_Type,
- *     object PyMPIDistgraphcommObject,
+ *     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'
  */
-struct PyMPIDistgraphcommObject {
-  struct PyMPIIntracommObject __pyx_base;
+struct __pyx_opt_args_5adios_3var_read {
+  int __pyx_n;
+  PyObject *offset;
+  PyObject *count;
+  PyObject *from_steps;
+  PyObject *nsteps;
 };
-typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
 
-/* "adios.pyx":423
- * ## ==========
+/* "adios.pyx":431
+ *     return adios_read_finalize_method (method)
  * 
- * cdef class AdiosFile:             # <<<<<<<<<<<<<<
+ * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
  */
-struct __pyx_obj_5adios_AdiosFile {
+struct __pyx_obj_5adios_file {
   PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtab;
+  struct __pyx_vtabstruct_5adios_file *__pyx_vtab;
   ADIOS_FILE *fp;
   PyObject *name;
-  int groups_count;
-  int vars_count;
-  int attrs_count;
-  int tidx_start;
-  int ntimesteps;
+  int nvars;
+  int nattrs;
+  int current_step;
+  int last_step;
+  int endianness;
   int version;
   int file_size;
-  int endianness;
-  PyObject *group;
-};
-
-
-/* "mpi4py/MPI.pxd":63
- *     cdef int          flags
- * 
- * ctypedef public api class Request [             # <<<<<<<<<<<<<<
- *     type   PyMPIRequest_Type,
- *     object PyMPIRequestObject,
- */
-struct PyMPIRequestObject {
-  PyObject_HEAD
-  MPI_Request ob_mpi;
-  int flags;
-  PyObject *ob_buf;
-};
-typedef struct PyMPIRequestObject PyMPIRequestObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
-
-/* "mpi4py/MPI.pxd":77
- *     pass
- * 
- * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
- *     type   PyMPIGrequest_Type,
- *     object PyMPIGrequestObject,
- */
-struct PyMPIGrequestObject {
-  struct PyMPIRequestObject __pyx_base;
-  MPI_Request ob_grequest;
-};
-typedef struct PyMPIGrequestObject PyMPIGrequestObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
-
-/* "mpi4py/MPI.pxd":150
- *     pass
- * 
- * ctypedef public api class Win [             # <<<<<<<<<<<<<<
- *     type   PyMPIWin_Type,
- *     object PyMPIWinObject,
- */
-struct PyMPIWinObject {
-  PyObject_HEAD
-  MPI_Win ob_mpi;
-  int flags;
-};
-typedef struct PyMPIWinObject PyMPIWinObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;
-
-/* "mpi4py/MPI.pxd":56
- *     cdef int        flags
- * 
- * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
- *     type   PyMPIDatatype_Type,
- *     object PyMPIDatatypeObject,
- */
-struct PyMPIDatatypeObject {
-  PyObject_HEAD
-  MPI_Datatype ob_mpi;
-  int flags;
+  PyObject *var;
+  PyObject *attr;
 };
-typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
 
-/* "adios.pyx":529
- *         printAdiosGroup(self.gp)
+/* "adios.pyx":484
+ *         printfile(self.fp)
  * 
- * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
+ * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
- *     cdef AdiosGroup group
+ *     cdef file file
  */
-struct __pyx_obj_5adios_AdiosVariable {
+struct __pyx_obj_5adios_var {
   PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtab;
-  struct __pyx_obj_5adios_AdiosGroup *group;
+  struct __pyx_vtabstruct_5adios_var *__pyx_vtab;
+  struct __pyx_obj_5adios_file *file;
   ADIOS_VARINFO *vp;
   PyObject *name;
   int varid;
   PyObject *type;
   int ndim;
   PyObject *dims;
-  int timedim;
-  int characteristics_count;
-};
-
-
-/* "mpi4py/MPI.pxd":157
- *     cdef int     flags
- * 
- * ctypedef public api class File [             # <<<<<<<<<<<<<<
- *     type   PyMPIFile_Type,
- *     object PyMPIFileObject,
- */
-struct PyMPIFileObject {
-  PyObject_HEAD
-  MPI_File ob_mpi;
-  int flags;
-};
-typedef struct PyMPIFileObject PyMPIFileObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;
-
-/* "mpi4py/MPI.pxd":132
- *     pass
- * 
- * ctypedef public api class Graphcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIGraphcomm_Type,
- *     object PyMPIGraphcommObject,
- */
-struct PyMPIGraphcommObject {
-  struct PyMPIIntracommObject __pyx_base;
-};
-typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
-
-/* "mpi4py/MPI.pxd":71
- *     cdef object      ob_buf
- * 
- * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
- *     type   PyMPIPrequest_Type,
- *     object PyMPIPrequestObject,
- */
-struct PyMPIPrequestObject {
-  struct PyMPIRequestObject __pyx_base;
-};
-typedef struct PyMPIPrequestObject PyMPIPrequestObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
-
-/* "mpi4py/MPI.pxd":99
- *     cdef int       flags
- * 
- * ctypedef public api class Info [             # <<<<<<<<<<<<<<
- *     type   PyMPIInfo_Type,
- *     object PyMPIInfoObject,
- */
-struct PyMPIInfoObject {
-  PyObject_HEAD
-  MPI_Info ob_mpi;
-  int flags;
-};
-typedef struct PyMPIInfoObject PyMPIInfoObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
-
-/* "adios.pyx":479
- * 
- * 
- * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
- *     """ Private Memeber """
- *     cdef AdiosFile file
- */
-struct __pyx_obj_5adios_AdiosGroup {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtab;
-  struct __pyx_obj_5adios_AdiosFile *file;
-  ADIOS_GROUP *gp;
-  PyObject *name;
-  int grpid;
-  int vars_count;
-  int attrs_count;
-  int timestep;
-  int lasttimestep;
-  PyObject *var;
-};
-
-
-/* "mpi4py/MPI.pxd":126
- *     pass
- * 
- * ctypedef public api class Cartcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPICartcomm_Type,
- *     object PyMPICartcommObject,
- */
-struct PyMPICartcommObject {
-  struct PyMPIIntracommObject __pyx_base;
-};
-typedef struct PyMPICartcommObject PyMPICartcommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
-
-/* "mpi4py/MPI.pxd":49
- *     ctypedef MPI_Offset Offset "MPI_Offset"
- * 
- * ctypedef public api class Status [             # <<<<<<<<<<<<<<
- *     type   PyMPIStatus_Type,
- *     object PyMPIStatusObject,
- */
-struct PyMPIStatusObject {
-  PyObject_HEAD
-  MPI_Status ob_mpi;
-  int flags;
-};
-typedef struct PyMPIStatusObject PyMPIStatusObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
-
-/* "mpi4py/MPI.pxd":83
- *     cdef MPI_Request ob_grequest
- * 
- * ctypedef public api class Op [             # <<<<<<<<<<<<<<
- *     type   PyMPIOp_Type,
- *     object PyMPIOpObject,
- */
-struct PyMPIOpObject {
-  PyObject_HEAD
-  MPI_Op ob_mpi;
-  int flags;
-  PyObject *(*ob_func)(PyObject *, PyObject *);
-  int ob_usrid;
+  int nsteps;
 };
-typedef struct PyMPIOpObject PyMPIOpObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
-
-
-/* "adios.pyx":479
- * 
- * 
- * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
- *     """ Private Memeber """
- *     cdef AdiosFile file
- */
 
-struct __pyx_vtabstruct_5adios_AdiosGroup {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
-};
-static struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtabptr_5adios_AdiosGroup;
 
 
-/* "adios.pyx":423
- * ## ==========
+/* "adios.pyx":431
+ *     return adios_read_finalize_method (method)
  * 
- * cdef class AdiosFile:             # <<<<<<<<<<<<<<
+ * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
  */
 
-struct __pyx_vtabstruct_5adios_AdiosFile {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
+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);
 };
-static struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtabptr_5adios_AdiosFile;
+static struct __pyx_vtabstruct_5adios_file *__pyx_vtabptr_5adios_file;
 
 
-/* "adios.pyx":529
- *         printAdiosGroup(self.gp)
+/* "adios.pyx":484
+ *         printfile(self.fp)
  * 
- * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
+ * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
- *     cdef AdiosGroup group
+ *     cdef file file
  */
 
-struct __pyx_vtabstruct_5adios_AdiosVariable {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
-  PyObject *(*read)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_5adios_var {
+  PyObject *(*close)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch);
+  PyObject *(*read)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_3var_read *__pyx_optional_args);
+  PyObject *(*printself)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtabptr_5adios_AdiosVariable;
+static struct __pyx_vtabstruct_5adios_var *__pyx_vtabptr_5adios_var;
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -1276,6 +1032,14 @@ static struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtabptr_5adios_AdiosV
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
 #endif /* CYTHON_REFNANNY */
+#define __Pyx_XDECREF_SET(r, v) do {                            \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_XDECREF(tmp);                              \
+    } while (0)
+#define __Pyx_DECREF_SET(r, v) do {                             \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_DECREF(tmp);                               \
+    } while (0)
 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
@@ -1305,18 +1069,25 @@ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
 
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact); /*proto*/
-
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+#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 void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
-                                  int lineno, const char *filename); /*proto*/
+                                  int lineno, const char *filename,
+                                  int full_traceback); /*proto*/
+
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact); /*proto*/
 
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
@@ -1334,20 +1105,21 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
-#define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
-#define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+#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) : \
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
+               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
-#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
@@ -1355,37 +1127,91 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
 #if PY_MAJOR_VERSION >= 3
-static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/
+static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
+    PyObject *value;
+    value = PyDict_GetItemWithError(d, key);
+    if (unlikely(!value)) {
+        if (!PyErr_Occurred()) {
+            PyObject* args = PyTuple_Pack(1, key);
+            if (likely(args))
+                PyErr_SetObject(PyExc_KeyError, args);
+            Py_XDECREF(args);
+        }
+        return NULL;
+    }
+    Py_INCREF(value);
+    return value;
+}
 #else
-#define __Pyx_PyDict_Values(d) PyDict_Values(d)
+    #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
+static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
 
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+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 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 CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
 
-static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
 
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
+static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
+                                             int is_tuple, int has_known_size, int decref_tuple);
+
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_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 int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
+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*/
+static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
+                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
+
+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_FindPy2Metaclass(PyObject *bases); /*proto*/
+static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *);
 
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
-                                   PyObject *qualname, PyObject *modname); /*proto*/
+static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
 
-static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject *);
+static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *);
 
-static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject *);
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
 
 static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
@@ -1393,10 +1219,14 @@ static PyObject* __pyx_print = 0;
 static PyObject* __pyx_print_kwargs = 0;
 #endif
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value);
 
 static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
 
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value);
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -1409,7 +1239,7 @@ static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
     #define __Pyx_CREAL(z) ((z).real)
     #define __Pyx_CIMAG(z) ((z).imag)
 #endif
-#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
+#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX
     #define __Pyx_SET_CREAL(z,x) ((z).real(x))
     #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
 #else
@@ -1495,38 +1325,6 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do
     #endif
 #endif
 
-static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
-
-static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
-
-static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
-
-static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
-
-static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
-
-static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
-
-static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
-
-static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
-
-static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
-
-static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
-
-static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
-
-static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
-
-static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
-
-static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
-
-static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
-
-static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
-
 static int __Pyx_check_binary_version(void);
 
 #if !defined(__Pyx_PyIdentifier_FromString)
@@ -1588,33 +1386,13 @@ static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
 static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
 static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
 
-/* Module declarations from 'mpi4py.MPI' */
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Status = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Datatype = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Request = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Prequest = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Grequest = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Op = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Group = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Info = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Errhandler = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Comm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intracomm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Cartcomm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Graphcomm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Distgraphcomm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intercomm = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Win = 0;
-static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_File = 0;
-
 /* Module declarations from 'cython' */
 
 /* Module declarations from 'libc.stdint' */
 
 /* Module declarations from 'adios' */
-static PyTypeObject *__pyx_ptype_5adios_AdiosFile = 0;
-static PyTypeObject *__pyx_ptype_5adios_AdiosGroup = 0;
-static PyTypeObject *__pyx_ptype_5adios_AdiosVariable = 0;
+static PyTypeObject *__pyx_ptype_5adios_file = 0;
+static PyTypeObject *__pyx_ptype_5adios_var = 0;
 static PyObject *__pyx_f_5adios_init(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args); /*proto*/
 static int64_t __pyx_f_5adios_open(char *, char *, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args); /*proto*/
 static int64_t __pyx_f_5adios_set_group_size(int64_t, uint64_t, int __pyx_skip_dispatch); /*proto*/
@@ -1631,20 +1409,20 @@ static int64_t __pyx_f_5adios_declare_group(char *, char *, int, int __pyx_skip_
 static int __pyx_f_5adios_define_var(int64_t, char *, char *, int, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
 static int __pyx_f_5adios_define_attribute(int64_t, char *, char *, int, char *, char *, int __pyx_skip_dispatch); /*proto*/
 static int __pyx_f_5adios_select_method(int64_t, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *); /*proto*/
+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*/
 #define __Pyx_MODULE_NAME "adios"
 int __pyx_module_is_main_adios = 0;
 
 /* Implementation of 'adios' */
-static PyObject *__pyx_builtin_object;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, MPI_Comm __pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, MPI_Comm __pyx_v_comm); /* proto */
 static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size); /* proto */
 static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
 static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val); /* proto */
@@ -1653,394 +1431,383 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
 static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
 static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p); /* proto */
 static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype); /* proto */
-static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, MPI_Comm __pyx_v_comm); /* proto */
 static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size); /* proto */
 static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats); /* proto */
 static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets); /* proto */
 static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var); /* proto */
 static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path); /* proto */
-static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t); /* proto */
-static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static 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_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_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 */
+static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_5nvars_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_6nattrs_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_12current_step_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_9last_step_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_10endianness_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_7version_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_9file_size_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_4file_3var___get__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_4file_3var_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_4file_3var_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self); /* proto */
+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 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 */
+static PyObject *__pyx_pf_5adios_3var_6read(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count, PyObject *__pyx_v_from_steps, PyObject *__pyx_v_nsteps); /* proto */
+static PyObject *__pyx_pf_5adios_3var_8printself(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_3var_4name___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_3var_4name_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_3var_4name_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_3var_5varid_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_3var_4type___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_3var_4type_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_3var_4type_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_3var_4ndim_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_3var_4dims___get__(struct __pyx_obj_5adios_var *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_3var_4dims_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+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 int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
-static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static char __pyx_k_3[] = "Only contiguous arrays are supported.";
-static char __pyx_k_4[] = "Reading ... ";
-static char __pyx_k_5[] = "(bytes)";
-static char __pyx_k_7[] = "%15s : %lu";
-static char __pyx_k_8[] = "%15s : %d";
-static char __pyx_k_9[] = "%15s : %s";
-static char __pyx_k_11[] = "Not an open file";
-static char __pyx_k_12[] = "/";
-static char __pyx_k_14[] = "=== AdiosFile ===";
-static char __pyx_k_15[] = "Not an open group";
-static char __pyx_k_16[] = "=== AdiosGroup ===";
-static char __pyx_k_17[] = "Data type is not supported yet";
-static char __pyx_k_19[] = "Offset dimension mismatch";
-static char __pyx_k_20[] = "Count dimension mismatch.";
-static char __pyx_k_21[] = "Count is larger than shape.";
-static char __pyx_k_22[] = "[WARNING] bytes read :";
-static char __pyx_k_23[] = "=== AdiosVariable ===";
-static char __pyx_k_24[] = "ndarray is not C contiguous";
-static char __pyx_k_26[] = "ndarray is not Fortran contiguous";
-static char __pyx_k_28[] = "Non-native byte order not supported";
-static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)";
-static char __pyx_k_31[] = "Format string allocated too short, see comment in numpy.pxd";
-static char __pyx_k_34[] = "Format string allocated too short.";
-static char __pyx_k_36[] = "\n ADIOS is freely available under the terms of the BSD license described\n in the COPYING file in the top level directory of this source distribution.\n\n Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.\n";
-static char __pyx_k_37[] = "mpi4py.MPI";
-static char __pyx_k_38[] = "*";
-static char __pyx_k__B[] = "B";
-static char __pyx_k__H[] = "H";
-static char __pyx_k__I[] = "I";
-static char __pyx_k__L[] = "L";
-static char __pyx_k__O[] = "O";
-static char __pyx_k__Q[] = "Q";
-static char __pyx_k__b[] = "b";
-static char __pyx_k__d[] = "d";
-static char __pyx_k__f[] = "f";
-static char __pyx_k__g[] = "g";
-static char __pyx_k__h[] = "h";
-static char __pyx_k__i[] = "i";
-static char __pyx_k__l[] = "l";
-static char __pyx_k__q[] = "q";
-static char __pyx_k__NO[] = "NO";
-static char __pyx_k__Zd[] = "Zd";
-static char __pyx_k__Zf[] = "Zf";
-static char __pyx_k__Zg[] = "Zg";
-static char __pyx_k__fh[] = "fh";
-static char __pyx_k__fp[] = "fp";
-static char __pyx_k__gh[] = "gh";
-static char __pyx_k__gp[] = "gp";
-static char __pyx_k__np[] = "np";
-static char __pyx_k__vp[] = "vp";
-static char __pyx_k__MPI[] = "MPI";
-static char __pyx_k__NOW[] = "NOW";
-static char __pyx_k__YES[] = "YES";
-static char __pyx_k__all[] = "all";
-static char __pyx_k__end[] = "end";
-static char __pyx_k__val[] = "val";
-static char __pyx_k__var[] = "var";
-static char __pyx_k__FLAG[] = "FLAG";
-static char __pyx_k__byte[] = "byte";
-static char __pyx_k__comm[] = "comm";
-static char __pyx_k__copy[] = "copy";
-static char __pyx_k__dims[] = "dims";
-static char __pyx_k__fd_p[] = "fd_p";
-static char __pyx_k__file[] = "file";
-static char __pyx_k__fill[] = "fill";
-static char __pyx_k__int8[] = "int8";
-static char __pyx_k__long[] = "long";
-static char __pyx_k__mode[] = "mode";
-static char __pyx_k__mype[] = "mype";
-static char __pyx_k__name[] = "name";
-static char __pyx_k__ndim[] = "ndim";
-static char __pyx_k__path[] = "path";
-static char __pyx_k__read[] = "read";
-static char __pyx_k__real[] = "real";
-static char __pyx_k__size[] = "size";
-static char __pyx_k__type[] = "type";
-static char __pyx_k__when[] = "when";
-static char __pyx_k__LATER[] = "LATER";
-static char __pyx_k__adios[] = "adios";
-static char __pyx_k__array[] = "array";
-static char __pyx_k__close[] = "close";
-static char __pyx_k__count[] = "count";
-static char __pyx_k__dtype[] = "dtype";
-static char __pyx_k__flags[] = "flags";
-static char __pyx_k__fname[] = "fname";
-static char __pyx_k__group[] = "group";
-static char __pyx_k__grpid[] = "grpid";
-static char __pyx_k__int16[] = "int16";
-static char __pyx_k__int32[] = "int32";
-static char __pyx_k__int64[] = "int64";
-static char __pyx_k__numpy[] = "numpy";
-static char __pyx_k__print[] = "print";
-static char __pyx_k__range[] = "range";
-static char __pyx_k__short[] = "short";
-static char __pyx_k__split[] = "split";
-static char __pyx_k__stats[] = "stats";
-static char __pyx_k__uint8[] = "uint8";
-static char __pyx_k__value[] = "value";
-static char __pyx_k__varid[] = "varid";
-static char __pyx_k__zeros[] = "zeros";
-static char __pyx_k__config[] = "config";
-static char __pyx_k__double[] = "double";
-static char __pyx_k__method[] = "method";
-static char __pyx_k__object[] = "object";
-static char __pyx_k__offset[] = "offset";
-static char __pyx_k__string[] = "string";
-static char __pyx_k__uint16[] = "uint16";
-static char __pyx_k__uint32[] = "uint32";
-static char __pyx_k__uint64[] = "uint64";
-static char __pyx_k__values[] = "values";
-static char __pyx_k__UNKNOWN[] = "UNKNOWN";
-static char __pyx_k__complex[] = "complex";
-static char __pyx_k__float32[] = "float32";
-static char __pyx_k__float64[] = "float64";
-static char __pyx_k__integer[] = "integer";
-static char __pyx_k__timedim[] = "timedim";
-static char __pyx_k__unknown[] = "unknown";
-static char __pyx_k__version[] = "version";
-static char __pyx_k__DATATYPE[] = "DATATYPE";
-static char __pyx_k____main__[] = "__main__";
-static char __pyx_k____test__[] = "__test__";
-static char __pyx_k__float128[] = "float128";
-static char __pyx_k__group_id[] = "group_id";
-static char __pyx_k__itemsize[] = "itemsize";
-static char __pyx_k____class__[] = "__class__";
-static char __pyx_k__base_path[] = "base_path";
-static char __pyx_k__complex64[] = "complex64";
-static char __pyx_k__data_size[] = "data_size";
-static char __pyx_k__file_size[] = "file_size";
-static char __pyx_k__printself[] = "printself";
-static char __pyx_k__COMM_WORLD[] = "COMM_WORLD";
-static char __pyx_k__ValueError[] = "ValueError";
-static char __pyx_k____import__[] = "__import__";
-static char __pyx_k____module__[] = "__module__";
-static char __pyx_k__complex128[] = "complex128";
-static char __pyx_k__contiguous[] = "contiguous";
-static char __pyx_k__dimensions[] = "dimensions";
-static char __pyx_k__endianness[] = "endianness";
-static char __pyx_k__group_name[] = "group_name";
-static char __pyx_k__ntimesteps[] = "ntimesteps";
-static char __pyx_k__parameters[] = "parameters";
-static char __pyx_k__tidx_start[] = "tidx_start";
-static char __pyx_k__time_index[] = "time_index";
-static char __pyx_k__vars_count[] = "vars_count";
-static char __pyx_k__attrs_count[] = "attrs_count";
-static char __pyx_k__buffer_size[] = "buffer_size";
-static char __pyx_k__long_double[] = "long_double";
-static char __pyx_k__RuntimeError[] = "RuntimeError";
-static char __pyx_k____qualname__[] = "__qualname__";
-static char __pyx_k__groups_count[] = "groups_count";
-static char __pyx_k__var_namelist[] = "var_namelist";
-static char __pyx_k____metaclass__[] = "__metaclass__";
-static char __pyx_k__attr_namelist[] = "attr_namelist";
-static char __pyx_k__local_offsets[] = "local_offsets";
-static char __pyx_k__unsigned_byte[] = "unsigned_byte";
-static char __pyx_k__unsigned_long[] = "unsigned_long";
-static char __pyx_k____pyx_vtable__[] = "__pyx_vtable__";
-static char __pyx_k__double_complex[] = "double_complex";
-static char __pyx_k__group_namelist[] = "group_namelist";
-static char __pyx_k__unsigned_short[] = "unsigned_short";
-static char __pyx_k__unsigned_integer[] = "unsigned_integer";
-static char __pyx_k__BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
-static char __pyx_k__global_dimensions[] = "global_dimensions";
-static PyObject *__pyx_kp_s_11;
-static PyObject *__pyx_kp_s_12;
-static PyObject *__pyx_kp_s_14;
-static PyObject *__pyx_kp_s_15;
-static PyObject *__pyx_kp_s_16;
-static PyObject *__pyx_kp_s_17;
-static PyObject *__pyx_kp_s_19;
-static PyObject *__pyx_kp_s_20;
-static PyObject *__pyx_kp_s_21;
-static PyObject *__pyx_kp_s_22;
-static PyObject *__pyx_kp_s_23;
-static PyObject *__pyx_kp_u_24;
-static PyObject *__pyx_kp_u_26;
-static PyObject *__pyx_kp_u_28;
-static PyObject *__pyx_kp_s_3;
-static PyObject *__pyx_kp_u_30;
-static PyObject *__pyx_kp_u_31;
-static PyObject *__pyx_kp_u_34;
-static PyObject *__pyx_n_s_37;
-static PyObject *__pyx_n_s_38;
-static PyObject *__pyx_kp_s_4;
-static PyObject *__pyx_kp_s_5;
-static PyObject *__pyx_kp_s_7;
-static PyObject *__pyx_kp_s_8;
-static PyObject *__pyx_kp_s_9;
-static PyObject *__pyx_n_s__BUFFER_ALLOC_WHEN;
-static PyObject *__pyx_n_s__COMM_WORLD;
-static PyObject *__pyx_n_s__DATATYPE;
-static PyObject *__pyx_n_s__FLAG;
-static PyObject *__pyx_n_s__LATER;
-static PyObject *__pyx_n_s__MPI;
-static PyObject *__pyx_n_s__NO;
-static PyObject *__pyx_n_s__NOW;
-static PyObject *__pyx_n_s__RuntimeError;
-static PyObject *__pyx_n_s__UNKNOWN;
-static PyObject *__pyx_n_s__ValueError;
-static PyObject *__pyx_n_s__YES;
-static PyObject *__pyx_n_s____class__;
-static PyObject *__pyx_n_s____import__;
-static PyObject *__pyx_n_s____main__;
-static PyObject *__pyx_n_s____metaclass__;
-static PyObject *__pyx_n_s____module__;
-static PyObject *__pyx_n_s____pyx_vtable__;
-static PyObject *__pyx_n_s____qualname__;
-static PyObject *__pyx_n_s____test__;
-static PyObject *__pyx_n_s__adios;
-static PyObject *__pyx_n_s__all;
-static PyObject *__pyx_n_s__array;
-static PyObject *__pyx_n_s__attr_namelist;
-static PyObject *__pyx_n_s__attrs_count;
-static PyObject *__pyx_n_s__base_path;
-static PyObject *__pyx_n_s__buffer_size;
-static PyObject *__pyx_n_s__byte;
-static PyObject *__pyx_n_s__close;
-static PyObject *__pyx_n_s__comm;
-static PyObject *__pyx_n_s__complex;
-static PyObject *__pyx_n_s__complex128;
-static PyObject *__pyx_n_s__complex64;
-static PyObject *__pyx_n_s__config;
-static PyObject *__pyx_n_s__contiguous;
-static PyObject *__pyx_n_s__copy;
-static PyObject *__pyx_n_s__count;
-static PyObject *__pyx_n_s__data_size;
-static PyObject *__pyx_n_s__dimensions;
-static PyObject *__pyx_n_s__dims;
-static PyObject *__pyx_n_s__double;
-static PyObject *__pyx_n_s__double_complex;
-static PyObject *__pyx_n_s__dtype;
-static PyObject *__pyx_n_s__end;
-static PyObject *__pyx_n_s__endianness;
-static PyObject *__pyx_n_s__fd_p;
-static PyObject *__pyx_n_s__fh;
-static PyObject *__pyx_n_s__file;
-static PyObject *__pyx_n_s__file_size;
-static PyObject *__pyx_n_s__fill;
-static PyObject *__pyx_n_s__flags;
-static PyObject *__pyx_n_s__float128;
-static PyObject *__pyx_n_s__float32;
-static PyObject *__pyx_n_s__float64;
-static PyObject *__pyx_n_s__fname;
-static PyObject *__pyx_n_s__fp;
-static PyObject *__pyx_n_s__gh;
-static PyObject *__pyx_n_s__global_dimensions;
-static PyObject *__pyx_n_s__gp;
-static PyObject *__pyx_n_s__group;
-static PyObject *__pyx_n_s__group_id;
-static PyObject *__pyx_n_s__group_name;
-static PyObject *__pyx_n_s__group_namelist;
-static PyObject *__pyx_n_s__groups_count;
-static PyObject *__pyx_n_s__grpid;
-static PyObject *__pyx_n_s__int16;
-static PyObject *__pyx_n_s__int32;
-static PyObject *__pyx_n_s__int64;
-static PyObject *__pyx_n_s__int8;
-static PyObject *__pyx_n_s__integer;
-static PyObject *__pyx_n_s__itemsize;
-static PyObject *__pyx_n_s__local_offsets;
-static PyObject *__pyx_n_s__long;
-static PyObject *__pyx_n_s__long_double;
-static PyObject *__pyx_n_s__method;
-static PyObject *__pyx_n_s__mode;
-static PyObject *__pyx_n_s__mype;
-static PyObject *__pyx_n_s__name;
-static PyObject *__pyx_n_s__ndim;
-static PyObject *__pyx_n_s__np;
-static PyObject *__pyx_n_s__ntimesteps;
-static PyObject *__pyx_n_s__numpy;
-static PyObject *__pyx_n_s__object;
-static PyObject *__pyx_n_s__offset;
-static PyObject *__pyx_n_s__parameters;
-static PyObject *__pyx_n_s__path;
-static PyObject *__pyx_n_s__print;
-static PyObject *__pyx_n_s__printself;
-static PyObject *__pyx_n_s__range;
-static PyObject *__pyx_n_s__read;
-static PyObject *__pyx_n_s__real;
-static PyObject *__pyx_n_s__short;
-static PyObject *__pyx_n_s__size;
-static PyObject *__pyx_n_s__split;
-static PyObject *__pyx_n_s__stats;
-static PyObject *__pyx_n_s__string;
-static PyObject *__pyx_n_s__tidx_start;
-static PyObject *__pyx_n_s__time_index;
-static PyObject *__pyx_n_s__timedim;
-static PyObject *__pyx_n_s__type;
-static PyObject *__pyx_n_s__uint16;
-static PyObject *__pyx_n_s__uint32;
-static PyObject *__pyx_n_s__uint64;
-static PyObject *__pyx_n_s__uint8;
-static PyObject *__pyx_n_s__unknown;
-static PyObject *__pyx_n_s__unsigned_byte;
-static PyObject *__pyx_n_s__unsigned_integer;
-static PyObject *__pyx_n_s__unsigned_long;
-static PyObject *__pyx_n_s__unsigned_short;
-static PyObject *__pyx_n_s__val;
-static PyObject *__pyx_n_s__value;
-static PyObject *__pyx_n_s__values;
-static PyObject *__pyx_n_s__var;
-static PyObject *__pyx_n_s__var_namelist;
-static PyObject *__pyx_n_s__varid;
-static PyObject *__pyx_n_s__vars_count;
-static PyObject *__pyx_n_s__version;
-static PyObject *__pyx_n_s__vp;
-static PyObject *__pyx_n_s__when;
-static PyObject *__pyx_n_s__zeros;
+static PyObject *__pyx_tp_new_5adios_file(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_5adios_var(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static char __pyx_k_B[] = "B";
+static char __pyx_k_H[] = "H";
+static char __pyx_k_I[] = "I";
+static char __pyx_k_L[] = "L";
+static char __pyx_k_O[] = "O";
+static char __pyx_k_Q[] = "Q";
+static char __pyx_k_b[] = "b";
+static char __pyx_k_d[] = "d";
+static char __pyx_k_f[] = "f";
+static char __pyx_k_g[] = "g";
+static char __pyx_k_h[] = "h";
+static char __pyx_k_i[] = "i";
+static char __pyx_k_k[] = "k";
+static char __pyx_k_l[] = "l";
+static char __pyx_k_q[] = "q";
+static char __pyx_k_v[] = "v";
+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_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_val[] = "val";
+static char __pyx_k_var[] = "var";
+static char __pyx_k_FLAG[] = "FLAG";
+static char __pyx_k_bpls[] = "bpls";
+static char __pyx_k_byte[] = "byte";
+static char __pyx_k_comm[] = "comm";
+static char __pyx_k_copy[] = "copy";
+static char __pyx_k_dims[] = "dims";
+static char __pyx_k_fd_p[] = "fd_p";
+static char __pyx_k_file[] = "file";
+static char __pyx_k_fill[] = "fill";
+static char __pyx_k_int8[] = "int8";
+static char __pyx_k_long[] = "long";
+static char __pyx_k_main[] = "__main__";
+static char __pyx_k_mode[] = "mode";
+static char __pyx_k_mype[] = "mype";
+static char __pyx_k_name[] = "name";
+static char __pyx_k_ndim[] = "ndim";
+static char __pyx_k_path[] = "path";
+static char __pyx_k_read[] = "read";
+static char __pyx_k_real[] = "real";
+static char __pyx_k_size[] = "size";
+static char __pyx_k_test[] = "__test__";
+static char __pyx_k_type[] = "type";
+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_LATER[] = "LATER";
+static char __pyx_k_adios[] = "adios";
+static char __pyx_k_array[] = "array";
+static char __pyx_k_attrs[] = "attrs";
+static char __pyx_k_bytes[] = "(bytes)";
+static char __pyx_k_close[] = "close";
+static char __pyx_k_count[] = "count";
+static char __pyx_k_dtype[] = "dtype";
+static char __pyx_k_flags[] = "flags";
+static char __pyx_k_fname[] = "fname";
+static char __pyx_k_group[] = "group";
+static char __pyx_k_int16[] = "int16";
+static char __pyx_k_int32[] = "int32";
+static char __pyx_k_int64[] = "int64";
+static char __pyx_k_numpy[] = "numpy";
+static char __pyx_k_nvars[] = "nvars";
+static char __pyx_k_print[] = "print";
+static char __pyx_k_range[] = "range";
+static char __pyx_k_short[] = "short";
+static char __pyx_k_split[] = "split";
+static char __pyx_k_stats[] = "stats";
+static char __pyx_k_uint8[] = "uint8";
+static char __pyx_k_value[] = "value";
+static char __pyx_k_varid[] = "varid";
+static char __pyx_k_zeros[] = "zeros";
+static char __pyx_k_15s_lu[] = "%15s : %lu";
+static char __pyx_k_config[] = "config";
+static char __pyx_k_double[] = "double";
+static char __pyx_k_import[] = "__import__";
+static char __pyx_k_method[] = "method";
+static char __pyx_k_module[] = "__module__";
+static char __pyx_k_nattrs[] = "nattrs";
+static char __pyx_k_nsteps[] = "nsteps";
+static char __pyx_k_offset[] = "offset";
+static char __pyx_k_string[] = "string";
+static char __pyx_k_uint16[] = "uint16";
+static char __pyx_k_uint32[] = "uint32";
+static char __pyx_k_uint64[] = "uint64";
+static char __pyx_k_Reading[] = "Reading ... ";
+static char __pyx_k_UNKNOWN[] = "UNKNOWN";
+static char __pyx_k_complex[] = "complex";
+static char __pyx_k_float32[] = "float32";
+static char __pyx_k_float64[] = "float64";
+static char __pyx_k_integer[] = "integer";
+static char __pyx_k_prepare[] = "__prepare__";
+static char __pyx_k_readvar[] = "readvar";
+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_float128[] = "float128";
+static char __pyx_k_group_id[] = "group_id";
+static char __pyx_k_itemsize[] = "itemsize";
+static char __pyx_k_iterkeys[] = "iterkeys";
+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_data_size[] = "data_size";
+static char __pyx_k_file_size[] = "file_size";
+static char __pyx_k_last_step[] = "last_step";
+static char __pyx_k_metaclass[] = "__metaclass__";
+static char __pyx_k_printself[] = "printself";
+static char __pyx_k_ValueError[] = "ValueError";
+static char __pyx_k_complex128[] = "complex128";
+static char __pyx_k_contiguous[] = "contiguous";
+static char __pyx_k_dimensions[] = "dimensions";
+static char __pyx_k_endianness[] = "endianness";
+static char __pyx_k_from_steps[] = "from_steps";
+static char __pyx_k_group_name[] = "group_name";
+static char __pyx_k_parameters[] = "parameters";
+static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+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_RuntimeError[] = "RuntimeError";
+static char __pyx_k_current_step[] = "current_step";
+static char __pyx_k_var_namelist[] = "var_namelist";
+static char __pyx_k_AdiosVariable[] = "=== AdiosVariable ===";
+static char __pyx_k_attr_namelist[] = "attr_namelist";
+static char __pyx_k_local_offsets[] = "local_offsets";
+static char __pyx_k_unsigned_byte[] = "unsigned_byte";
+static char __pyx_k_unsigned_long[] = "unsigned_long";
+static char __pyx_k_double_complex[] = "double_complex";
+static char __pyx_k_unsigned_short[] = "unsigned_short";
+static char __pyx_k_Not_a_valid_var[] = "Not a valid var";
+static char __pyx_k_Not_an_open_var[] = "Not an open var";
+static char __pyx_k_Not_an_open_file[] = "Not an open file";
+static char __pyx_k_unsigned_integer[] = "unsigned_integer";
+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_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_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";
+static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd";
+static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported";
+static char __pyx_k_Only_contiguous_arrays_are_suppo[] = "Only contiguous arrays are supported.";
+static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short.";
+static PyObject *__pyx_kp_s_15s_d;
+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_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_DATATYPE;
+static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
+static PyObject *__pyx_n_s_FLAG;
+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_LATER;
+static PyObject *__pyx_n_s_NO;
+static PyObject *__pyx_n_s_NOW;
+static PyObject *__pyx_kp_s_No_valid_variable;
+static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
+static PyObject *__pyx_kp_s_Not_a_valid_var;
+static PyObject *__pyx_kp_s_Not_an_open_file;
+static PyObject *__pyx_kp_s_Not_an_open_var;
+static PyObject *__pyx_kp_s_Not_an_open_variable;
+static PyObject *__pyx_kp_s_Offset_dimension_mismatch;
+static PyObject *__pyx_kp_s_Only_contiguous_arrays_are_suppo;
+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_Users_jyc_project_adios_devel_w;
+static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_n_s_YES;
+static PyObject *__pyx_kp_s__10;
+static PyObject *__pyx_n_s_adios;
+static PyObject *__pyx_n_s_all;
+static PyObject *__pyx_n_s_array;
+static PyObject *__pyx_n_s_attr_namelist;
+static PyObject *__pyx_n_s_attrs;
+static PyObject *__pyx_n_s_base_path;
+static PyObject *__pyx_n_s_bpls;
+static PyObject *__pyx_n_s_buffer_size;
+static PyObject *__pyx_n_s_byte;
+static PyObject *__pyx_kp_s_bytes;
+static PyObject *__pyx_n_s_close;
+static PyObject *__pyx_n_s_comm;
+static PyObject *__pyx_n_s_complex;
+static PyObject *__pyx_n_s_complex128;
+static PyObject *__pyx_n_s_complex64;
+static PyObject *__pyx_n_s_config;
+static PyObject *__pyx_n_s_contiguous;
+static PyObject *__pyx_n_s_copy;
+static PyObject *__pyx_n_s_count;
+static PyObject *__pyx_n_s_current_step;
+static PyObject *__pyx_n_s_data_size;
+static PyObject *__pyx_n_s_dimensions;
+static PyObject *__pyx_n_s_dims;
+static PyObject *__pyx_n_s_doc;
+static PyObject *__pyx_n_s_double;
+static PyObject *__pyx_n_s_double_complex;
+static PyObject *__pyx_n_s_dtype;
+static PyObject *__pyx_n_s_end;
+static PyObject *__pyx_n_s_endianness;
+static PyObject *__pyx_n_s_f;
+static PyObject *__pyx_n_s_fd_p;
+static PyObject *__pyx_n_s_fh;
+static PyObject *__pyx_n_s_file;
+static PyObject *__pyx_n_s_file_size;
+static PyObject *__pyx_n_s_fill;
+static PyObject *__pyx_n_s_flags;
+static PyObject *__pyx_n_s_float128;
+static PyObject *__pyx_n_s_float32;
+static PyObject *__pyx_n_s_float64;
+static PyObject *__pyx_n_s_fname;
+static PyObject *__pyx_n_s_fp;
+static PyObject *__pyx_n_s_from_steps;
+static PyObject *__pyx_n_s_global_dimensions;
+static PyObject *__pyx_n_s_group;
+static PyObject *__pyx_n_s_group_id;
+static PyObject *__pyx_n_s_group_name;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_int16;
+static PyObject *__pyx_n_s_int32;
+static PyObject *__pyx_n_s_int64;
+static PyObject *__pyx_n_s_int8;
+static PyObject *__pyx_n_s_integer;
+static PyObject *__pyx_n_s_itemsize;
+static PyObject *__pyx_n_s_iterkeys;
+static PyObject *__pyx_n_s_k;
+static PyObject *__pyx_n_s_last_step;
+static PyObject *__pyx_n_s_local_offsets;
+static PyObject *__pyx_n_s_long;
+static PyObject *__pyx_n_s_long_double;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_metaclass;
+static PyObject *__pyx_n_s_method;
+static PyObject *__pyx_n_s_mode;
+static PyObject *__pyx_n_s_module;
+static PyObject *__pyx_n_s_mype;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_nattrs;
+static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous;
+static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou;
+static PyObject *__pyx_n_s_ndim;
+static PyObject *__pyx_n_s_np;
+static PyObject *__pyx_n_s_nsteps;
+static PyObject *__pyx_n_s_numpy;
+static PyObject *__pyx_n_s_nvars;
+static PyObject *__pyx_n_s_offset;
+static PyObject *__pyx_n_s_parameters;
+static PyObject *__pyx_n_s_path;
+static PyObject *__pyx_n_s_prepare;
+static PyObject *__pyx_n_s_print;
+static PyObject *__pyx_n_s_printself;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_qualname;
+static PyObject *__pyx_n_s_range;
+static PyObject *__pyx_n_s_read;
+static PyObject *__pyx_n_s_readvar;
+static PyObject *__pyx_n_s_real;
+static PyObject *__pyx_n_s_short;
+static PyObject *__pyx_n_s_size;
+static PyObject *__pyx_n_s_split;
+static PyObject *__pyx_n_s_stats;
+static PyObject *__pyx_n_s_string;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_n_s_time_index;
+static PyObject *__pyx_n_s_time_steps;
+static PyObject *__pyx_n_s_type;
+static PyObject *__pyx_n_s_uint16;
+static PyObject *__pyx_n_s_uint32;
+static PyObject *__pyx_n_s_uint64;
+static PyObject *__pyx_n_s_uint8;
+static PyObject *__pyx_n_s_unknown;
+static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd;
+static PyObject *__pyx_n_s_unsigned_byte;
+static PyObject *__pyx_n_s_unsigned_integer;
+static PyObject *__pyx_n_s_unsigned_long;
+static PyObject *__pyx_n_s_unsigned_short;
+static PyObject *__pyx_n_s_v;
+static PyObject *__pyx_n_s_val;
+static PyObject *__pyx_n_s_value;
+static PyObject *__pyx_n_s_var;
+static PyObject *__pyx_n_s_var_namelist;
+static PyObject *__pyx_n_s_varid;
+static PyObject *__pyx_n_s_varname;
+static PyObject *__pyx_n_s_vars;
+static PyObject *__pyx_n_s_version;
+static PyObject *__pyx_n_s_vp;
+static PyObject *__pyx_n_s_when;
+static PyObject *__pyx_n_s_zeros;
 static PyObject *__pyx_int_0;
 static PyObject *__pyx_int_1;
 static PyObject *__pyx_int_2;
@@ -2049,38 +1816,45 @@ static PyObject *__pyx_int_5;
 static PyObject *__pyx_int_6;
 static PyObject *__pyx_int_7;
 static PyObject *__pyx_int_9;
-static PyObject *__pyx_int_neg_1;
 static PyObject *__pyx_int_10;
 static PyObject *__pyx_int_11;
-static PyObject *__pyx_int_15;
 static PyObject *__pyx_int_50;
 static PyObject *__pyx_int_51;
 static PyObject *__pyx_int_52;
 static PyObject *__pyx_int_54;
-static struct PyMPICommObject *__pyx_k_1;
-static struct PyMPICommObject *__pyx_k_2;
-static struct PyMPICommObject *__pyx_k_6;
-static struct PyMPICommObject *__pyx_k_10;
-static PyObject *__pyx_k_tuple_13;
-static PyObject *__pyx_k_tuple_18;
-static PyObject *__pyx_k_tuple_25;
-static PyObject *__pyx_k_tuple_27;
-static PyObject *__pyx_k_tuple_29;
-static PyObject *__pyx_k_tuple_32;
-static PyObject *__pyx_k_tuple_33;
-static PyObject *__pyx_k_tuple_35;
-
-/* "adios.pyx":211
- * ## ==========
- * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
+static PyObject *__pyx_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 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__19;
+static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_codeobj__20;
+static PyObject *__pyx_codeobj__22;
+
+/* "adios.pyx":256
+ * ## ====================
+ * 
+ * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm)
  * 
  */
 
 static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_1;
+  MPI_Comm __pyx_v_comm = __pyx_k_;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2094,22 +1868,29 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
     }
   }
 
-  /* "adios.pyx":212
+  /* "adios.pyx":257
  * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
- *     return adios_init(config, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):
+ *     return adios_init(config, comm)             # <<<<<<<<<<<<<<
  * 
  * cpdef int64_t open(char * group_name,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(adios_init(__pyx_v_config, __pyx_v_comm->ob_mpi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "adios.pyx":256
+ * ## ====================
+ * 
+ * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2124,7 +1905,7 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
 static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_config;
-  struct PyMPICommObject *__pyx_v_comm = 0;
+  MPI_Comm __pyx_v_comm;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -2132,9 +1913,8 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__config,&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_config,&__pyx_n_s_comm,0};
     PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)__pyx_k_1;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -2147,16 +1927,16 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__config)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_config)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2166,36 +1946,29 @@ 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 = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
+    __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;}
+    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;}
+    } 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 = 211; __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 = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_5adios_init(__pyx_self, __pyx_v_config, __pyx_v_comm);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":211
- * ## ==========
- * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, MPI_Comm __pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2207,14 +1980,13 @@ 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 = 211; __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 = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2225,8 +1997,8 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
   return __pyx_r;
 }
 
-/* "adios.pyx":214
- *     return adios_init(config, comm.ob_mpi)
+/* "adios.pyx":259
+ *     return adios_init(config, comm)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
  *                    char * name,
@@ -2235,7 +2007,7 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
 
 static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_2;
+  MPI_Comm __pyx_v_comm = __pyx_k__2;
   int64_t __pyx_v_fd;
   CYTHON_UNUSED int __pyx_v_result;
   int64_t __pyx_r;
@@ -2247,18 +2019,18 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
     }
   }
 
-  /* "adios.pyx":220
+  /* "adios.pyx":265
  *     cdef int64_t fd
  *     cdef int result
- *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ *     result = adios_open(&fd, group_name, name, mode, comm)             # <<<<<<<<<<<<<<
  *     return fd
  * 
  */
-  __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm->ob_mpi);
+  __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
-  /* "adios.pyx":221
+  /* "adios.pyx":266
  *     cdef int result
- *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)
+ *     result = adios_open(&fd, group_name, name, mode, comm)
  *     return fd             # <<<<<<<<<<<<<<
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):
@@ -2266,7 +2038,15 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":259
+ *     return adios_init(config, comm)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -2278,7 +2058,7 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
   char *__pyx_v_group_name;
   char *__pyx_v_name;
   char *__pyx_v_mode;
-  struct PyMPICommObject *__pyx_v_comm = 0;
+  MPI_Comm __pyx_v_comm;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -2286,9 +2066,8 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("open (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_name,&__pyx_n_s__name,&__pyx_n_s__mode,&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group_name,&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
     PyObject* values[4] = {0,0,0,0};
-    values[3] = (PyObject *)__pyx_k_2;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -2303,26 +2082,26 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[3] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2334,38 +2113,31 @@ 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 = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_mode = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_mode) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_comm = ((struct PyMPICommObject *)values[3]);
+    __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;}
+    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;}
+    } 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 = 214; __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 = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_5adios_2open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":214
- *     return adios_init(config, comm.ob_mpi)
- * 
- * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
- *                    char * name,
- *                    char * mode,
- */
-
-static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, MPI_Comm __pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int64_t __pyx_t_1;
@@ -2379,14 +2151,13 @@ 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_to_py_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2397,7 +2168,7 @@ static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char
   return __pyx_r;
 }
 
-/* "adios.pyx":223
+/* "adios.pyx":268
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2413,7 +2184,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":226
+  /* "adios.pyx":271
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -2422,7 +2193,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":227
+  /* "adios.pyx":272
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -2432,7 +2203,15 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios.pyx":268
+ *     return fd
+ * 
+ * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
+ *     cdef uint64_t total_size
+ *     cdef int result
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -2450,7 +2229,7 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__data_size,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_data_size,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2464,16 +2243,16 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data_size)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2481,30 +2260,24 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_data_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_4set_group_size(__pyx_self, __pyx_v_fd_p, __pyx_v_data_size);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":223
- *     return fd
- * 
- * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
- *     cdef uint64_t total_size
- *     cdef int result
- */
-
 static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -2514,14 +2287,13 @@ 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_to_py_int64_t(__pyx_f_5adios_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2532,7 +2304,7 @@ static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":229
+/* "adios.pyx":274
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2555,23 +2327,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":231
+  /* "adios.pyx":276
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *         val_ = val
  *     else:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":232
+    /* "adios.pyx":277
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:
  *         val_ = val             # <<<<<<<<<<<<<<
@@ -2584,41 +2356,38 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
   }
   /*else*/ {
 
-    /* "adios.pyx":234
+    /* "adios.pyx":279
  *         val_ = val
  *     else:
  *         val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_INCREF(((PyObject *)__pyx_v_val));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_val));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_val));
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    __pyx_t_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__copy), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_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;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_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;}
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_5);
     __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":236
+  /* "adios.pyx":281
  *         val_ = np.array(val, copy=True)
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)             # <<<<<<<<<<<<<<
@@ -2628,14 +2397,21 @@ 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;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* "adios.pyx":274
+ *     return total_size
+ * 
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_WriteUnraisable("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_WriteUnraisable("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_val_);
@@ -2656,7 +2432,7 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2671,21 +2447,21 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2694,20 +2470,22 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_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_val = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
   __pyx_r = __pyx_pf_5adios_6write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2716,14 +2494,6 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
   return __pyx_r;
 }
 
-/* "adios.pyx":229
- *     return total_size
- * 
- * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
- *     cdef np.ndarray val_
- *     if val.flags.contiguous:
- */
-
 static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -2733,14 +2503,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2751,7 +2520,7 @@ static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":238
+/* "adios.pyx":283
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2765,7 +2534,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":239
+  /* "adios.pyx":284
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2775,7 +2544,15 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios.pyx":283
+ *     return adios_write (fd_p, name, <void *> val_.data)
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -2794,7 +2571,7 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_int (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2809,21 +2586,21 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2832,31 +2609,25 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_8write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":238
- *     return adios_write (fd_p, name, <void *> val_.data)
- * 
- * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
 static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -2866,14 +2637,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -2884,7 +2654,7 @@ static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":241
+/* "adios.pyx":286
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -2898,7 +2668,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":242
+  /* "adios.pyx":287
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2908,7 +2678,15 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios.pyx":286
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -2927,7 +2705,7 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_long (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2942,21 +2720,21 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 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--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 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_long") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __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 = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2965,31 +2743,25 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_AsLong(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_10write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":241
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
 static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -2999,14 +2771,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3017,7 +2788,7 @@ static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":244
+/* "adios.pyx":289
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -3031,7 +2802,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":245
+  /* "adios.pyx":290
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -3041,7 +2812,15 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios.pyx":289
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3060,7 +2839,7 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_float (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3075,21 +2854,21 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 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--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 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_float") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __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 = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3098,31 +2877,25 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_12write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":244
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
 static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3132,14 +2905,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3150,7 +2922,7 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios.pyx":247
+/* "adios.pyx":292
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -3172,7 +2944,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":248
+  /* "adios.pyx":293
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -3180,75 +2952,84 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_3)) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_3));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_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_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_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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":249
+  /* "adios.pyx":294
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print "Reading ... ", val.itemsize * val.size, "(bytes)"             # <<<<<<<<<<<<<<
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_4));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_kp_s_4));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4));
+  __Pyx_INCREF(__pyx_kp_s_Reading);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_Reading);
+  __Pyx_GIVEREF(__pyx_kp_s_Reading);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_5));
-  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_kp_s_5));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5));
+  __Pyx_INCREF(__pyx_kp_s_bytes);
+  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, ((PyObject *)__pyx_t_1), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":250
+  /* "adios.pyx":295
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)             # <<<<<<<<<<<<<<
  * 
  * cpdef int close(int64_t fd_p):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyInt_from_py_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = adios_read(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val->data), __pyx_t_5);
   goto __pyx_L0;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* "adios.pyx":292
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_WriteUnraisable("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_WriteUnraisable("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -3268,7 +3049,7 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3283,21 +3064,21 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 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--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 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, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __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 = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3306,20 +3087,22 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_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 = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
   __pyx_r = __pyx_pf_5adios_14read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3328,14 +3111,6 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
   return __pyx_r;
 }
 
-/* "adios.pyx":247
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
- *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
- *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
- */
-
 static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3345,14 +3120,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3363,7 +3137,7 @@ static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":252
+/* "adios.pyx":297
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3377,7 +3151,7 @@ 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":253
+  /* "adios.pyx":298
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
@@ -3387,7 +3161,15 @@ static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_sk
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":297
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ * 
+ * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
+ *     return adios_close(fd_p)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3404,7 +3186,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_from_py_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -3413,18 +3195,12 @@ static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_a
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_16close(__pyx_self, ((int64_t)__pyx_v_fd_p));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":252
- *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
- * 
- * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
- *     return adios_close(fd_p)
- * 
- */
-
 static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3434,14 +3210,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3452,7 +3227,7 @@ static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int
   return __pyx_r;
 }
 
-/* "adios.pyx":255
+/* "adios.pyx":300
  *     return adios_close(fd_p)
  * 
  * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -3476,22 +3251,29 @@ static PyObject *__pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
 
-  /* "adios.pyx":256
+  /* "adios.pyx":301
  * 
  * cpdef finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
  * 
- * ## ==========
+ * ## ====================
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(adios_finalize(__pyx_v_mype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "adios.pyx":300
+ *     return adios_close(fd_p)
+ * 
+ * cpdef 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);
@@ -3513,7 +3295,7 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("finalize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mype,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mype,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3527,12 +3309,12 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mype);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mype);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3542,32 +3324,26 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __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;}
     } else {
       __pyx_v_mype = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_18finalize(__pyx_self, __pyx_v_mype);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":255
- *     return adios_close(fd_p)
- * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
- *     return adios_finalize(mype)
- * 
- */
-
 static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3580,14 +3356,13 @@ 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 = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3598,17 +3373,17 @@ static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":261
+/* "adios.pyx":306
  * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
+ * ## ====================
+ * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm)
  * 
  */
 
 static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init_noxml *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_6;
+  MPI_Comm __pyx_v_comm = __pyx_k__3;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init_noxml", 0);
@@ -3618,17 +3393,25 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
     }
   }
 
-  /* "adios.pyx":262
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
- *     return adios_init_noxml(comm.ob_mpi)             # <<<<<<<<<<<<<<
+  /* "adios.pyx":307
+ * ## ====================
+ * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):
+ *     return adios_init_noxml(comm)             # <<<<<<<<<<<<<<
  * 
  * cpdef int allocate_buffer(int when,
  */
-  __pyx_r = adios_init_noxml(__pyx_v_comm->ob_mpi);
+  __pyx_r = adios_init_noxml(__pyx_v_comm);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":306
+ * ## ADIOS No-XML API
+ * ## ====================
+ * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3637,7 +3420,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
 /* Python wrapper */
 static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyMPICommObject *__pyx_v_comm = 0;
+  MPI_Comm __pyx_v_comm;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -3645,9 +3428,8 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init_noxml (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)__pyx_k_6;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -3660,12 +3442,12 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3674,35 +3456,28 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
+    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;}
+    } 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 = 261; __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 = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_5adios_20init_noxml(__pyx_self, __pyx_v_comm);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":261
- * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, MPI_Comm __pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -3716,14 +3491,13 @@ 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 = PyInt_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3734,8 +3508,8 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":264
- *     return adios_init_noxml(comm.ob_mpi)
+/* "adios.pyx":309
+ *     return adios_init_noxml(comm)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
  *                           uint64_t buffer_size):
@@ -3748,17 +3522,25 @@ 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":267
+  /* "adios.pyx":311
+ * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
- *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
- *                                  buffer_size)             # <<<<<<<<<<<<<<
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
+ *                                  buffer_size)
  * 
- * cpdef int64_t declare_group(char * name,
  */
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":309
+ *     return adios_init_noxml(comm)
+ * 
+ * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
+ *                           uint64_t buffer_size):
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3776,7 +3558,7 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__when,&__pyx_n_s__buffer_size,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_when,&__pyx_n_s_buffer_size,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3790,16 +3572,16 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_when)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer_size)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffer_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3807,30 +3589,24 @@ 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_AsInt(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_buffer_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_22allocate_buffer(__pyx_self, __pyx_v_when, __pyx_v_buffer_size);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":264
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
- *                           uint64_t buffer_size):
- *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
- */
-
 static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3840,14 +3616,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -3858,7 +3633,7 @@ static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios.pyx":269
+/* "adios.pyx":314
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
@@ -3873,7 +3648,7 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group", 0);
 
-  /* "adios.pyx":272
+  /* "adios.pyx":317
  *                             char * time_index,
  *                             int stats):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
@@ -3882,16 +3657,16 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
  */
   __pyx_v_id = 0;
 
-  /* "adios.pyx":276
+  /* "adios.pyx":318
+ *                             int stats):
+ *     cdef int64_t id = 0
+ *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
  *                          name,
  *                          time_index,
- *                          <ADIOS_FLAG> stats)             # <<<<<<<<<<<<<<
- *     return id
- * 
  */
   adios_declare_group((&__pyx_v_id), __pyx_v_name, __pyx_v_time_index, ((ADIOS_FLAG)__pyx_v_stats));
 
-  /* "adios.pyx":277
+  /* "adios.pyx":322
  *                          time_index,
  *                          <ADIOS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -3901,7 +3676,15 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":314
+ *                                  buffer_size)
+ * 
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index,
+ *                             int stats):
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3920,7 +3703,7 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__name,&__pyx_n_s__time_index,&__pyx_n_s__stats,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_time_index,&__pyx_n_s_stats,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3935,21 +3718,21 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        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--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stats)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3958,31 +3741,25 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_time_index = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_time_index) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_stats = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 269; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
   __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_24declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":269
- *                                  buffer_size)
- * 
- * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
- */
-
 static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3992,14 +3769,13 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("declare_group", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_f_5adios_declare_group(__pyx_v_name, __pyx_v_time_index, __pyx_v_stats, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -4010,7 +3786,7 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":279
+/* "adios.pyx":324
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -4024,17 +3800,25 @@ static int __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, char *__pyx_v_nam
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var", 0);
 
-  /* "adios.pyx":291
- *                             dimensions,
- *                             global_dimensions,
- *                             local_offsets)             # <<<<<<<<<<<<<<
- * 
- * cpdef int define_attribute (int64_t group,
+  /* "adios.pyx":331
+ *                      char * global_dimensions,
+ *                      char * local_offsets):
+ *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
+ *                             name, path,
+ *                             <ADIOS_DATATYPES> type,
  */
   __pyx_r = adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":324
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -4057,7 +3841,7 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_id,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__dimensions,&__pyx_n_s__global_dimensions,&__pyx_n_s__local_offsets,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group_id,&__pyx_n_s_name,&__pyx_n_s_path,&__pyx_n_s_type,&__pyx_n_s_dimensions,&__pyx_n_s_global_dimensions,&__pyx_n_s_local_offsets,0};
     PyObject* values[7] = {0,0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4076,41 +3860,41 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_id)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
-        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimensions)) != 0)) kw_args--;
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dimensions)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
-        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__global_dimensions)) != 0)) kw_args--;
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_global_dimensions)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  6:
-        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__local_offsets)) != 0)) kw_args--;
+        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_local_offsets)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -4123,35 +3907,29 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
       values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
     }
-    __pyx_v_group_id = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_dimensions = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_global_dimensions = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_global_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_local_offsets = __Pyx_PyObject_AsString(values[6]); if (unlikely((!__pyx_v_local_offsets) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 279; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
   __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_26define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":279
- *     return id
- * 
- * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
- *                      char * name,
- *                      char * path,
- */
-
 static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4161,14 +3939,13 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("define_var", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -4179,7 +3956,7 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":293
+/* "adios.pyx":338
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -4193,17 +3970,25 @@ static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, char *__pyx_v_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios.pyx":304
- *                                    <ADIOS_DATATYPES> type,
- *                                    value,
- *                                    var)             # <<<<<<<<<<<<<<
- * 
- * cpdef int select_method (int64_t group,
+  /* "adios.pyx":344
+ *                             char * value,
+ *                             char * var):
+ *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
+ *                                    name,
+ *                                    path,
  */
   __pyx_r = adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_value, __pyx_v_var);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios.pyx":338
+ *                             local_offsets)
+ * 
+ * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
+ *                             char * name,
+ *                             char * path,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -4225,7 +4010,7 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__value,&__pyx_n_s__var,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_name,&__pyx_n_s_path,&__pyx_n_s_type,&__pyx_n_s_value,&__pyx_n_s_var,0};
     PyObject* values[6] = {0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4243,36 +4028,36 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
-        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
-        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__var)) != 0)) kw_args--;
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4284,34 +4069,28 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_value = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_value) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_var = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_var) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
   __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_28define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":293
- *                             local_offsets)
- * 
- * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
- *                             char * name,
- *                             char * path,
- */
-
 static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4321,14 +4100,13 @@ 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 = PyInt_FromLong(__pyx_f_5adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -4339,7 +4117,7 @@ static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":306
+/* "adios.pyx":351
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -4353,22 +4131,30 @@ static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, char *__pyx_v_met
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method", 0);
 
-  /* "adios.pyx":313
+  /* "adios.pyx":355
+ *                          char * parameters,
+ *                          char * base_path):
+ *     return adios_select_method (group,             # <<<<<<<<<<<<<<
  *                                 method,
  *                                 parameters,
- *                                 base_path)             # <<<<<<<<<<<<<<
- * 
- * 
  */
   __pyx_r = adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
   goto __pyx_L0;
 
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
+  /* "adios.pyx":351
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters,
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 /* Python wrapper */
 static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
@@ -4383,7 +4169,7 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__method,&__pyx_n_s__parameters,&__pyx_n_s__base_path,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_method,&__pyx_n_s_parameters,&__pyx_n_s_base_path,0};
     PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4399,26 +4185,26 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__method)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__parameters)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base_path)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_base_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -4428,32 +4214,26 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_group = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_method = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_method) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_base_path = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_base_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 306; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
   __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_5adios_30select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":306
- *                                    var)
- * 
- * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
- *                          char * method,
- *                          char * parameters,
- */
-
 static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4463,14 +4243,13 @@ static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("select_method", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -4481,16 +4260,15 @@ static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":320
- * ## ==========
+/* "adios.pyx":365
+ * ## ====================
  * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
  *     cdef type ntype = None
  *     if t == adios_byte:
  */
 
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
-static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   PyObject *__pyx_v_ntype = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4501,9 +4279,9 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adios2nptype", 0);
 
-  /* "adios.pyx":321
+  /* "adios.pyx":366
  * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):
+ * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None             # <<<<<<<<<<<<<<
  *     if t == adios_byte:
  *         ntype = np.int8
@@ -4511,7 +4289,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyObject*)Py_None);
 
-  /* "adios.pyx":346
+  /* "adios.pyx":391
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4520,8 +4298,8 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
   switch (__pyx_v_t) {
 
-    /* "adios.pyx":322
- * cpdef type adios2nptype(ADIOS_DATATYPES t):
+    /* "adios.pyx":367
+ * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
  *         ntype = np.int8
@@ -4529,25 +4307,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_byte:
 
-    /* "adios.pyx":323
+    /* "adios.pyx":368
  *     cdef type ntype = None
  *     if t == adios_byte:
  *         ntype = np.int8             # <<<<<<<<<<<<<<
  *     elif t == adios_short:
  *         ntype = np.int16
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":324
+    /* "adios.pyx":369
  *     if t == adios_byte:
  *         ntype = np.int8
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -4556,25 +4333,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_short:
 
-    /* "adios.pyx":325
+    /* "adios.pyx":370
  *         ntype = np.int8
  *     elif t == adios_short:
  *         ntype = np.int16             # <<<<<<<<<<<<<<
  *     elif t == adios_integer:
  *         ntype = np.int32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":326
+    /* "adios.pyx":371
  *     elif t == adios_short:
  *         ntype = np.int16
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -4583,25 +4359,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_integer:
 
-    /* "adios.pyx":327
+    /* "adios.pyx":372
  *         ntype = np.int16
  *     elif t == adios_integer:
  *         ntype = np.int32             # <<<<<<<<<<<<<<
  *     elif t == adios_long:
  *         ntype = np.int64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":328
+    /* "adios.pyx":373
  *     elif t == adios_integer:
  *         ntype = np.int32
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -4610,25 +4385,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_long:
 
-    /* "adios.pyx":329
+    /* "adios.pyx":374
  *         ntype = np.int32
  *     elif t == adios_long:
  *         ntype = np.int64             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":330
+    /* "adios.pyx":375
  *     elif t == adios_long:
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -4637,25 +4411,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_byte:
 
-    /* "adios.pyx":331
+    /* "adios.pyx":376
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__uint8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":332
+    /* "adios.pyx":377
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -4664,25 +4437,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_short:
 
-    /* "adios.pyx":333
+    /* "adios.pyx":378
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__uint16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":334
+    /* "adios.pyx":379
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -4691,25 +4463,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_integer:
 
-    /* "adios.pyx":335
+    /* "adios.pyx":380
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":336
+    /* "adios.pyx":381
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -4718,25 +4489,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_long:
 
-    /* "adios.pyx":337
+    /* "adios.pyx":382
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64             # <<<<<<<<<<<<<<
  *     elif t == adios_real:
  *         ntype = np.float32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__uint64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":338
+    /* "adios.pyx":383
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -4745,25 +4515,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_real:
 
-    /* "adios.pyx":339
+    /* "adios.pyx":384
  *         ntype = np.uint64
  *     elif t == adios_real:
  *         ntype = np.float32             # <<<<<<<<<<<<<<
  *     elif t == adios_double:
  *         ntype = np.float64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":340
+    /* "adios.pyx":385
  *     elif t == adios_real:
  *         ntype = np.float32
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -4772,25 +4541,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_double:
 
-    /* "adios.pyx":341
+    /* "adios.pyx":386
  *         ntype = np.float32
  *     elif t == adios_double:
  *         ntype = np.float64             # <<<<<<<<<<<<<<
  *     elif t == adios_long_double:
  *         ntype = np.float128
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":342
+    /* "adios.pyx":387
  *     elif t == adios_double:
  *         ntype = np.float64
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -4799,25 +4567,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_long_double:
 
-    /* "adios.pyx":343
+    /* "adios.pyx":388
  *         ntype = np.float64
  *     elif t == adios_long_double:
  *         ntype = np.float128             # <<<<<<<<<<<<<<
  *     elif t == adios_complex:
  *         ntype = np.complex64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":344
+    /* "adios.pyx":389
  *     elif t == adios_long_double:
  *         ntype = np.float128
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -4826,25 +4593,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_complex:
 
-    /* "adios.pyx":345
+    /* "adios.pyx":390
  *         ntype = np.float128
  *     elif t == adios_complex:
  *         ntype = np.complex64             # <<<<<<<<<<<<<<
  *     elif t == adios_double_complex:
  *         ntype = np.complex128
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__complex64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":346
+    /* "adios.pyx":391
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4853,26 +4619,25 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_double_complex:
 
-    /* "adios.pyx":347
+    /* "adios.pyx":392
  *         ntype = np.complex64
  *     elif t == adios_double_complex:
  *         ntype = np.complex128             # <<<<<<<<<<<<<<
  *     else:
  *         ntype = None
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
     default:
 
-    /* "adios.pyx":349
+    /* "adios.pyx":394
  *         ntype = np.complex128
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -4880,105 +4645,52 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  *     return ntype
  */
     __Pyx_INCREF(Py_None);
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)Py_None);
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)Py_None));
     break;
   }
 
-  /* "adios.pyx":351
+  /* "adios.pyx":396
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
  * 
- * """
+ * cdef printfile(ADIOS_FILE * f):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   __Pyx_INCREF(((PyObject *)__pyx_v_ntype));
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ntype);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t) {
-  ADIOS_DATATYPES __pyx_v_t;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("adios2nptype (wrapper)", 0);
-  assert(__pyx_arg_t); {
-    __pyx_v_t = ((ADIOS_DATATYPES)PyInt_AsLong(__pyx_arg_t)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_32adios2nptype(__pyx_self, ((ADIOS_DATATYPES)__pyx_v_t));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":320
- * ## ==========
+  /* "adios.pyx":365
+ * ## ====================
  * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
  *     cdef type ntype = None
  *     if t == adios_byte:
  */
 
-static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("adios2nptype", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_t, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ntype);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":364
- * """
+/* "adios.pyx":398
+ *     return ntype
  * 
- * cdef printAdiosFile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
+ * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)
+ *     print '%15s : %d' % ('nvars', f.nvars)
  */
 
-static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *__pyx_v_f) {
+static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4989,463 +4701,292 @@ static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosFile", 0);
+  __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios.pyx":365
+  /* "adios.pyx":399
  * 
- * cdef printAdiosFile(ADIOS_FILE * f):
+ * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)
+ *     print '%15s : %d' % ('nvars', f.nvars)
+ *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fh));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fh));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fh));
+  __Pyx_INCREF(__pyx_n_s_fh);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fh);
+  __Pyx_GIVEREF(__pyx_n_s_fh);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":366
- * cdef printAdiosFile(ADIOS_FILE * f):
+  /* "adios.pyx":400
+ * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ *     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 = PyInt_FromLong(__pyx_v_f->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__groups_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__groups_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__groups_count));
+  __Pyx_INCREF(__pyx_n_s_nvars);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nvars);
+  __Pyx_GIVEREF(__pyx_n_s_nvars);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":367
+  /* "adios.pyx":401
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ *     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 = PyInt_FromLong(__pyx_v_f->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+    __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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__vars_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_INCREF(__pyx_n_s_var_namelist);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_var_namelist);
+  __Pyx_GIVEREF(__pyx_n_s_var_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":368
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":402
+ *     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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
+  __Pyx_INCREF(__pyx_n_s_nattrs);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nattrs);
+  __Pyx_GIVEREF(__pyx_n_s_nattrs);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":369
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)
+  __pyx_t_1 = __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 = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":403
+ *     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 = PyInt_FromLong(__pyx_v_f->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+    __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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__tidx_start));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__tidx_start));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__tidx_start));
+  __Pyx_INCREF(__pyx_n_s_attr_namelist);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_attr_namelist);
+  __Pyx_GIVEREF(__pyx_n_s_attr_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":370
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('version', f.version)
- *     print '%15s : %lu' % ('file_size', f.file_size)
+  __pyx_t_1 = __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 = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":404
+ *     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 = PyInt_FromLong(__pyx_v_f->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__ntimesteps));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ntimesteps));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ntimesteps));
+  __Pyx_INCREF(__pyx_n_s_current_step);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_current_step);
+  __Pyx_GIVEREF(__pyx_n_s_current_step);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":371
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('file_size', f.file_size)
+  __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 = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":405
+ *     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 = PyInt_FromLong(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__version));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__version));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__version));
+  __Pyx_INCREF(__pyx_n_s_last_step);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_last_step);
+  __Pyx_GIVEREF(__pyx_n_s_last_step);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":372
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)
- *     print '%15s : %lu' % ('file_size', f.file_size)             # <<<<<<<<<<<<<<
+  __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 = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":406
+ *     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 : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
+ *     print '%15s : %d' % ('version', f.version)
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__file_size));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__file_size));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__file_size));
+  __Pyx_INCREF(__pyx_n_s_path);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_path);
+  __Pyx_GIVEREF(__pyx_n_s_path);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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 = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":373
+  /* "adios.pyx":407
+ *     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)
- *     print '%15s : %d' % ('endianness', f.endianness)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
- * 
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__endianness));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__endianness));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__endianness));
+  __Pyx_INCREF(__pyx_n_s_endianness);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_endianness);
+  __Pyx_GIVEREF(__pyx_n_s_endianness);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":374
- *     print '%15s : %lu' % ('file_size', f.file_size)
- *     print '%15s : %d' % ('endianness', f.endianness)
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])             # <<<<<<<<<<<<<<
- * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_t_3 = __pyx_v_f->groups_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__group_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__group_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__group_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":376
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
- * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)
- */
-
-static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *__pyx_v_g) {
-  int __pyx_v_i;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosGroup", 0);
+  __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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":377
+  /* "adios.pyx":408
+ *     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)
  * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- *     print '%15s : %lu' % ('gh', g.gh)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_g->gh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__gh));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gh));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gh));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":378
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":379
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__vars_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_INCREF(__pyx_n_s_version);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_version);
+  __Pyx_GIVEREF(__pyx_n_s_version);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":380
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_v_g->vars_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__var_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__var_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__var_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":381
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":382
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+  /* "adios.pyx":409
+ *     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 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __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 = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_v_g->attrs_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__attr_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attr_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attr_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_INCREF(__pyx_n_s_file_size);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_file_size);
+  __Pyx_GIVEREF(__pyx_n_s_file_size);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":383
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)             # <<<<<<<<<<<<<<
+  /* "adios.pyx":398
+ *     return ntype
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
+ * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('fh', f.fh)
+ *     print '%15s : %d' % ('nvars', f.nvars)
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_g->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosGroup", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.printfile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -5453,15 +4994,15 @@ static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *__pyx_v_g) {
   return __pyx_r;
 }
 
-/* "adios.pyx":385
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+/* "adios.pyx":411
+ *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('grpid', v.grpid)
+ * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
  */
 
-static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
+static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -5472,160 +5013,146 @@ static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosVariable", 0);
+  __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios.pyx":386
+  /* "adios.pyx":412
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
- *     print '%15s : %d' % ('grpid', v.grpid)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('varid', v.varid)
- *     print '%15s : %s' % ('type', adios2nptype(v.type))
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":387
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
- *     print '%15s : %d' % ('grpid', v.grpid)
+ * 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 = PyInt_FromLong(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__varid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__varid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__varid));
+  __Pyx_INCREF(__pyx_n_s_varid);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_varid);
+  __Pyx_GIVEREF(__pyx_n_s_varid);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":388
- *     print '%15s : %d' % ('grpid', v.grpid)
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":413
+ * 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, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __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 = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__type));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__type));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__type));
+  __Pyx_INCREF(__pyx_n_s_type);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_type);
+  __Pyx_GIVEREF(__pyx_n_s_type);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":389
+  /* "adios.pyx":414
  *     print '%15s : %d' % ('varid', v.varid)
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
- *     print '%15s : %d' % ('timedim', v.timedim)
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__ndim));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ndim));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndim));
+  __Pyx_INCREF(__pyx_n_s_ndim);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ndim);
+  __Pyx_GIVEREF(__pyx_n_s_ndim);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":390
+  /* "adios.pyx":415
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('timedim', v.timedim)
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_v->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    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;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__dims));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__dims));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__dims));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_INCREF(__pyx_n_s_dims);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_dims);
+  __Pyx_GIVEREF(__pyx_n_s_dims);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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 = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":391
+  /* "adios.pyx":416
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
- *     print '%15s : %d' % ('timedim', v.timedim)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('nsteps', v.nsteps)             # <<<<<<<<<<<<<<
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
+ * ## ====================
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__timedim));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__timedim));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__timedim));
+  __Pyx_INCREF(__pyx_n_s_nsteps);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nsteps);
+  __Pyx_GIVEREF(__pyx_n_s_nsteps);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_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 = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":411
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ * 
+ * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ */
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosVariable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.printvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -5633,316 +5160,64 @@ static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
   return __pyx_r;
 }
 
-/* "adios.pyx":393
- *     print '%15s : %d' % ('timedim', v.timedim)
+/* "adios.pyx":422
+ * ## ====================
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):             # <<<<<<<<<<<<<<
- *     if t == adios_byte :
- *         return (<char *> val)[0]
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI_Comm comm = MPI_COMM_WORLD,
+ *                 char * parameters = ""):
  */
 
-static PyObject *__pyx_f_5adios_adios2scalar(ADIOS_DATATYPES __pyx_v_t, void *__pyx_v_val) {
+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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("adios2scalar", 0);
-
-  /* "adios.pyx":414
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
- *         return (<long double *> val)[0]
- *     else:
- */
-  switch (__pyx_v_t) {
+  __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":394
+  /* "adios.pyx":425
+ *                 MPI_Comm comm = MPI_COMM_WORLD,
+ *                 char * parameters = ""):
+ *     return adios_read_init_method (method, comm, parameters)             # <<<<<<<<<<<<<<
+ * 
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
- *     if t == adios_byte :             # <<<<<<<<<<<<<<
- *         return (<char *> val)[0]
- *     elif t == adios_short:
- */
-    case adios_byte:
-
-    /* "adios.pyx":395
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
- *     if t == adios_byte :
- *         return (<char *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_short:
- *         return (<short *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":396
- *     if t == adios_byte :
- *         return (<char *> val)[0]
- *     elif t == adios_short:             # <<<<<<<<<<<<<<
- *         return (<short *> val)[0]
- *     elif t == adios_integer:
- */
-    case adios_short:
-
-    /* "adios.pyx":397
- *         return (<char *> val)[0]
- *     elif t == adios_short:
- *         return (<short *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_integer:
- *         return (<int *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":398
- *     elif t == adios_short:
- *         return (<short *> val)[0]
- *     elif t == adios_integer:             # <<<<<<<<<<<<<<
- *         return (<int *> val)[0]
- *     elif t == adios_long:
- */
-    case adios_integer:
-
-    /* "adios.pyx":399
- *         return (<short *> val)[0]
- *     elif t == adios_integer:
- *         return (<int *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_long:
- *         return (<long *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":400
- *     elif t == adios_integer:
- *         return (<int *> val)[0]
- *     elif t == adios_long:             # <<<<<<<<<<<<<<
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:
- */
-    case adios_long:
-
-    /* "adios.pyx":401
- *         return (<int *> val)[0]
- *     elif t == adios_long:
- *         return (<long *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":402
- *     elif t == adios_long:
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:
- */
-    case adios_unsigned_byte:
-
-    /* "adios.pyx":403
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((unsigned char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":404
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:
- */
-    case adios_unsigned_short:
-
-    /* "adios.pyx":405
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((unsigned short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":406
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:
- */
-    case adios_unsigned_integer:
-
-    /* "adios.pyx":407
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":408
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:
- */
-    case adios_unsigned_long:
-
-    /* "adios.pyx":409
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_real:
- *         return (<float *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":410
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:             # <<<<<<<<<<<<<<
- *         return (<float *> val)[0]
- *     elif t == adios_double:
- */
-    case adios_real:
-
-    /* "adios.pyx":411
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:
- *         return (<float *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((float *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":412
- *     elif t == adios_real:
- *         return (<float *> val)[0]
- *     elif t == adios_double:             # <<<<<<<<<<<<<<
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:
- */
-    case adios_double:
-
-    /* "adios.pyx":413
- *         return (<float *> val)[0]
- *     elif t == adios_double:
- *         return (<double *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_long_double:
- *         return (<long double *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":414
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
- *         return (<long double *> val)[0]
- *     else:
- */
-    case adios_long_double:
-
-    /* "adios.pyx":415
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:
- *         return (<long double *> val)[0]             # <<<<<<<<<<<<<<
- *     else:
- *         return None
  */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((long double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-    default:
+  __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;
 
-    /* "adios.pyx":417
- *         return (<long double *> val)[0]
- *     else:
- *         return None             # <<<<<<<<<<<<<<
+  /* "adios.pyx":422
+ * ## ====================
  * 
- * ## ==========
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI_Comm comm = MPI_COMM_WORLD,
+ *                 char * parameters = ""):
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-    break;
-  }
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.adios2scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -5951,24 +5226,25 @@ static PyObject *__pyx_f_5adios_adios2scalar(ADIOS_DATATYPES __pyx_v_t, void *__
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  char *__pyx_v_fname;
-  struct PyMPICommObject *__pyx_v_comm = 0;
+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;
+  MPI_Comm __pyx_v_comm;
+  char *__pyx_v_parameters;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  int __pyx_r;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("read_init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fname,&__pyx_n_s__comm,0};
-    PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)__pyx_k_10;
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_comm,&__pyx_n_s_parameters,0};
+    PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -5977,326 +5253,606 @@ static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fname)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[0] = value; kw_args--; }
+        }
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[1] = value; kw_args--; }
         }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       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;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_fname = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_fname) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
+    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;}
+    } else {
+      __pyx_v_method = __pyx_k__4;
+    }
+    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;}
+    } 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;}
+    } else {
+      __pyx_v_parameters = ((char *)__pyx_k__6);
+    }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return -1;
+  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 = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_9AdiosFile___init__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), __pyx_v_fname, __pyx_v_comm);
+  __pyx_r = __pyx_pf_5adios_32read_init(__pyx_self, __pyx_v_method, __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) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_read_init __pyx_t_2;
+  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.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;
   goto __pyx_L0;
+
+  /* function exit code */
   __pyx_L1_error:;
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":440
- *     cpdef public dict group
+/* "adios.pyx":428
+ * 
+ * 
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.fp = NULL
- *         self.group = {}
  */
 
-static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm) {
-  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_g = 0;
-  PyObject *__pyx_v_grpname = NULL;
-  int __pyx_v_i;
-  int __pyx_r;
+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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  uint64_t __pyx_t_4;
-  int __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__init__", 0);
+  __Pyx_RefNannySetupContext("read_finalize", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_method = __pyx_optional_args->method;
+    }
+  }
 
-  /* "adios.pyx":441
+  /* "adios.pyx":429
  * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
- *         self.fp = NULL             # <<<<<<<<<<<<<<
- *         self.group = {}
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+ *     return adios_read_finalize_method (method)             # <<<<<<<<<<<<<<
  * 
+ * cdef class file:
  */
-  __pyx_v_self->fp = NULL;
+  __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;
+  goto __pyx_L0;
+
+  /* "adios.pyx":428
+ * 
+ * 
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     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_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __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;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("read_finalize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          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;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    if (values[0]) {
+      __pyx_v_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;}
+    } else {
+      __pyx_v_method = __pyx_k__7;
+    }
+  }
+  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_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);
+
+  /* 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) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_read_finalize __pyx_t_2;
+  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;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":448
+ *     cpdef public dict attr
+ * 
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_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;
+  MPI_Comm __pyx_v_comm;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fname)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = 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;}
+      }
+    } else {
+      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_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;}
+    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;}
+    } else {
+      __pyx_v_method = __pyx_k__8;
+    }
+    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;}
+    } else {
+      __pyx_v_comm = __pyx_k__9;
+    }
+  }
+  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_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);
+
+  /* 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) {
+  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_5;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "adios.pyx":451
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *         self.fp = NULL             # <<<<<<<<<<<<<<
+ *         self.var = {}
+ *         self.attr = {}
+ */
+  __pyx_v_self->fp = NULL;
+
+  /* "adios.pyx":452
+ *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *         self.fp = NULL
+ *         self.var = {}             # <<<<<<<<<<<<<<
+ *         self.attr = {}
+ * 
+ */
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios.pyx":442
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+  /* "adios.pyx":453
  *         self.fp = NULL
- *         self.group = {}             # <<<<<<<<<<<<<<
+ *         self.var = {}
+ *         self.attr = {}             # <<<<<<<<<<<<<<
  * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)
+ *         self.fp = adios_read_open_file(fname, method, comm)
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = PyDict_New(); 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_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":444
- *         self.group = {}
+  /* "adios.pyx":455
+ *         self.attr = {}
  * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ *         self.fp = adios_read_open_file(fname, method, comm)             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
  * 
  */
-  __pyx_v_self->fp = adios_fopen(__pyx_v_fname, __pyx_v_comm->ob_mpi);
+  __pyx_v_self->fp = adios_read_open_file(__pyx_v_fname, __pyx_v_method, __pyx_v_comm);
 
-  /* "adios.pyx":445
+  /* "adios.pyx":456
  * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)
+ *         self.fp = adios_read_open_file(fname, method, comm)
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
  * 
- *         self.name         = fname.split('/')[-1]  ## basename
+ *         self.name = fname.split('/')[-1]  ## basename
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":447
+  /* "adios.pyx":458
  *         assert self.fp != NULL, 'Not an open file'
  * 
- *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
+ *         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 = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_t_1), __pyx_n_s__split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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 bytes, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":448
+  /* "adios.pyx":459
  * 
- *         self.name         = fname.split('/')[-1]  ## basename
- *         self.groups_count = self.fp.groups_count             # <<<<<<<<<<<<<<
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count
+ *         self.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->groups_count;
-  __pyx_v_self->groups_count = __pyx_t_3;
+  __pyx_t_3 = __pyx_v_self->fp->nvars;
+  __pyx_v_self->nvars = __pyx_t_3;
 
-  /* "adios.pyx":449
- *         self.name         = fname.split('/')[-1]  ## basename
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count             # <<<<<<<<<<<<<<
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start
+  /* "adios.pyx":460
+ *         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->vars_count;
-  __pyx_v_self->vars_count = __pyx_t_3;
+  __pyx_t_3 = __pyx_v_self->fp->nattrs;
+  __pyx_v_self->nattrs = __pyx_t_3;
 
-  /* "adios.pyx":450
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count             # <<<<<<<<<<<<<<
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps
+  /* "adios.pyx":461
+ *         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->attrs_count;
-  __pyx_v_self->attrs_count = __pyx_t_3;
+  __pyx_t_3 = __pyx_v_self->fp->current_step;
+  __pyx_v_self->current_step = __pyx_t_3;
 
-  /* "adios.pyx":451
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start             # <<<<<<<<<<<<<<
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version
+  /* "adios.pyx":462
+ *         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->tidx_start;
-  __pyx_v_self->tidx_start = __pyx_t_3;
+  __pyx_t_3 = __pyx_v_self->fp->last_step;
+  __pyx_v_self->last_step = __pyx_t_3;
 
-  /* "adios.pyx":452
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps             # <<<<<<<<<<<<<<
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size
+  /* "adios.pyx":463
+ *         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->ntimesteps;
-  __pyx_v_self->ntimesteps = __pyx_t_3;
+  __pyx_t_3 = __pyx_v_self->fp->endianness;
+  __pyx_v_self->endianness = __pyx_t_3;
 
-  /* "adios.pyx":453
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version             # <<<<<<<<<<<<<<
- *         self.file_size    = self.fp.file_size
- *         self.endianness   = self.fp.endianness
+  /* "adios.pyx":464
+ *         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;
 
-  /* "adios.pyx":454
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size             # <<<<<<<<<<<<<<
- *         self.endianness   = self.fp.endianness
+  /* "adios.pyx":465
+ *         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;
 
-  /* "adios.pyx":455
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size
- *         self.endianness   = self.fp.endianness             # <<<<<<<<<<<<<<
+  /* "adios.pyx":467
+ *         self.file_size = self.fp.file_size
  * 
- *         cdef AdiosGroup g
- */
-  __pyx_t_3 = __pyx_v_self->fp->endianness;
-  __pyx_v_self->endianness = __pyx_t_3;
-
-  /* "adios.pyx":458
+ *         for varname in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
+ *             self.var[varname] = var(self, varname)
  * 
- *         cdef AdiosGroup g
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:             # <<<<<<<<<<<<<<
- *             g = AdiosGroup(self, grpname)
- *             self.group[grpname] = g
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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->groups_count;
+  __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->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    __pyx_t_1 = __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 = ((PyObject *)__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 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;
   for (;;) {
     if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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;}
     #else
-    __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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;}
     #endif
-    __Pyx_XDECREF(__pyx_v_grpname);
-    __pyx_v_grpname = __pyx_t_2;
+    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":459
- *         cdef AdiosGroup g
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
- *             g = AdiosGroup(self, grpname)             # <<<<<<<<<<<<<<
- *             self.group[grpname] = g
+    /* "adios.pyx":468
+ * 
+ *         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 = 459; __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 = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_grpname);
-    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_grpname);
-    __Pyx_GIVEREF(__pyx_v_grpname);
-    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosGroup)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_INCREF(__pyx_v_varname);
+    PyTuple_SET_ITEM(__pyx_t_2, 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(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __Pyx_XDECREF(((PyObject *)__pyx_v_g));
-    __pyx_v_g = ((struct __pyx_obj_5adios_AdiosGroup *)__pyx_t_7);
-    __pyx_t_7 = 0;
-
-    /* "adios.pyx":460
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
- *             g = AdiosGroup(self, grpname)
- *             self.group[grpname] = g             # <<<<<<<<<<<<<<
- * 
- *     def __del__(self):
- */
-    if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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 = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    if (PyDict_SetItem(((PyObject *)__pyx_v_self->group), __pyx_v_grpname, ((PyObject *)__pyx_v_g)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    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;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios.pyx":448
+ *     cpdef public dict attr
+ * 
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI_Comm comm = MPI_COMM_WORLD):
+ */
+
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_g);
-  __Pyx_XDECREF(__pyx_v_grpname);
+  __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":470
+ *             self.var[varname] = var(self, varname)
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *             self.close()
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_5adios_4file_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_2__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_2__del__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":462
- *             self.group[grpname] = g
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6305,22 +5861,31 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_Adi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":463
+  /* "adios.pyx":471
  * 
  *     def __del__(self):
- *         self.close()             # <<<<<<<<<<<<<<
+ *             self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios.pyx":470
+ *             self.var[varname] = var(self, varname)
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *             self.close()
+ * 
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6328,24 +5893,20 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_Adi
   return __pyx_r;
 }
 
-/* "adios.pyx":465
- *         self.close()
+/* "adios.pyx":473
+ *             self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
+ *         adios_read_close(self.fp)
  */
 
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_v_g = NULL;
+static PyObject *__pyx_pw_5adios_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -6354,11 +5915,11 @@ static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -6368,141 +5929,76 @@ static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":466
+  /* "adios.pyx":474
  * 
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         for g in self.group.values():
- *             g.close()
+ *         adios_read_close(self.fp)
+ *         self.fp = NULL
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":467
+  /* "adios.pyx":475
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():             # <<<<<<<<<<<<<<
- *             g.close()
- *         adios_fclose(self.fp)
- */
-  if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->group); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
-    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
-    __pyx_t_4 = NULL;
-  } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else {
-      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
-      if (unlikely(!__pyx_t_1)) {
-        if (PyErr_Occurred()) {
-          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_1);
-    }
-    __Pyx_XDECREF(__pyx_v_g);
-    __pyx_v_g = __pyx_t_1;
-    __pyx_t_1 = 0;
-
-    /* "adios.pyx":468
- *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
- *             g.close()             # <<<<<<<<<<<<<<
- *         adios_fclose(self.fp)
- *         self.fp = NULL
- */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "adios.pyx":469
- *         for g in self.group.values():
- *             g.close()
- *         adios_fclose(self.fp)             # <<<<<<<<<<<<<<
+ *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
  *         self.fp = NULL
  * 
  */
-  adios_fclose(__pyx_v_self->fp);
+  adios_read_close(__pyx_v_self->fp);
 
-  /* "adios.pyx":470
- *             g.close()
- *         adios_fclose(self.fp)
+  /* "adios.pyx":476
+ *         assert self.fp != NULL, 'Not an open file'
+ *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  * 
  *     cpdef printself(self):
  */
   __pyx_v_self->fp = NULL;
 
+  /* "adios.pyx":473
+ *             self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         adios_read_close(self.fp)
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_g);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_5adios_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4close(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_4close(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":465
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_4close(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6511,17 +6007,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6529,7 +6024,7 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
   return __pyx_r;
 }
 
-/* "adios.pyx":472
+/* "adios.pyx":478
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -6537,8 +6032,8 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
  *         print '=== AdiosFile ==='
  */
 
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_5adios_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6551,11 +6046,11 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -6565,7 +6060,7 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":473
+  /* "adios.pyx":479
  * 
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -6573,61 +6068,72 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":474
+  /* "adios.pyx":480
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
- *         printAdiosFile(self.fp)
+ *         printfile(self.fp)
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":475
+  /* "adios.pyx":481
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)             # <<<<<<<<<<<<<<
- *         printAdiosFile(self.fp)
+ *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
+  __Pyx_INCREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
+  __Pyx_GIVEREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":476
+  /* "adios.pyx":482
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
- *         printAdiosFile(self.fp)             # <<<<<<<<<<<<<<
- * 
+ *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
+ * cdef class var:
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosFile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios.pyx":478
+ *         self.fp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6636,25 +6142,19 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+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_9AdiosFile_6printself(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_6printself(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":472
- *         self.fp = NULL
- * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
- *         print '=== AdiosFile ==='
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+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;
@@ -6663,17 +6163,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_A
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6681,35 +6180,37 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_A
   return __pyx_r;
 }
 
+/* "adios.pyx":436
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int nvars
+ *     cpdef public int nattrs
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_4name_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_4name___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":428
- * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int groups_count
- *     cpdef public int vars_count
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_4name___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  __Pyx_INCREF(__pyx_v_self->name);
+  __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -6717,34 +6218,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adio
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_4name_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_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_4name_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.file.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -6752,51 +6260,56 @@ static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_Adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_5adios_4file_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_4file_4name_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_4name_4__del__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static int __pyx_pf_5adios_4file_4name_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":437
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int nvars             # <<<<<<<<<<<<<<
+ *     cpdef public int nattrs
+ *     cpdef public int current_step
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_5nvars_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_5nvars_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_5nvars___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":429
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int groups_count             # <<<<<<<<<<<<<<
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6805,17 +6318,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.nvars.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6824,17 +6336,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_5nvars_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_5nvars_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_5nvars_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_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_5nvars_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6842,39 +6356,42 @@ static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->groups_count = __pyx_t_1;
+  __pyx_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_v_self->nvars = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.nvars.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":438
+ *     cpdef public bytes name
+ *     cpdef public int nvars
+ *     cpdef public int nattrs             # <<<<<<<<<<<<<<
+ *     cpdef public int current_step
+ *     cpdef public int last_step
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_6nattrs_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_6nattrs_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_6nattrs___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":430
- *     cpdef public bytes name
- *     cpdef public int groups_count
- *     cpdef public int vars_count             # <<<<<<<<<<<<<<
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6883,17 +6400,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.nattrs.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6902,17 +6418,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_6nattrs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_6nattrs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_6nattrs_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_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_6nattrs_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6920,39 +6438,42 @@ static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->vars_count = __pyx_t_1;
+  __pyx_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_v_self->nattrs = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.nattrs.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":439
+ *     cpdef public int nvars
+ *     cpdef public int nattrs
+ *     cpdef public int current_step             # <<<<<<<<<<<<<<
+ *     cpdef public int last_step
+ *     cpdef public int endianness
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_12current_step_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_12current_step_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_12current_step___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":431
- *     cpdef public int groups_count
- *     cpdef public int vars_count
- *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6961,17 +6482,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.current_step.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6980,17 +6500,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_o
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_12current_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_12current_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_12current_step_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_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_12current_step_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6998,39 +6520,42 @@ static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5a
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->attrs_count = __pyx_t_1;
+  __pyx_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_v_self->current_step = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.current_step.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":440
+ *     cpdef public int nattrs
+ *     cpdef public int current_step
+ *     cpdef public int last_step             # <<<<<<<<<<<<<<
+ *     cpdef public int endianness
+ *     cpdef public int version
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_9last_step_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_9last_step_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_9last_step___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":432
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start             # <<<<<<<<<<<<<<
- *     cpdef public int ntimesteps
- *     cpdef public int version
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7039,17 +6564,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.last_step.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7058,17 +6582,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_9last_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_9last_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_9last_step_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_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_9last_step_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7076,39 +6602,42 @@ static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->tidx_start = __pyx_t_1;
+  __pyx_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_v_self->last_step = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.last_step.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":441
+ *     cpdef public int current_step
+ *     cpdef public int last_step
+ *     cpdef public int endianness             # <<<<<<<<<<<<<<
+ *     cpdef public int version
+ *     cpdef public int file_size
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_10endianness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_10endianness_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_10endianness___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":433
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps             # <<<<<<<<<<<<<<
- *     cpdef public int version
- *     cpdef public int file_size
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7117,17 +6646,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.endianness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7136,17 +6664,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_10endianness_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_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_10endianness_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7154,39 +6684,42 @@ static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->ntimesteps = __pyx_t_1;
+  __pyx_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_v_self->endianness = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.endianness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":442
+ *     cpdef public int last_step
+ *     cpdef public int endianness
+ *     cpdef public int version             # <<<<<<<<<<<<<<
+ *     cpdef public int file_size
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_7version_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_7version___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":434
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps
- *     cpdef public int version             # <<<<<<<<<<<<<<
- *     cpdef public int file_size
- *     cpdef public int endianness
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7195,17 +6728,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5a
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7214,17 +6746,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5a
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_7version_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_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_7version_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7232,39 +6766,42 @@ static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_v_self->version = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.version.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.version.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":443
+ *     cpdef public int endianness
+ *     cpdef public int version
+ *     cpdef public int file_size             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef public dict var
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_9file_size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_9file_size_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_9file_size___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":435
- *     cpdef public int ntimesteps
- *     cpdef public int version
- *     cpdef public int file_size             # <<<<<<<<<<<<<<
- *     cpdef public int endianness
- * 
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7273,17 +6810,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.file_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.file_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7292,17 +6828,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_9file_size_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_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_9file_size_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7310,59 +6848,51 @@ static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adio
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_v_self->file_size = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.file_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.file.file_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":445
+ *     cpdef public int file_size
+ * 
+ *     cpdef public dict var             # <<<<<<<<<<<<<<
+ *     cpdef public dict attr
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_4file_3var_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_3var_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_3var___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":436
- *     cpdef public int version
- *     cpdef public int file_size
- *     cpdef public int endianness             # <<<<<<<<<<<<<<
- * 
- *     cpdef public dict group
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_4file_3var___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 = PyInt_FromLong(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __Pyx_INCREF(__pyx_v_self->var);
+  __pyx_r = __pyx_v_self->var;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.endianness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -7370,31 +6900,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_3var_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_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_3var_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->endianness = __pyx_t_1;
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.endianness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.file.var.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -7402,34 +6942,65 @@ static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5ad
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_5adios_4file_3var_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_4file_3var_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_4file_3var_4__del__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":438
- *     cpdef public int endianness
+static int __pyx_pf_5adios_4file_3var_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":446
  * 
- *     cpdef public dict group             # <<<<<<<<<<<<<<
+ *     cpdef public dict var
+ *     cpdef public dict attr             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+ *     def __init__(self, char * fname,
  */
 
-static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_4file_4attr_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_4file_4attr_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_4file_4attr___get__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_4file_4attr___get__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->group));
-  __pyx_r = ((PyObject *)__pyx_v_self->group);
+  __Pyx_INCREF(__pyx_v_self->attr);
+  __pyx_r = __pyx_v_self->attr;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -7437,34 +7008,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_4file_4attr_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_4file_4attr_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_4file_4attr_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_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_4file_4attr_2__set__(struct __pyx_obj_5adios_file *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.group.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.file.attr.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -7472,35 +7050,46 @@ static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_Ad
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_5adios_4file_4attr_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_4file_4attr_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_4file_4attr_4__del__(((struct __pyx_obj_5adios_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static int __pyx_pf_5adios_4file_4attr_4__del__(struct __pyx_obj_5adios_file *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)Py_None);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":497
+ *     cpdef public int nsteps
+ * 
+ *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
+ *         self.file = file
+ *         self.vp = NULL
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct __pyx_obj_5adios_AdiosFile *__pyx_v_file = 0;
+static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct __pyx_obj_5adios_file *__pyx_v_file = 0;
   char *__pyx_v_name;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -7509,7 +7098,7 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file,&__pyx_n_s_name,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -7523,16 +7112,16 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7540,19 +7129,21 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_file = ((struct __pyx_obj_5adios_AdiosFile *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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_AdiosFile, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup___init__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
+  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;}
+  __pyx_r = __pyx_pf_5adios_3var___init__(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = -1;
@@ -7561,17 +7152,7 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":494
- *     cpdef public dict var
- * 
- *     def __init__(self, AdiosFile file, char * name):             # <<<<<<<<<<<<<<
- *         self.file = file
- *         self.var = {}
- */
-
-static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name) {
-  struct __pyx_obj_5adios_AdiosVariable *__pyx_v_v = 0;
-  PyObject *__pyx_v_varname = NULL;
+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) {
   int __pyx_v_i;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -7579,18 +7160,16 @@ static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGr
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":495
+  /* "adios.pyx":498
  * 
- *     def __init__(self, AdiosFile file, char * name):
+ *     def __init__(self, file file, char * name):
  *         self.file = file             # <<<<<<<<<<<<<<
- *         self.var = {}
+ *         self.vp = NULL
  * 
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_file));
@@ -7599,211 +7178,185 @@ static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGr
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":496
- *     def __init__(self, AdiosFile file, char * name):
+  /* "adios.pyx":499
+ *     def __init__(self, file file, char * name):
  *         self.file = file
- *         self.var = {}             # <<<<<<<<<<<<<<
+ *         self.vp = NULL             # <<<<<<<<<<<<<<
  * 
- *         self.gp = adios_gopen(self.file.fp, name)
+ *         assert self.file.fp != NULL, 'Not an open file'
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":498
- *         self.var = {}
- * 
- *         self.gp = adios_gopen(self.file.fp, name)             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open group'
+  /* "adios.pyx":501
+ *         self.vp = NULL
  * 
+ *         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'
  */
-  __pyx_v_self->gp = adios_gopen(__pyx_v_self->file->fp, __pyx_v_name);
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  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;}
+    }
+  }
+  #endif
 
-  /* "adios.pyx":499
+  /* "adios.pyx":502
  * 
- *         self.gp = adios_gopen(self.file.fp, name)
- *         assert self.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
+ *         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'
  * 
- *         self.name         = name
+ */
+  __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_v_name);
+
+  /* "adios.pyx":503
+ *         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'             # <<<<<<<<<<<<<<
+ * 
+ *         self.name = name
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":501
- *         assert self.gp != NULL, 'Not an open group'
+  /* "adios.pyx":505
+ *         assert self.vp != NULL, 'Not a valid var'
  * 
- *         self.name         = name             # <<<<<<<<<<<<<<
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count
+ *         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 = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":502
+  /* "adios.pyx":506
  * 
- *         self.name         = name
- *         self.grpid        = self.gp.grpid             # <<<<<<<<<<<<<<
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count
- */
-  __pyx_t_2 = __pyx_v_self->gp->grpid;
-  __pyx_v_self->grpid = __pyx_t_2;
-
-  /* "adios.pyx":503
- *         self.name         = name
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count             # <<<<<<<<<<<<<<
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep
- */
-  __pyx_t_2 = __pyx_v_self->gp->vars_count;
-  __pyx_v_self->vars_count = __pyx_t_2;
-
-  /* "adios.pyx":504
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count             # <<<<<<<<<<<<<<
- *         self.timestep     = self.gp.timestep
- *         self.lasttimestep = self.gp.lasttimestep
+ *         self.name = name
+ *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
+ *         self.type = adios2nptype(self.vp.type)
+ *         self.ndim = self.vp.ndim
  */
-  __pyx_t_2 = __pyx_v_self->gp->attrs_count;
-  __pyx_v_self->attrs_count = __pyx_t_2;
+  __pyx_t_2 = __pyx_v_self->vp->varid;
+  __pyx_v_self->varid = __pyx_t_2;
 
-  /* "adios.pyx":505
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep             # <<<<<<<<<<<<<<
- *         self.lasttimestep = self.gp.lasttimestep
- * 
+  /* "adios.pyx":507
+ *         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_2 = __pyx_v_self->gp->timestep;
-  __pyx_v_self->timestep = __pyx_t_2;
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios.pyx":506
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep
- *         self.lasttimestep = self.gp.lasttimestep             # <<<<<<<<<<<<<<
- * 
- *         cdef AdiosVariable v
+  /* "adios.pyx":508
+ *         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)])
+ *         self.nsteps = self.vp.nsteps
  */
-  __pyx_t_2 = __pyx_v_self->gp->lasttimestep;
-  __pyx_v_self->lasttimestep = __pyx_t_2;
+  __pyx_t_2 = __pyx_v_self->vp->ndim;
+  __pyx_v_self->ndim = __pyx_t_2;
 
   /* "adios.pyx":509
+ *         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
  * 
- *         cdef AdiosVariable v
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:             # <<<<<<<<<<<<<<
- *             v = AdiosVariable(self, varname)
- *             self.var[varname] = v
  */
   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_v_self->vars_count;
+  __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_PyBytes_FromString((__pyx_v_self->gp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    __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_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;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_t_4 = ((PyObject *)__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  for (;;) {
-    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #endif
-    __Pyx_XDECREF(__pyx_v_varname);
-    __pyx_v_varname = __pyx_t_1;
-    __pyx_t_1 = 0;
+  __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_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_GIVEREF(__pyx_t_4);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-    /* "adios.pyx":510
- *         cdef AdiosVariable v
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
- *             v = AdiosVariable(self, varname)             # <<<<<<<<<<<<<<
- *             self.var[varname] = v
+  /* "adios.pyx":510
+ *         self.ndim = self.vp.ndim
+ *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
  * 
+ *     def __del__(self):
  */
-    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosVariable)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-    __Pyx_XDECREF(((PyObject *)__pyx_v_v));
-    __pyx_v_v = ((struct __pyx_obj_5adios_AdiosVariable *)__pyx_t_6);
-    __pyx_t_6 = 0;
-
-    /* "adios.pyx":511
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
- *             v = AdiosVariable(self, varname)
- *             self.var[varname] = v             # <<<<<<<<<<<<<<
+  __pyx_t_2 = __pyx_v_self->vp->nsteps;
+  __pyx_v_self->nsteps = __pyx_t_2;
+
+  /* "adios.pyx":497
+ *     cpdef public int nsteps
  * 
- *     def __del__(self):
+ *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
+ *         self.file = file
+ *         self.vp = NULL
  */
-    if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
-      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-    if (PyDict_SetItem(((PyObject *)__pyx_v_self->var), __pyx_v_varname, ((PyObject *)__pyx_v_v)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_v);
-  __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":512
+ *         self.nsteps = self.vp.nsteps
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_5adios_3var_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_2__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_3var_2__del__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":513
- *             self.var[varname] = v
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7812,22 +7365,31 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_A
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":514
+  /* "adios.pyx":513
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios.pyx":512
+ *         self.nsteps = self.vp.nsteps
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7835,24 +7397,20 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_A
   return __pyx_r;
 }
 
-/* "adios.pyx":516
+/* "adios.pyx":515
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)
  */
 
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_v_v = NULL;
+static PyObject *__pyx_pw_5adios_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -7861,11 +7419,11 @@ static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_Adios
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -7875,141 +7433,76 @@ static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_Adios
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":517
+  /* "adios.pyx":516
  * 
  *     cpdef close(self):
- *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         for v in self.var.values():
- *             v.close()
+ *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
+ *         adios_free_varinfo(self.vp)
+ *         self.vp = NULL
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":518
+  /* "adios.pyx":517
  *     cpdef close(self):
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():             # <<<<<<<<<<<<<<
- *             v.close()
- *         adios_gclose(self.gp)
- */
-  if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->var); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
-    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
-    __pyx_t_4 = NULL;
-  } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else {
-      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
-      if (unlikely(!__pyx_t_1)) {
-        if (PyErr_Occurred()) {
-          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_1);
-    }
-    __Pyx_XDECREF(__pyx_v_v);
-    __pyx_v_v = __pyx_t_1;
-    __pyx_t_1 = 0;
-
-    /* "adios.pyx":519
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
- *             v.close()             # <<<<<<<<<<<<<<
- *         adios_gclose(self.gp)
- *         self.gp = NULL
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
+ *         self.vp = NULL
+ * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios.pyx":520
- *         for v in self.var.values():
- *             v.close()
- *         adios_gclose(self.gp)             # <<<<<<<<<<<<<<
- *         self.gp = NULL
+  /* "adios.pyx":518
+ *         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):
  */
-  adios_gclose(__pyx_v_self->gp);
+  __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":521
- *             v.close()
- *         adios_gclose(self.gp)
- *         self.gp = NULL             # <<<<<<<<<<<<<<
+  /* "adios.pyx":515
+ *         self.close()
  * 
- *     cpdef printself(self):
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)
  */
-  __pyx_v_self->gp = NULL;
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_v);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_5adios_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4close(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_3var_4close(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":516
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8018,17 +7511,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_Adi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8036,293 +7528,660 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_Adi
   return __pyx_r;
 }
 
-/* "adios.pyx":523
- *         self.gp = NULL
+/* "adios.pyx":520
+ *         self.vp = NULL
  * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
+ *     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'
  */
 
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_10AdiosGroup_printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*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) {
+  PyObject *__pyx_v_offset = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_from_steps = ((PyObject *)__pyx_int_0);
+  PyObject *__pyx_v_nsteps = ((PyObject *)__pyx_int_1);
+  PyObject *__pyx_v_lshape = 0;
+  PyArrayObject *__pyx_v_npshape = 0;
+  PyArrayObject *__pyx_v_npoffset = 0;
+  PyArrayObject *__pyx_v_npcount = 0;
+  PyObject *__pyx_v_shape = NULL;
+  PyArrayObject *__pyx_v_var = 0;
+  ADIOS_SELECTION *__pyx_v_sel;
+  int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_RefNannySetupContext("read", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_offset = __pyx_optional_args->offset;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_count = __pyx_optional_args->count;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_from_steps = __pyx_optional_args->from_steps;
+          if (__pyx_optional_args->__pyx_n > 3) {
+            __pyx_v_nsteps = __pyx_optional_args->nsteps;
+          }
+        }
+      }
+    }
+  }
   /* Check if called by wrapper */
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_r = __pyx_t_2;
-      __pyx_t_2 = 0;
+      __Pyx_INCREF(__pyx_v_offset);
+      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_offset);
+      __Pyx_GIVEREF(__pyx_v_offset);
+      __Pyx_INCREF(__pyx_v_count);
+      PyTuple_SET_ITEM(__pyx_t_2, 1, __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);
+      __Pyx_GIVEREF(__pyx_v_from_steps);
+      __Pyx_INCREF(__pyx_v_nsteps);
+      PyTuple_SET_ITEM(__pyx_t_2, 3, __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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L0;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":524
+  /* "adios.pyx":521
+ * 
+ *     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'
  * 
- *     cpdef printself(self):
- *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = (__pyx_v_self->type != ((PyObject*)Py_None));
+    if (unlikely(!(__pyx_t_4 != 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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":525
- *     cpdef printself(self):
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='             # <<<<<<<<<<<<<<
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
- *         printAdiosGroup(self.gp)
+  /* "adios.pyx":522
+ *     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'             # <<<<<<<<<<<<<<
+ * 
+ *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #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;}
+    }
+  }
+  #endif
 
-  /* "adios.pyx":526
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)             # <<<<<<<<<<<<<<
- *         printAdiosGroup(self.gp)
+  /* "adios.pyx":524
+ *         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_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->gp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_INCREF(((PyObject *)__pyx_n_s__gp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_v_lshape = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios.pyx":527
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
- *         printAdiosGroup(self.gp)             # <<<<<<<<<<<<<<
+  /* "adios.pyx":525
+ * 
+ *         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 class AdiosVariable:
+ *         cdef np.ndarray npoffset
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosGroup(__pyx_v_self->gp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_v_lshape);
+  PyTuple_SET_ITEM(__pyx_t_2, 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_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_DECREF(__pyx_t_2); __pyx_t_2 = 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;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":528
+ * 
+ *         cdef np.ndarray npoffset
+ *         if len(offset) == 0:             # <<<<<<<<<<<<<<
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)
+ */
+  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_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) {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_6printself(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios.pyx":529
+ *         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_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;
+
+    /* "adios.pyx":530
+ *         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_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_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
 
-/* "adios.pyx":523
- *         self.gp = NULL
+    /* "adios.pyx":532
+ *             npoffset.fill(0)
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
  * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
+ *         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_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);
+    __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_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_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;
+  }
+  __pyx_L5:;
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+  /* "adios.pyx":535
+ * 
+ *         cdef np.ndarray npcount
+ *         if len(count) == 0:             # <<<<<<<<<<<<<<
+ *             npcount = npshape - npoffset
+ *         else:
+ */
+  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_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_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios.pyx":536
+ *         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;
+  }
+  /*else*/ {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios.pyx":538
+ *             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_INCREF(__pyx_v_count);
+    PyTuple_SET_ITEM(__pyx_t_7, 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_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_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_L6:;
 
-/* "adios.pyx":485
+  /* "adios.pyx":540
+ *             npcount = np.array(count, dtype=np.int64)
  * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int grpid
- *     cpdef public int vars_count
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'             # <<<<<<<<<<<<<<
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
+ *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
  */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!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;}
+    }
+  }
+  #endif
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
-  goto __pyx_L0;
+  /* "adios.pyx":541
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
+ *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
+ * 
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!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;}
+    }
+  }
+  #endif
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":542
+ *         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.'             # <<<<<<<<<<<<<<
+ * 
+ *         shape = list(npcount)
+ */
+  #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)) {
+      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;}
+    }
+  }
+  #endif
 
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":544
+ *         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_INCREF(((PyObject *)__pyx_v_npcount));
+  PyTuple_SET_ITEM(__pyx_t_8, 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;
 
-static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+  /* "adios.pyx":545
+ * 
+ *         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_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios.pyx":546
+ *         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_L7:;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":547
+ *         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_INCREF(__pyx_v_shape);
+  PyTuple_SET_ITEM(__pyx_t_3, 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;
 
-static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)Py_None);
+  /* "adios.pyx":550
+ * 
+ *         cdef ADIOS_SELECTION * sel
+ *         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)
+ */
+  __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
+ *         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));
+
+  /* "adios.pyx":553
+ * 
+ *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
+ *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
+ * 
+ *         return var
+ */
+  adios_perform_reads(__pyx_v_self->file->fp, 1);
+
+  /* "adios.pyx":555
+ *         adios_perform_reads(self.file.fp, 1)
+ * 
+ *         return var             # <<<<<<<<<<<<<<
+ * 
+ *     """ Print self """
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_var));
+  __pyx_r = ((PyObject *)__pyx_v_var);
+  goto __pyx_L0;
+
+  /* "adios.pyx":520
+ *         self.vp = NULL
+ * 
+ *     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'
+ */
 
+  /* 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_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("adios.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_lshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npoffset);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npcount);
+  __Pyx_XDECREF(__pyx_v_shape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_var);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_offset = 0;
+  PyObject *__pyx_v_count = 0;
+  PyObject *__pyx_v_from_steps = 0;
+  PyObject *__pyx_v_nsteps = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_count,&__pyx_n_s_from_steps,&__pyx_n_s_nsteps,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[0] = ((PyObject*)__pyx_empty_tuple);
+    values[1] = ((PyObject*)__pyx_empty_tuple);
+    values[2] = ((PyObject *)__pyx_int_0);
+    values[3] = ((PyObject *)__pyx_int_1);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_offset);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_from_steps);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nsteps);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_offset = ((PyObject*)values[0]);
+    __pyx_v_count = ((PyObject*)values[1]);
+    __pyx_v_from_steps = values[2];
+    __pyx_v_nsteps = values[3];
+  }
+  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_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;}
+  __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 */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":486
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int grpid             # <<<<<<<<<<<<<<
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_6read(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count, PyObject *__pyx_v_from_steps, PyObject *__pyx_v_nsteps) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_3var_read __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2.__pyx_n = 4;
+  __pyx_t_2.offset = __pyx_v_offset;
+  __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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8330,77 +8189,178 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5a
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "adios.pyx":558
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open variable'
+ *         print '=== AdiosVariable ==='
+ */
 
-static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_5adios_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->grpid = __pyx_t_1;
+  __Pyx_RefNannySetupContext("printself", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __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_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
 
-  __pyx_r = 0;
+  /* "adios.pyx":559
+ *     """ Print self """
+ *     cpdef printself(self):
+ *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
+ *         print '=== AdiosVariable ==='
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  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;}
+    }
+  }
+  #endif
+
+  /* "adios.pyx":560
+ *     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;}
+
+  /* "adios.pyx":561
+ *         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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_vp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_vp);
+  __Pyx_GIVEREF(__pyx_n_s_vp);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":562
+ *         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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
+  __Pyx_GIVEREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":563
+ *         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_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":558
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open variable'
+ *         print '=== AdiosVariable ==='
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_8printself(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":487
- *     cpdef public bytes name
- *     cpdef public int grpid
- *     cpdef public int vars_count             # <<<<<<<<<<<<<<
- *     cpdef public int attrs_count
- *     cpdef public int timestep
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_8printself(struct __pyx_obj_5adios_var *__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_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8408,32 +8368,79 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_
   return __pyx_r;
 }
 
+/* "adios.pyx":490
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int varid
+ *     cpdef public type type
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_5adios_3var_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_4name_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_4name___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_3var_4name___get__(struct __pyx_obj_5adios_var *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->name);
+  __pyx_r = __pyx_v_self->name;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_3var_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_4name_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_3var_4name_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->vars_count = __pyx_t_1;
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.var.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -8441,25 +8448,56 @@ static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_5adios_3var_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_3var_4name_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_4name_4__del__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_3var_4name_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":488
- *     cpdef public int grpid
- *     cpdef public int vars_count
- *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
- *     cpdef public int timestep
- *     cpdef public int lasttimestep
+/* "adios.pyx":491
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int varid             # <<<<<<<<<<<<<<
+ *     cpdef public type type
+ *     cpdef public int ndim
  */
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_3var_5varid_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_5varid_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_5varid___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8468,17 +8506,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.varid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8487,17 +8524,19 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_3var_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_3var_5varid_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_3var_5varid_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8505,59 +8544,51 @@ static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->attrs_count = __pyx_t_1;
+  __pyx_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_v_self->varid = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.varid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":492
+ *     cpdef public bytes name
+ *     cpdef public int varid
+ *     cpdef public type type             # <<<<<<<<<<<<<<
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_3var_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_4type_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_3var_4type___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":489
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- *     cpdef public int timestep             # <<<<<<<<<<<<<<
- *     cpdef public int lasttimestep
- * 
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_4type___get__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->type));
+  __pyx_r = ((PyObject *)__pyx_v_self->type);
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -8565,31 +8596,41 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_3var_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_3var_4type_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_3var_4type_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->timestep = __pyx_t_1;
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.var.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -8597,25 +8638,56 @@ static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adi
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_5adios_3var_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_3var_4type_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_4type_4__del__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":490
- *     cpdef public int attrs_count
- *     cpdef public int timestep
- *     cpdef public int lasttimestep             # <<<<<<<<<<<<<<
- * 
- *     cpdef public dict var
+static int __pyx_pf_5adios_3var_4type_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":493
+ *     cpdef public int varid
+ *     cpdef public type type
+ *     cpdef public int ndim             # <<<<<<<<<<<<<<
+ *     cpdef public tuple dims
+ *     cpdef public int nsteps
  */
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_3var_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_4ndim_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_4ndim___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8624,17 +8696,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->lasttimestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8643,17 +8714,19 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __py
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_3var_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_3var_4ndim_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_3var_4ndim_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8661,48 +8734,51 @@ static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->lasttimestep = __pyx_t_1;
+  __pyx_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_v_self->ndim = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.var.ndim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":494
+ *     cpdef public type type
+ *     cpdef public int ndim
+ *     cpdef public tuple dims             # <<<<<<<<<<<<<<
+ *     cpdef public int nsteps
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_5adios_3var_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_4dims_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_3var_4dims___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":492
- *     cpdef public int lasttimestep
- * 
- *     cpdef public dict var             # <<<<<<<<<<<<<<
- * 
- *     def __init__(self, AdiosFile file, char * name):
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_3var_4dims___get__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->var));
-  __pyx_r = ((PyObject *)__pyx_v_self->var);
+  __Pyx_INCREF(__pyx_v_self->dims);
+  __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -8710,34 +8786,41 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_5adios_3var_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_5adios_3var_4dims_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_5adios_3var_4dims_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.var.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.var.dims.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -8745,44 +8828,138 @@ static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_Ad
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_5adios_3var_4dims_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_3var_4dims_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_5adios_3var_4dims_4__del__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static int __pyx_pf_5adios_3var_4dims_4__del__(struct __pyx_obj_5adios_var *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)Py_None);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":495
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ *     cpdef public int nsteps             # <<<<<<<<<<<<<<
+ * 
+ *     def __init__(self, file file, char * name):
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group = 0;
-  char *__pyx_v_name;
+static PyObject *__pyx_pw_5adios_3var_6nsteps_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_3var_6nsteps_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_6nsteps___get__(((struct __pyx_obj_5adios_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_var *__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_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_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.var.nsteps.__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_3var_6nsteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_3var_6nsteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_3var_6nsteps_2__set__(((struct __pyx_obj_5adios_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_3var_6nsteps_2__set__(struct __pyx_obj_5adios_var *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_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_v_self->nsteps = __pyx_t_1;
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.var.nsteps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":569
+ * ## ====================
+ * 
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     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) {
+  PyObject *__pyx_v_fname = 0;
+  PyObject *__pyx_v_varname = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("readvar (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_varname,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -8796,16 +8973,16 @@ static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fname)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8813,6835 +8990,5162 @@ static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyO
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_group = ((struct __pyx_obj_5adios_AdiosGroup *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fname = values[0];
+    __pyx_v_varname = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return -1;
+  return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_5adios_AdiosGroup, 1, "group", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable___init__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_group, __pyx_v_name);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
+  __pyx_r = __pyx_pf_5adios_36readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":543
- *     cpdef public int characteristics_count
- * 
- *     def __init__(self, AdiosGroup group, char * name):             # <<<<<<<<<<<<<<
- *         self.group = group
- *         self.vp = NULL
- */
-
-static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name) {
-  int __pyx_v_i;
-  int __pyx_r;
+static PyObject *__pyx_pf_5adios_36readvar(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;
-  int __pyx_t_2;
+  PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__init__", 0);
+  __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios.pyx":544
- * 
- *     def __init__(self, AdiosGroup group, char * name):
- *         self.group = group             # <<<<<<<<<<<<<<
- *         self.vp = NULL
+  /* "adios.pyx":570
  * 
+ * def readvar(fname, varname):
+ *     f = file(fname)             # <<<<<<<<<<<<<<
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"
  */
-  __Pyx_INCREF(((PyObject *)__pyx_v_group));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_group));
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = __pyx_v_group;
+  __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_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_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios.pyx":545
- *     def __init__(self, AdiosGroup group, char * name):
- *         self.group = group
- *         self.vp = NULL             # <<<<<<<<<<<<<<
- * 
- *         self.vp = adios_inq_var(self.group.gp, name)
- */
-  __pyx_v_self->vp = NULL;
+  /* "adios.pyx":571
+ * def readvar(fname, varname):
+ *     f = file(fname)
+ *     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_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) {
 
-  /* "adios.pyx":547
- *         self.vp = NULL
- * 
- *         self.vp = adios_inq_var(self.group.gp, name)             # <<<<<<<<<<<<<<
- *         assert self.group.gp != NULL, 'Not an open group'
+    /* "adios.pyx":572
+ *     f = file(fname)
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"             # <<<<<<<<<<<<<<
+ *         return
  * 
  */
-  __pyx_v_self->vp = adios_inq_var(__pyx_v_self->group->gp, __pyx_v_name);
+    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;}
 
-  /* "adios.pyx":548
- * 
- *         self.vp = adios_inq_var(self.group.gp, name)
- *         assert self.group.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
+    /* "adios.pyx":573
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"
+ *         return             # <<<<<<<<<<<<<<
  * 
- *         self.name                  = name
+ *     v = f.var[varname]
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->group->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
   }
-  #endif
 
-  /* "adios.pyx":550
- *         assert self.group.gp != NULL, 'Not an open group'
+  /* "adios.pyx":575
+ *         return
  * 
- *         self.name                  = name             # <<<<<<<<<<<<<<
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)
- */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "adios.pyx":551
+ *     v = f.var[varname]             # <<<<<<<<<<<<<<
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
- *         self.name                  = name
- *         self.varid                 = self.vp.varid             # <<<<<<<<<<<<<<
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim
- */
-  __pyx_t_2 = __pyx_v_self->vp->varid;
-  __pyx_v_self->varid = __pyx_t_2;
-
-  /* "adios.pyx":552
- *         self.name                  = name
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "adios.pyx":553
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim             # <<<<<<<<<<<<<<
- *         self.timedim               = self.vp.timedim
- *         self.characteristics_count = self.vp.characteristics_count
  */
-  __pyx_t_2 = __pyx_v_self->vp->ndim;
-  __pyx_v_self->ndim = __pyx_t_2;
+  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_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;
 
-  /* "adios.pyx":554
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim             # <<<<<<<<<<<<<<
- *         self.characteristics_count = self.vp.characteristics_count
+  /* "adios.pyx":576
  * 
- */
-  __pyx_t_2 = __pyx_v_self->vp->timedim;
-  __pyx_v_self->timedim = __pyx_t_2;
-
-  /* "adios.pyx":555
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim
- *         self.characteristics_count = self.vp.characteristics_count             # <<<<<<<<<<<<<<
+ *     v = f.var[varname]
+ *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
  * 
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ * def bpls(fname):
  */
-  __pyx_t_2 = __pyx_v_self->vp->characteristics_count;
-  __pyx_v_self->characteristics_count = __pyx_t_2;
+  __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_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;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
 
-  /* "adios.pyx":557
- *         self.characteristics_count = self.vp.characteristics_count
- * 
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
+  /* "adios.pyx":569
+ * ## ====================
  * 
- *     def __del__(self):
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     if not f.var.has_key(varname):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
-    __pyx_v_i = __pyx_t_3;
-    __pyx_t_4 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __pyx_t_4 = ((PyObject *)PyList_AsTuple(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("adios.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_f);
+  __Pyx_XDECREF(__pyx_v_v);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios.pyx":578
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
+ * 
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     return {'nvars': f.nvars,
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+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) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_2__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("bpls (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_38bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":559
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static PyObject *__pyx_pf_5adios_38bpls(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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  int __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios.pyx":560
- * 
- *     def __del__(self):
- *         self.close()             # <<<<<<<<<<<<<<
+  /* "adios.pyx":579
  * 
- *     cpdef close(self):
+ * def bpls(fname):
+ *     f = file(fname)             # <<<<<<<<<<<<<<
+ *     return {'nvars': f.nvars,
+ *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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_GOTREF(__pyx_t_2);
   __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_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":580
+ * def bpls(fname):
+ *     f = file(fname)
+ *     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_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;
 
-/* "adios.pyx":562
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
+  /* "adios.pyx":581
+ *     f = file(fname)
+ *     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;
+
+  /* "adios.pyx":582
+ *     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_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_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_GOTREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_3);
+  __pyx_t_3 = __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);
+    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;}
+    __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;}
+  }
+  __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;
 
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("close", 0);
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_r = __pyx_t_2;
-      __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
-    }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  /* "adios.pyx":583
+ *             '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_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_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_GOTREF(__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_1, __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;}
+    __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;}
+  }
+  __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;
 
-  /* "adios.pyx":563
+  /* "adios.pyx":584
+ *             '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}
  * 
- *     cpdef close(self):
- *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         adios_free_varinfo(self.vp)
- *         self.vp = NULL
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __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_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_GOTREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __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_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;}
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "adios.pyx":564
- *     cpdef close(self):
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
- *         self.vp = NULL
+  /* "adios.pyx":585
+ *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
+ *             'time_steps': (f.current_step, f.last_step),
+ *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
  * 
  */
-  adios_free_varinfo(__pyx_v_self->vp);
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "adios.pyx":565
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
- *         self.vp = NULL             # <<<<<<<<<<<<<<
+  /* "adios.pyx":578
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     return {'nvars': f.nvars,
  */
-  __pyx_v_self->vp = NULL;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("adios.bpls", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_f);
+  __Pyx_XDECREF(__pyx_v_k);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "/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):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4close(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":562
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
- */
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_copy_shape;
+  int __pyx_v_i;
+  int __pyx_v_ndim;
+  int __pyx_v_endian_detector;
+  int __pyx_v_little_endian;
+  int __pyx_v_t;
+  char *__pyx_v_f;
+  PyArray_Descr *__pyx_v_descr = 0;
+  int __pyx_v_offset;
+  int __pyx_v_hasfields;
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  char *__pyx_t_9;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("close", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  __Pyx_RefNannySetupContext("__getbuffer__", 0);
+  if (__pyx_v_info != NULL) {
+    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(__pyx_v_info->obj);
+  }
 
-/* "adios.pyx":567
- *         self.vp = NULL
+  /* "/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             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+ *             cdef int copy_shape, i, ndim
  */
-
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args) {
-  PyObject *__pyx_v_offset = ((PyObject*)__pyx_empty_tuple);
-  PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
-  PyObject *__pyx_v_ntype = 0;
-  PyObject *__pyx_v_lshape = 0;
-  PyArrayObject *__pyx_v_npshape = 0;
-  PyArrayObject *__pyx_v_npoffset = 0;
-  PyArrayObject *__pyx_v_npcount = 0;
-  PyArrayObject *__pyx_v_var = 0;
-  int64_t __pyx_v_nbytes;
-  int __pyx_v_i;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read", 0);
-  if (__pyx_optional_args) {
-    if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_offset = __pyx_optional_args->offset;
-      if (__pyx_optional_args->__pyx_n > 1) {
-        __pyx_v_count = __pyx_optional_args->count;
-      }
-    }
-  }
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__read); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_INCREF(((PyObject *)__pyx_v_offset));
-      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_offset));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
-      __Pyx_INCREF(((PyObject *)__pyx_v_count));
-      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_count));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
-    }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = ((__pyx_v_info == NULL) != 0);
+  if (__pyx_t_1) {
+    __pyx_r = 0;
+    goto __pyx_L0;
   }
 
-  /* "adios.pyx":568
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):
- *         cdef type ntype = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
- *         assert ntype is not None, 'Data type is not supported yet'
+ *             cdef int copy_shape, i, ndim
+ *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
+ *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_ntype = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_endian_detector = 1;
 
-  /* "adios.pyx":569
- *     cpdef read(self, tuple offset = (), tuple count = ()):
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
+  /* "/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)             # <<<<<<<<<<<<<<
  * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
+ *             ndim = PyArray_NDIM(self)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = (__pyx_v_ntype != ((PyObject*)Py_None));
-  if (unlikely(!(__pyx_t_4 != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_17));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "adios.pyx":571
- *         assert ntype is not None, 'Data type is not supported yet'
+  /* "/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)
  * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
- *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
+ *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
  * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
-    __pyx_v_i = __pyx_t_6;
-    __pyx_t_3 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  }
-  __pyx_v_lshape = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
 
-  /* "adios.pyx":572
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
+ *             ndim = PyArray_NDIM(self)
  * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
- *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 copy_shape = 1
+ *             else:
+ */
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
+
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
  * 
- *         cdef np.ndarray npoffset
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 copy_shape = 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 copy_shape = 0
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_lshape));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_lshape));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_lshape));
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_8);
-  __pyx_t_8 = 0;
+    __pyx_v_copy_shape = 1;
+    goto __pyx_L4;
+  }
+  /*else*/ {
 
-  /* "adios.pyx":575
+    /* "/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             # <<<<<<<<<<<<<<
  * 
- *         cdef np.ndarray npoffset
- *         if len(offset) == 0:             # <<<<<<<<<<<<<<
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
  */
-  if (unlikely(((PyObject *)__pyx_v_offset) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_copy_shape = 0;
   }
-  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_offset)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_L4:;
 
-    /* "adios.pyx":576
- *         cdef np.ndarray npoffset
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()             # <<<<<<<<<<<<<<
- *             npoffset.fill(0)
- *         else:
+  /* "/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_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s__copy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_2);
-    __pyx_t_2 = 0;
+  __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
+  if (__pyx_t_1) {
 
-    /* "adios.pyx":577
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)             # <<<<<<<<<<<<<<
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)
+    /* "/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 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s__fill); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_18), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    goto __pyx_L5;
+    __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;
   }
-  /*else*/ {
+  if (__pyx_t_3) {
 
-    /* "adios.pyx":579
- *             npoffset.fill(0)
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
+    /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         cdef np.ndarray npcount
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __Pyx_INCREF(((PyObject *)__pyx_v_offset));
-    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_offset));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
+    __pyx_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_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L5:;
 
-  /* "adios.pyx":582
+  /* "/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")
  * 
- *         cdef np.ndarray npcount
- *         if len(count) == 0:             # <<<<<<<<<<<<<<
- *             npcount = npshape - npoffset
- *         else:
+ *             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")
  */
-  if (unlikely(((PyObject *)__pyx_v_count) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_count)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
+  if (__pyx_t_3) {
 
-    /* "adios.pyx":583
- *         cdef np.ndarray npcount
- *         if len(count) == 0:
- *             npcount = npshape - npoffset             # <<<<<<<<<<<<<<
- *         else:
- *             npcount = np.array(count, dtype=np.int64)
+    /* "/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_7 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
-    goto __pyx_L6;
+    __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;
   }
-  /*else*/ {
+  if (__pyx_t_2) {
 
-    /* "adios.pyx":585
- *             npcount = npshape - npoffset
- *         else:
- *             npcount = np.array(count, dtype=np.int64)             # <<<<<<<<<<<<<<
+    /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *             info.buf = PyArray_DATA(self)
  */
-    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_INCREF(((PyObject *)__pyx_v_count));
-    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_count));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
-    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
-    __pyx_t_3 = 0;
+    __pyx_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_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L6:;
 
-  /* "adios.pyx":587
- *             npcount = np.array(count, dtype=np.int64)
+  /* "/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")
  * 
- *         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.'
+ *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
+ *             info.ndim = ndim
+ *             if copy_shape:
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npoffset->nd) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_19));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
 
-  /* "adios.pyx":588
- * 
- *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
- *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
- *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+  /* "/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             # <<<<<<<<<<<<<<
+ *             if copy_shape:
+ *                 # Allocate new buffer for strides and shape info.
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npcount->nd) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_20));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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
+ *             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) {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
+
+    /* "/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             # <<<<<<<<<<<<<<
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ */
+    __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
+ *                 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;
+
+      /* "/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]             # <<<<<<<<<<<<<<
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ */
+      (__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
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ */
+      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
+    }
+    goto __pyx_L7;
   }
-  #endif
+  /*else*/ {
 
-  /* "adios.pyx":589
- *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
- *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
- *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'             # <<<<<<<<<<<<<<
- * 
- *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, ((PyObject *)__pyx_v_npcount), Py_GT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (unlikely(!__pyx_t_4)) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_21));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ */
+    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
   }
-  #endif
+  __pyx_L7:;
 
-  /* "adios.pyx":591
- *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
- * 
- *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)             # <<<<<<<<<<<<<<
- *         cdef int64_t nbytes = adios_read_var_byid(
- *             self.group.gp,
+  /* "/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             # <<<<<<<<<<<<<<
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
  */
-  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
-  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_npcount));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_v_ntype)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_var = ((PyArrayObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_info->suboffsets = NULL;
 
-  /* "adios.pyx":597
- *             <uint64_t *> npoffset.data,
- *             <uint64_t *> npcount.data,
- *             <void *> var.data             # <<<<<<<<<<<<<<
- *             )
+  /* "/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)             # <<<<<<<<<<<<<<
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
  * 
  */
-  __pyx_v_nbytes = adios_read_var_byid(__pyx_v_self->group->gp, __pyx_v_self->vp->varid, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data), ((void *)__pyx_v_var->data));
+  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
 
-  /* "adios.pyx":600
- *             )
- * 
- *         if nbytes < 0:             # <<<<<<<<<<<<<<
- *             print "[WARNING] bytes read :", nbytes
+  /* "/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)             # <<<<<<<<<<<<<<
  * 
+ *             cdef int t
  */
-  __pyx_t_4 = ((__pyx_v_nbytes < 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
 
-    /* "adios.pyx":601
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":239
  * 
- *         if nbytes < 0:
- *             print "[WARNING] bytes read :", nbytes             # <<<<<<<<<<<<<<
- * 
- *         return var
+ *             cdef int t
+ *             cdef char* f = NULL             # <<<<<<<<<<<<<<
+ *             cdef dtype descr = self.descr
+ *             cdef list stack
  */
-    __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_nbytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
-    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_22));
-    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
-    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_1);
-    __pyx_t_1 = 0;
-    if (__Pyx_Print(0, ((PyObject *)__pyx_t_7), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-    goto __pyx_L7;
-  }
-  __pyx_L7:;
+  __pyx_v_f = NULL;
+
+  /* "/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;
 
-  /* "adios.pyx":603
- *             print "[WARNING] bytes read :", nbytes
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
+ *             cdef int offset
  * 
- *         return var             # <<<<<<<<<<<<<<
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
  * 
- *     """ Print self """
+ *             if not hasfields and not copy_shape:
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_var));
-  __pyx_r = ((PyObject *)__pyx_v_var);
-  goto __pyx_L0;
+  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ntype);
-  __Pyx_XDECREF(__pyx_v_lshape);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npshape);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npoffset);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npcount);
-  __Pyx_XDECREF((PyObject *)__pyx_v_var);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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:             # <<<<<<<<<<<<<<
+ *                 # do not call releasebuffer
+ *                 info.obj = None
+ */
+  __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0);
+    __pyx_t_1 = __pyx_t_3;
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+  }
+  if (__pyx_t_1) {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_offset = 0;
-  PyObject *__pyx_v_count = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__offset,&__pyx_n_s__count,0};
-    PyObject* values[2] = {0,0};
+    /* "/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             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # need to call releasebuffer
+ */
+    __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(Py_None);
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = Py_None;
+    goto __pyx_L10;
+  }
+  /*else*/ {
 
-    /* "adios.pyx":567
- *         self.vp = NULL
+    /* "/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             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+ *             if not hasfields:
  */
-    values[0] = ((PyObject*)__pyx_empty_tuple);
-    values[1] = ((PyObject*)__pyx_empty_tuple);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_offset = ((PyObject*)values[0]);
-    __pyx_v_count = ((PyObject*)values[1]);
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
   }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_6read(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_offset, __pyx_v_count);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  struct __pyx_opt_args_5adios_13AdiosVariable_read __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2.__pyx_n = 2;
-  __pyx_t_2.offset = __pyx_v_offset;
-  __pyx_t_2.count = __pyx_v_count;
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+  __pyx_L10:;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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:             # <<<<<<<<<<<<<<
+ *                 t = descr.type_num
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ */
+  __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_1) {
 
-/* "adios.pyx":606
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":254
  * 
- *     """ Print self """
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
+ *             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;
 
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_r = __pyx_t_2;
-      __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
+    /* "/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);
+    } else {
+      __pyx_t_2 = __pyx_t_1;
     }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  }
+    if (!__pyx_t_2) {
 
-  /* "adios.pyx":607
- *     """ Print self """
- *     cpdef printself(self):
- *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+      /* "/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"
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+      __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0);
+      if (__pyx_t_1) {
+        __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0);
+        __pyx_t_7 = __pyx_t_3;
+      } else {
+        __pyx_t_7 = __pyx_t_1;
+      }
+      __pyx_t_1 = __pyx_t_7;
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+    }
+    if (__pyx_t_1) {
 
-  /* "adios.pyx":608
- *     cpdef printself(self):
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='             # <<<<<<<<<<<<<<
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
- *         printAdiosVariable(self.vp)
+      /* "/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"
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_23)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __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_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
 
-  /* "adios.pyx":609
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)             # <<<<<<<<<<<<<<
- *         printAdiosVariable(self.vp)
+    /* "/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"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__vp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    switch (__pyx_v_t) {
 
-  /* "adios.pyx":610
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
- *         printAdiosVariable(self.vp)             # <<<<<<<<<<<<<<
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosVariable(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      case NPY_BYTE:
+      __pyx_v_f = __pyx_k_b;
+      break;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ */
+      case NPY_UBYTE:
+      __pyx_v_f = __pyx_k_B;
+      break;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_8printself(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ */
+      case NPY_SHORT:
+      __pyx_v_f = __pyx_k_h;
+      break;
 
-/* "adios.pyx":606
- * 
- *     """ Print self """
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
  */
+      case NPY_USHORT:
+      __pyx_v_f = __pyx_k_H;
+      break;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ */
+      case NPY_INT:
+      __pyx_v_f = __pyx_k_i;
+      break;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ */
+      case NPY_UINT:
+      __pyx_v_f = __pyx_k_I;
+      break;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ */
+      case NPY_LONG:
+      __pyx_v_f = __pyx_k_l;
+      break;
 
-/* "adios.pyx":535
- * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int varid
- *     cpdef public type type
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
  */
+      case NPY_ULONG:
+      __pyx_v_f = __pyx_k_L;
+      break;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
-  goto __pyx_L0;
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ */
+      case NPY_LONGLONG:
+      __pyx_v_f = __pyx_k_q;
+      break;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ */
+      case NPY_ULONGLONG:
+      __pyx_v_f = __pyx_k_Q;
+      break;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ */
+      case NPY_FLOAT:
+      __pyx_v_f = __pyx_k_f;
+      break;
 
-static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ */
+      case NPY_DOUBLE:
+      __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
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ */
+      case NPY_LONGDOUBLE:
+      __pyx_v_f = __pyx_k_g;
+      break;
+
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ */
+      case NPY_CFLOAT:
+      __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
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"
+ */
+      case NPY_CDOUBLE:
+      __pyx_v_f = __pyx_k_Zd;
+      break;
+
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ */
+      case NPY_CLONGDOUBLE:
+      __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
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      case NPY_OBJECT:
+      __pyx_v_f = __pyx_k_O;
+      break;
+      default:
+
+      /* "/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_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
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f             # <<<<<<<<<<<<<<
+ *                 return
+ *             else:
+ */
+    __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
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f
+ *                 return             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+  }
+  /*else*/ {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.format[0] = c'^' # Native data types, manual alignment
+ *                 offset = 0
+ */
+    __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
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
+ *                 offset = 0
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ */
+    (__pyx_v_info->format[0]) = '^';
+
+    /* "/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             # <<<<<<<<<<<<<<
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ *                                       info.format + _buffer_format_string_len,
+ */
+    __pyx_v_offset = 0;
+
+    /* "/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;
+
+    /* "/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             # <<<<<<<<<<<<<<
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ */
+    (__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
+ *         # experimental exception made for __getbuffer__ and __releasebuffer__
+ *         # -- the details of this may change.
+ *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
+
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+  }
+  goto __pyx_L2;
   __pyx_L0:;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
+    __Pyx_GOTREF(Py_None);
+    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
+  }
+  __pyx_L2:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "/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):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
+  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
 
-static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
+static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)Py_None);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
+  if (__pyx_t_1) {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+    /* "/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)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)
+ */
+    free(__pyx_v_info->format);
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.strides)
+ *                 # info.shape was stored after info.strides in the same block
+ */
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 # info.shape was stored after info.strides in the same block
+ * 
+ */
+    free(__pyx_v_info->strides);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
 
-/* "adios.pyx":536
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int varid             # <<<<<<<<<<<<<<
- *     cpdef public type type
- *     cpdef public int ndim
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 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
+ * 
+ * cdef inline object PyArray_MultiIterNew1(a):
+ *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.varid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->varid = __pyx_t_1;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
 
-  __pyx_r = 0;
+  /* "/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)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.varid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":537
- *     cpdef public bytes name
- *     cpdef public int varid
- *     cpdef public type type             # <<<<<<<<<<<<<<
- *     cpdef public int ndim
- *     cpdef public tuple dims
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  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
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->type));
-  __pyx_r = ((PyObject *)__pyx_v_self->type);
+  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
+ * 
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyType_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)__pyx_v_value);
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
 
-  __pyx_r = 0;
+  /* "/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)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
+ * 
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)Py_None);
-
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":538
- *     cpdef public int varid
- *     cpdef public type type
- *     cpdef public int ndim             # <<<<<<<<<<<<<<
- *     cpdef public tuple dims
- *     cpdef public int timedim
- */
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 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
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
+ */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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:             # <<<<<<<<<<<<<<
+ *     # Recursive utility function used in __getbuffer__ to get format
+ *     # string. The new location in the format string is returned.
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
+  PyArray_Descr *__pyx_v_child = 0;
+  int __pyx_v_endian_detector;
+  int __pyx_v_little_endian;
+  PyObject *__pyx_v_fields = 0;
+  PyObject *__pyx_v_childname = NULL;
+  PyObject *__pyx_v_new_offset = NULL;
+  PyObject *__pyx_v_t = NULL;
+  char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  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;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->ndim = __pyx_t_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
 
-/* "adios.pyx":539
- *     cpdef public type type
- *     cpdef public int ndim
- *     cpdef public tuple dims             # <<<<<<<<<<<<<<
- *     cpdef public int timedim
- *     cpdef public int characteristics_count
+  /* "/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             # <<<<<<<<<<<<<<
+ *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ *     cdef tuple fields
  */
+  __pyx_v_endian_detector = 1;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_r = ((PyObject *)__pyx_v_self->dims);
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)__pyx_v_value);
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.dims.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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)             # <<<<<<<<<<<<<<
+ *     cdef tuple fields
+ * 
+ */
+  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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
+ */
+  if (unlikely(__pyx_v_descr->names == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  for (;;) {
+    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #else
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #endif
+    __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)Py_None);
+    /* "/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]             # <<<<<<<<<<<<<<
+ *         child, new_offset = fields
+ * 
+ */
+    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3));
+    __pyx_t_3 = 0;
 
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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             # <<<<<<<<<<<<<<
+ * 
+ *         if (end - f) - <int>(new_offset - offset[0]) < 15:
+ */
+    if (likely(__pyx_v_fields != Py_None)) {
+      PyObject* sequence = __pyx_v_fields;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      Py_ssize_t size = Py_SIZE(sequence);
+      #else
+      Py_ssize_t size = PySequence_Size(sequence);
+      #endif
+      if (unlikely(size != 2)) {
+        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
+      #else
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      #endif
+    } else {
+      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3));
+    __pyx_t_3 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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:             # <<<<<<<<<<<<<<
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0);
+    if (__pyx_t_6) {
 
-/* "adios.pyx":540
- *     cpdef public int ndim
- *     cpdef public tuple dims
- *     cpdef public int timedim             # <<<<<<<<<<<<<<
- *     cpdef public int characteristics_count
+      /* "/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_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;}
+    }
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->timedim = __pyx_t_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":541
- *     cpdef public tuple dims
- *     cpdef public int timedim
- *     cpdef public int characteristics_count             # <<<<<<<<<<<<<<
+    /* "/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")
  * 
- *     def __init__(self, AdiosGroup group, char * name):
+ *         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);
+    } else {
+      __pyx_t_7 = __pyx_t_6;
+    }
+    if (!__pyx_t_7) {
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->characteristics_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->characteristics_count = __pyx_t_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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;
+    } else {
+      __pyx_t_6 = __pyx_t_7;
+    }
+    if (__pyx_t_6) {
 
-/* Python wrapper */
-static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
-static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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_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;}
+    }
 
-/* "numpy.pxd":194
- *         # experimental exception made for __getbuffer__ and __releasebuffer__
- *         # -- the details of this may change.
- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
- *             # This implementation of getbuffer is geared towards Cython
- *             # requirements, and does not yet fullfill the PEP.
+    /* "/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:             # <<<<<<<<<<<<<<
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1
  */
+    while (1) {
+      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (!__pyx_t_6) break;
 
-static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
-  int __pyx_v_copy_shape;
-  int __pyx_v_i;
-  int __pyx_v_ndim;
-  int __pyx_v_endian_detector;
-  int __pyx_v_little_endian;
-  int __pyx_v_t;
-  char *__pyx_v_f;
-  PyArray_Descr *__pyx_v_descr = 0;
-  int __pyx_v_offset;
-  int __pyx_v_hasfields;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
-  char *__pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getbuffer__", 0);
-  if (__pyx_v_info != NULL) {
-    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
-    __Pyx_GIVEREF(__pyx_v_info->obj);
-  }
+      /* "/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             # <<<<<<<<<<<<<<
+ *             f += 1
+ *             offset[0] += 1
+ */
+      (__pyx_v_f[0]) = 120;
 
-  /* "numpy.pxd":200
- *             # of flags
+      /* "/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             # <<<<<<<<<<<<<<
+ *             offset[0] += 1
  * 
- *             if info == NULL: return             # <<<<<<<<<<<<<<
+ */
+      __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
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1
+ *             offset[0] += 1             # <<<<<<<<<<<<<<
  * 
- *             cdef int copy_shape, i, ndim
+ *         offset[0] += child.itemsize
  */
-  __pyx_t_1 = ((__pyx_v_info == NULL) != 0);
-  if (__pyx_t_1) {
-    __pyx_r = 0;
-    goto __pyx_L0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+      __pyx_t_10 = 0;
+      (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1);
+    }
 
-  /* "numpy.pxd":203
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
+ *             offset[0] += 1
  * 
- *             cdef int copy_shape, i, ndim
- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
  * 
+ *         if not PyDataType_HASFIELDS(child):
  */
-  __pyx_v_endian_detector = 1;
+    __pyx_t_10 = 0;
+    (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize);
 
-  /* "numpy.pxd":204
- *             cdef int copy_shape, i, ndim
- *             cdef int endian_detector = 1
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
+ *         offset[0] += child.itemsize
  * 
- *             ndim = PyArray_NDIM(self)
+ *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
+ *             t = child.type_num
+ *             if end - f < 5:
  */
-  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+    __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
+    if (__pyx_t_6) {
 
-  /* "numpy.pxd":206
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
- * 
- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
+      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
  * 
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *         if not PyDataType_HASFIELDS(child):
+ *             t = child.type_num             # <<<<<<<<<<<<<<
+ *             if end - f < 5:
+ *                 raise RuntimeError(u"Format string allocated too short.")
  */
-  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
+      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
+      __pyx_t_4 = 0;
 
-  /* "numpy.pxd":208
- *             ndim = PyArray_NDIM(self)
+      /* "/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:             # <<<<<<<<<<<<<<
+ *                 raise RuntimeError(u"Format string allocated too short.")
  * 
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
- *                 copy_shape = 1
- *             else:
  */
-  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
-  if (__pyx_t_1) {
+      __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
+      if (__pyx_t_6) {
 
-    /* "numpy.pxd":209
+        /* "/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.")             # <<<<<<<<<<<<<<
  * 
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 copy_shape = 1             # <<<<<<<<<<<<<<
- *             else:
- *                 copy_shape = 0
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-    __pyx_v_copy_shape = 1;
-    goto __pyx_L4;
-  }
-  /*else*/ {
+        __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_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;}
+      }
 
-    /* "numpy.pxd":211
- *                 copy_shape = 1
- *             else:
- *                 copy_shape = 0             # <<<<<<<<<<<<<<
+      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":826
  * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
+ *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
  */
-    __pyx_v_copy_shape = 0;
-  }
-  __pyx_L4:;
+      __pyx_t_4 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 98;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":213
- *                 copy_shape = 0
- * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
  */
-  __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
-  if (__pyx_t_1) {
+      __pyx_t_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 66;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":214
- * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
- *                 raise ValueError(u"ndarray is not C contiguous")
- * 
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
  */
-    __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_4 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 104;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":215
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_25), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+      __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 72;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":217
- *                 raise ValueError(u"ndarray is not C contiguous")
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not Fortran contiguous")
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
  */
-  __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
-  if (__pyx_t_3) {
+      __pyx_t_4 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 105;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":218
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
- *                 raise ValueError(u"ndarray is not Fortran contiguous")
- * 
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
  */
-    __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_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 73;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":219
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
- * 
- *             info.buf = PyArray_DATA(self)
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_27), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+      __pyx_t_4 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 108;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":221
- *                 raise ValueError(u"ndarray is not Fortran contiguous")
- * 
- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
- *             info.ndim = ndim
- *             if copy_shape:
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
  */
-  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
+      __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 76;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":222
- * 
- *             info.buf = PyArray_DATA(self)
- *             info.ndim = ndim             # <<<<<<<<<<<<<<
- *             if copy_shape:
- *                 # Allocate new buffer for strides and shape info.
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
  */
-  __pyx_v_info->ndim = __pyx_v_ndim;
+      __pyx_t_4 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 113;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":223
- *             info.buf = PyArray_DATA(self)
- *             info.ndim = ndim
- *             if copy_shape:             # <<<<<<<<<<<<<<
- *                 # Allocate new buffer for strides and shape info.
- *                 # This is allocated as one block, strides first.
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
  */
-  __pyx_t_2 = (__pyx_v_copy_shape != 0);
-  if (__pyx_t_2) {
+      __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 81;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":226
- *                 # Allocate new buffer for strides and shape info.
- *                 # This is allocated as one block, strides first.
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
  */
-    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
+      __pyx_t_4 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 102;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":227
- *                 # This is allocated as one block, strides first.
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
  */
-    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
+      __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 100;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":228
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
- *                     info.shape[i] = PyArray_DIMS(self)[i]
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
  */
-    __pyx_t_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 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 103;
+        goto __pyx_L11;
+      }
 
-      /* "numpy.pxd":229
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
- *                     info.shape[i] = PyArray_DIMS(self)[i]
- *             else:
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
  */
-      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
-
-      /* "numpy.pxd":230
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
+      __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 102;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
+
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ */
+      __pyx_t_4 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 100;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
+
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
  *             else:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  */
-      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
-    }
-    goto __pyx_L7;
-  }
-  /*else*/ {
+      __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 103;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":232
- *                     info.shape[i] = PyArray_DIMS(self)[i]
+      /* "/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"             # <<<<<<<<<<<<<<
  *             else:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  */
-    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
+      __pyx_t_4 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 79;
+        goto __pyx_L11;
+      }
+      /*else*/ {
 
-    /* "numpy.pxd":233
+        /* "/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:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *             f += 1
+ *         else:
  */
-    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
-  }
-  __pyx_L7:;
+        __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_4);
+        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_3);
+        __pyx_t_3 = 0;
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+        __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:;
 
-  /* "numpy.pxd":234
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
- *             info.itemsize = PyArray_ITEMSIZE(self)
- *             info.readonly = not PyArray_ISWRITEABLE(self)
+      /* "/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             # <<<<<<<<<<<<<<
+ *         else:
+ *             # Cython ignores struct boundary information ("T{...}"),
  */
-  __pyx_v_info->suboffsets = NULL;
+      __pyx_v_f = (__pyx_v_f + 1);
+      goto __pyx_L9;
+    }
+    /*else*/ {
 
-  /* "numpy.pxd":235
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
- *             info.readonly = not PyArray_ISWRITEABLE(self)
+      /* "/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_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
+      __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_L9:;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "numpy.pxd":236
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)
- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
+  /* "/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             # <<<<<<<<<<<<<<
+ * 
  * 
- *             cdef int t
  */
-  __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
+  __pyx_r = __pyx_v_f;
+  goto __pyx_L0;
 
-  /* "numpy.pxd":239
+  /* "/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 int t
- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
- *             cdef dtype descr = self.descr
- *             cdef list stack
+ * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
+ *     # Recursive utility function used in __getbuffer__ to get format
+ *     # string. The new location in the format string is returned.
  */
-  __pyx_v_f = NULL;
 
-  /* "numpy.pxd":240
- *             cdef int t
- *             cdef char* f = NULL
- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
- *             cdef list stack
- *             cdef int offset
- */
-  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
-  __Pyx_INCREF(__pyx_t_4);
-  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
-  __pyx_t_4 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_child);
+  __Pyx_XDECREF(__pyx_v_fields);
+  __Pyx_XDECREF(__pyx_v_childname);
+  __Pyx_XDECREF(__pyx_v_new_offset);
+  __Pyx_XDECREF(__pyx_v_t);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "numpy.pxd":244
- *             cdef int offset
+/* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":966
  * 
- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
  * 
- *             if not hasfields and not copy_shape:
+ * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
+ *      cdef PyObject* baseptr
+ *      if base is None:
  */
-  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-  /* "numpy.pxd":246
- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
- * 
- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
- *                 # do not call releasebuffer
- *                 info.obj = None
+static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
+  PyObject *__pyx_v_baseptr;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("set_array_base", 0);
+
+  /* "/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:             # <<<<<<<<<<<<<<
+ *          baseptr = NULL
+ *      else:
  */
-  __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0);
+  __pyx_t_1 = (__pyx_v_base == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0);
-    __pyx_t_1 = __pyx_t_3;
-  } else {
-    __pyx_t_1 = __pyx_t_2;
-  }
-  if (__pyx_t_1) {
 
-    /* "numpy.pxd":248
- *             if not hasfields and not copy_shape:
- *                 # do not call releasebuffer
- *                 info.obj = None             # <<<<<<<<<<<<<<
- *             else:
- *                 # need to call releasebuffer
+    /* "/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             # <<<<<<<<<<<<<<
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!
  */
-    __Pyx_INCREF(Py_None);
-    __Pyx_GIVEREF(Py_None);
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj);
-    __pyx_v_info->obj = Py_None;
-    goto __pyx_L10;
+    __pyx_v_baseptr = NULL;
+    goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "numpy.pxd":251
- *             else:
- *                 # need to call releasebuffer
- *                 info.obj = self             # <<<<<<<<<<<<<<
- * 
- *             if not hasfields:
+    /* "/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!             # <<<<<<<<<<<<<<
+ *          baseptr = <PyObject*>base
+ *      Py_XDECREF(arr.base)
  */
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj);
-    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+    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
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!
+ *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
+ *      Py_XDECREF(arr.base)
+ *      arr.base = baseptr
+ */
+    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
   }
-  __pyx_L10:;
+  __pyx_L3:;
 
-  /* "numpy.pxd":253
- *                 info.obj = self
+  /* "/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)             # <<<<<<<<<<<<<<
+ *      arr.base = baseptr
  * 
- *             if not hasfields:             # <<<<<<<<<<<<<<
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or
  */
-  __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
-  if (__pyx_t_1) {
+  Py_XDECREF(__pyx_v_arr->base);
 
-    /* "numpy.pxd":254
+  /* "/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             # <<<<<<<<<<<<<<
  * 
- *             if not hasfields:
- *                 t = descr.type_num             # <<<<<<<<<<<<<<
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
+ * cdef inline object get_array_base(ndarray arr):
  */
-    __pyx_t_5 = __pyx_v_descr->type_num;
-    __pyx_v_t = __pyx_t_5;
+  __pyx_v_arr->base = __pyx_v_baseptr;
 
-    /* "numpy.pxd":255
- *             if not hasfields:
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")
+  /* "/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):             # <<<<<<<<<<<<<<
+ *      cdef PyObject* baseptr
+ *      if base is None:
  */
-    __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0);
-    if (__pyx_t_1) {
-      __pyx_t_2 = (__pyx_v_little_endian != 0);
-    } else {
-      __pyx_t_2 = __pyx_t_1;
-    }
-    if (!__pyx_t_2) {
 
-      /* "numpy.pxd":256
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"
- */
-      __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0);
-      if (__pyx_t_1) {
-        __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0);
-        __pyx_t_7 = __pyx_t_3;
-      } else {
-        __pyx_t_7 = __pyx_t_1;
-      }
-      __pyx_t_1 = __pyx_t_7;
-    } else {
-      __pyx_t_1 = __pyx_t_2;
-    }
-    if (__pyx_t_1) {
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
 
-      /* "numpy.pxd":257
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
+/* "/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
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L12;
-    }
-    __pyx_L12:;
 
-    /* "numpy.pxd":274
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- */
-    switch (__pyx_v_t) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("get_array_base", 0);
 
-      /* "numpy.pxd":258
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"
+  /* "/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:             # <<<<<<<<<<<<<<
+ *         return None
+ *     else:
  */
-      case NPY_BYTE:
-      __pyx_v_f = __pyx_k__b;
-      break;
+  __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
+  if (__pyx_t_1) {
 
-      /* "numpy.pxd":259
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"
+    /* "/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             # <<<<<<<<<<<<<<
+ *     else:
+ *         return <object>arr.base
  */
-      case NPY_UBYTE:
-      __pyx_v_f = __pyx_k__B;
-      break;
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+  }
+  /*else*/ {
 
-      /* "numpy.pxd":260
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"
+    /* "/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             # <<<<<<<<<<<<<<
  */
-      case NPY_SHORT:
-      __pyx_v_f = __pyx_k__h;
-      break;
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
+    __pyx_r = ((PyObject *)__pyx_v_arr->base);
+    goto __pyx_L0;
+  }
 
-      /* "numpy.pxd":261
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"
+  /* "/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
  */
-      case NPY_USHORT:
-      __pyx_v_f = __pyx_k__H;
-      break;
 
-      /* "numpy.pxd":262
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"
- */
-      case NPY_INT:
-      __pyx_v_f = __pyx_k__i;
-      break;
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_5adios_file __pyx_vtable_5adios_file;
 
-      /* "numpy.pxd":263
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"
- */
-      case NPY_UINT:
-      __pyx_v_f = __pyx_k__I;
-      break;
+static PyObject *__pyx_tp_new_5adios_file(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_5adios_file *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_5adios_file *)o);
+  p->__pyx_vtab = __pyx_vtabptr_5adios_file;
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->attr = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
+}
 
-      /* "numpy.pxd":264
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"
- */
-      case NPY_LONG:
-      __pyx_v_f = __pyx_k__l;
-      break;
+static void __pyx_tp_dealloc_5adios_file(PyObject *o) {
+  struct __pyx_obj_5adios_file *p = (struct __pyx_obj_5adios_file *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->var);
+  Py_CLEAR(p->attr);
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-      /* "numpy.pxd":265
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- */
-      case NPY_ULONG:
-      __pyx_v_f = __pyx_k__L;
-      break;
+static int __pyx_tp_traverse_5adios_file(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5adios_file *p = (struct __pyx_obj_5adios_file *)o;
+  if (p->var) {
+    e = (*v)(p->var, a); if (e) return e;
+  }
+  if (p->attr) {
+    e = (*v)(p->attr, a); if (e) return e;
+  }
+  return 0;
+}
 
-      /* "numpy.pxd":266
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"
- */
-      case NPY_LONGLONG:
-      __pyx_v_f = __pyx_k__q;
-      break;
+static int __pyx_tp_clear_5adios_file(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_obj_5adios_file *p = (struct __pyx_obj_5adios_file *)o;
+  tmp = ((PyObject*)p->var);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->attr);
+  p->attr = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
 
-      /* "numpy.pxd":267
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"
- */
-      case NPY_ULONGLONG:
-      __pyx_v_f = __pyx_k__Q;
-      break;
+static PyObject *__pyx_getprop_5adios_4file_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_4name_1__get__(o);
+}
 
-      /* "numpy.pxd":268
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- */
-      case NPY_FLOAT:
-      __pyx_v_f = __pyx_k__f;
-      break;
+static int __pyx_setprop_5adios_4file_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_4name_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_4file_4name_5__del__(o);
+  }
+}
 
-      /* "numpy.pxd":269
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- */
-      case NPY_DOUBLE:
-      __pyx_v_f = __pyx_k__d;
-      break;
+static PyObject *__pyx_getprop_5adios_4file_nvars(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_5nvars_1__get__(o);
+}
 
-      /* "numpy.pxd":270
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- */
-      case NPY_LONGDOUBLE:
-      __pyx_v_f = __pyx_k__g;
-      break;
+static int __pyx_setprop_5adios_4file_nvars(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_5nvars_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-      /* "numpy.pxd":271
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- */
-      case NPY_CFLOAT:
-      __pyx_v_f = __pyx_k__Zf;
-      break;
+static PyObject *__pyx_getprop_5adios_4file_nattrs(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_6nattrs_1__get__(o);
+}
 
-      /* "numpy.pxd":272
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"
- */
-      case NPY_CDOUBLE:
-      __pyx_v_f = __pyx_k__Zd;
-      break;
+static int __pyx_setprop_5adios_4file_nattrs(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_6nattrs_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-      /* "numpy.pxd":273
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_OBJECT:      f = "O"
- *                 else:
- */
-      case NPY_CLONGDOUBLE:
-      __pyx_v_f = __pyx_k__Zg;
-      break;
-
-      /* "numpy.pxd":274
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- */
-      case NPY_OBJECT:
-      __pyx_v_f = __pyx_k__O;
-      break;
-      default:
-
-      /* "numpy.pxd":276
- *                 elif t == NPY_OBJECT:      f = "O"
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
- *                 info.format = f
- *                 return
- */
-      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
-      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
-      __pyx_t_8 = 0;
-      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      break;
-    }
-
-    /* "numpy.pxd":277
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *                 info.format = f             # <<<<<<<<<<<<<<
- *                 return
- *             else:
- */
-    __pyx_v_info->format = __pyx_v_f;
+static PyObject *__pyx_getprop_5adios_4file_current_step(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_12current_step_1__get__(o);
+}
 
-    /* "numpy.pxd":278
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *                 info.format = f
- *                 return             # <<<<<<<<<<<<<<
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
- */
-    __pyx_r = 0;
-    goto __pyx_L0;
-    goto __pyx_L11;
+static int __pyx_setprop_5adios_4file_current_step(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_12current_step_3__set__(o, v);
   }
-  /*else*/ {
-
-    /* "numpy.pxd":280
- *                 return
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
- *                 info.format[0] = c'^' # Native data types, manual alignment
- *                 offset = 0
- */
-    __pyx_v_info->format = ((char *)malloc(255));
-
-    /* "numpy.pxd":281
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
- *                 offset = 0
- *                 f = _util_dtypestring(descr, info.format + 1,
- */
-    (__pyx_v_info->format[0]) = '^';
-
-    /* "numpy.pxd":282
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
- *                 info.format[0] = c'^' # Native data types, manual alignment
- *                 offset = 0             # <<<<<<<<<<<<<<
- *                 f = _util_dtypestring(descr, info.format + 1,
- *                                       info.format + _buffer_format_string_len,
- */
-    __pyx_v_offset = 0;
-
-    /* "numpy.pxd":285
- *                 f = _util_dtypestring(descr, info.format + 1,
- *                                       info.format + _buffer_format_string_len,
- *                                       &offset)             # <<<<<<<<<<<<<<
- *                 f[0] = c'\0' # Terminate format string
- * 
- */
-    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_f = __pyx_t_9;
-
-    /* "numpy.pxd":286
- *                                       info.format + _buffer_format_string_len,
- *                                       &offset)
- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
- * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
- */
-    (__pyx_v_f[0]) = '\x00';
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  __pyx_L11:;
+}
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+static PyObject *__pyx_getprop_5adios_4file_last_step(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_9last_step_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_4file_last_step(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_9last_step_3__set__(o, v);
   }
-  goto __pyx_L2;
-  __pyx_L0:;
-  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
-    __Pyx_GOTREF(Py_None);
-    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  __pyx_L2:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
 
-/* Python wrapper */
-static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
-static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
-  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
-  __Pyx_RefNannyFinishContext();
+static PyObject *__pyx_getprop_5adios_4file_endianness(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_10endianness_1__get__(o);
 }
 
-/* "numpy.pxd":288
- *                 f[0] = c'\0' # Terminate format string
- * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)
- */
-
-static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
+static int __pyx_setprop_5adios_4file_endianness(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_10endianness_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "numpy.pxd":289
- * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- */
-  __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
-  if (__pyx_t_1) {
+static PyObject *__pyx_getprop_5adios_4file_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_7version_1__get__(o);
+}
 
-    /* "numpy.pxd":290
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 stdlib.free(info.strides)
- */
-    free(__pyx_v_info->format);
-    goto __pyx_L3;
+static int __pyx_setprop_5adios_4file_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_7version_3__set__(o, v);
   }
-  __pyx_L3:;
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "numpy.pxd":291
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
- *                 stdlib.free(info.strides)
- *                 # info.shape was stored after info.strides in the same block
- */
-  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
-  if (__pyx_t_1) {
+static PyObject *__pyx_getprop_5adios_4file_file_size(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_9file_size_1__get__(o);
+}
 
-    /* "numpy.pxd":292
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
- *                 # info.shape was stored after info.strides in the same block
- * 
- */
-    free(__pyx_v_info->strides);
-    goto __pyx_L4;
+static int __pyx_setprop_5adios_4file_file_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_9file_size_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  __pyx_L4:;
-
-  __Pyx_RefNannyFinishContext();
 }
 
-/* "numpy.pxd":768
- * ctypedef npy_cdouble     complex_t
- * 
- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(1, <void*>a)
- * 
- */
+static PyObject *__pyx_getprop_5adios_4file_var(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_3var_1__get__(o);
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
+static int __pyx_setprop_5adios_4file_var(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_3var_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_4file_3var_5__del__(o);
+  }
+}
 
-  /* "numpy.pxd":769
- * 
- * cdef inline object PyArray_MultiIterNew1(a):
- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static PyObject *__pyx_getprop_5adios_4file_attr(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_4file_4attr_1__get__(o);
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static int __pyx_setprop_5adios_4file_attr(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_4file_4attr_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_4file_4attr_5__del__(o);
+  }
 }
 
-/* "numpy.pxd":771
- *     return PyArray_MultiIterNew(1, <void*>a)
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
- * 
- */
+static 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)},
+  {0, 0, 0, 0}
+};
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
+static struct PyGetSetDef __pyx_getsets_5adios_file[] = {
+  {(char *)"name", __pyx_getprop_5adios_4file_name, __pyx_setprop_5adios_4file_name, 0, 0},
+  {(char *)"nvars", __pyx_getprop_5adios_4file_nvars, __pyx_setprop_5adios_4file_nvars, 0, 0},
+  {(char *)"nattrs", __pyx_getprop_5adios_4file_nattrs, __pyx_setprop_5adios_4file_nattrs, 0, 0},
+  {(char *)"current_step", __pyx_getprop_5adios_4file_current_step, __pyx_setprop_5adios_4file_current_step, 0, 0},
+  {(char *)"last_step", __pyx_getprop_5adios_4file_last_step, __pyx_setprop_5adios_4file_last_step, 0, 0},
+  {(char *)"endianness", __pyx_getprop_5adios_4file_endianness, __pyx_setprop_5adios_4file_endianness, 0, 0},
+  {(char *)"version", __pyx_getprop_5adios_4file_version, __pyx_setprop_5adios_4file_version, 0, 0},
+  {(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},
+  {0, 0, 0, 0, 0}
+};
 
-  /* "numpy.pxd":772
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static PyTypeObject __pyx_type_5adios_file = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("adios.file"), /*tp_name*/
+  sizeof(struct __pyx_obj_5adios_file), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5adios_file, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_5adios_file, /*tp_traverse*/
+  __pyx_tp_clear_5adios_file, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5adios_file, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5adios_file, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_5adios_4file_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_5adios_file, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_5adios_var __pyx_vtable_5adios_var;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_tp_new_5adios_var(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_5adios_var *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_5adios_var *)o);
+  p->__pyx_vtab = __pyx_vtabptr_5adios_var;
+  p->file = ((struct __pyx_obj_5adios_file *)Py_None); Py_INCREF(Py_None);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
 }
 
-/* "numpy.pxd":774
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
- * 
- */
+static void __pyx_tp_dealloc_5adios_var(PyObject *o) {
+  struct __pyx_obj_5adios_var *p = (struct __pyx_obj_5adios_var *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->file);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->type);
+  Py_CLEAR(p->dims);
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
+static int __pyx_tp_traverse_5adios_var(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5adios_var *p = (struct __pyx_obj_5adios_var *)o;
+  if (p->file) {
+    e = (*v)(((PyObject*)p->file), a); if (e) return e;
+  }
+  if (p->type) {
+    e = (*v)(p->type, a); if (e) return e;
+  }
+  if (p->dims) {
+    e = (*v)(p->dims, a); if (e) return e;
+  }
+  return 0;
+}
 
-  /* "numpy.pxd":775
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_tp_clear_5adios_var(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_obj_5adios_var *p = (struct __pyx_obj_5adios_var *)o;
+  tmp = ((PyObject*)p->file);
+  p->file = ((struct __pyx_obj_5adios_file *)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->type);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->dims);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_5adios_3var_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_4name_1__get__(o);
 }
 
-/* "numpy.pxd":777
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
- * 
- */
+static int __pyx_setprop_5adios_3var_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_4name_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_3var_4name_5__del__(o);
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
+static PyObject *__pyx_getprop_5adios_3var_varid(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_5varid_1__get__(o);
+}
 
-  /* "numpy.pxd":778
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_5adios_3var_varid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_5varid_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_5adios_3var_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_4type_1__get__(o);
 }
 
-/* "numpy.pxd":780
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
- * 
- */
+static int __pyx_setprop_5adios_3var_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_4type_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_3var_4type_5__del__(o);
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
+static PyObject *__pyx_getprop_5adios_3var_ndim(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_4ndim_1__get__(o);
+}
 
-  /* "numpy.pxd":781
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
- * 
- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_5adios_3var_ndim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_4ndim_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_5adios_3var_dims(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_4dims_1__get__(o);
 }
 
-/* "numpy.pxd":783
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
- * 
- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
- *     # Recursive utility function used in __getbuffer__ to get format
- *     # string. The new location in the format string is returned.
- */
+static int __pyx_setprop_5adios_3var_dims(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_4dims_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_3var_4dims_5__del__(o);
+  }
+}
 
-static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
-  PyArray_Descr *__pyx_v_child = 0;
-  int __pyx_v_endian_detector;
-  int __pyx_v_little_endian;
-  PyObject *__pyx_v_fields = 0;
-  PyObject *__pyx_v_childname = NULL;
-  PyObject *__pyx_v_new_offset = NULL;
-  PyObject *__pyx_v_t = NULL;
-  char *__pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *(*__pyx_t_6)(PyObject *);
-  int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
-  int __pyx_t_10;
-  long __pyx_t_11;
-  char *__pyx_t_12;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
+static PyObject *__pyx_getprop_5adios_3var_nsteps(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_3var_6nsteps_1__get__(o);
+}
 
-  /* "numpy.pxd":790
- *     cdef int delta_offset
- *     cdef tuple i
- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
- *     cdef tuple fields
- */
-  __pyx_v_endian_detector = 1;
+static int __pyx_setprop_5adios_3var_nsteps(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_3var_6nsteps_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "numpy.pxd":791
- *     cdef tuple i
- *     cdef int endian_detector = 1
- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
- *     cdef tuple fields
- * 
- */
-  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+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)},
+  {0, 0, 0, 0}
+};
 
-  /* "numpy.pxd":794
- *     cdef tuple fields
- * 
- *     for childname in descr.names:             # <<<<<<<<<<<<<<
- *         fields = descr.fields[childname]
- *         child, new_offset = fields
- */
-  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
-  for (;;) {
-    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #endif
-    __Pyx_XDECREF(__pyx_v_childname);
-    __pyx_v_childname = __pyx_t_3;
-    __pyx_t_3 = 0;
+static struct PyGetSetDef __pyx_getsets_5adios_var[] = {
+  {(char *)"name", __pyx_getprop_5adios_3var_name, __pyx_setprop_5adios_3var_name, 0, 0},
+  {(char *)"varid", __pyx_getprop_5adios_3var_varid, __pyx_setprop_5adios_3var_varid, 0, 0},
+  {(char *)"type", __pyx_getprop_5adios_3var_type, __pyx_setprop_5adios_3var_type, 0, 0},
+  {(char *)"ndim", __pyx_getprop_5adios_3var_ndim, __pyx_setprop_5adios_3var_ndim, 0, 0},
+  {(char *)"dims", __pyx_getprop_5adios_3var_dims, __pyx_setprop_5adios_3var_dims, 0, 0},
+  {(char *)"nsteps", __pyx_getprop_5adios_3var_nsteps, __pyx_setprop_5adios_3var_nsteps, 0, 0},
+  {0, 0, 0, 0, 0}
+};
 
-    /* "numpy.pxd":795
- * 
- *     for childname in descr.names:
- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
- *         child, new_offset = fields
+static PyTypeObject __pyx_type_5adios_var = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("adios.var"), /*tp_name*/
+  sizeof(struct __pyx_obj_5adios_var), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5adios_var, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_5adios_var, /*tp_traverse*/
+  __pyx_tp_clear_5adios_var, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5adios_var, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5adios_var, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_5adios_3var_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_5adios_var, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #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)},
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+  #else
+    PyModuleDef_HEAD_INIT,
+  #endif
+    __Pyx_NAMESTR("adios"),
+    __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_15s_d, __pyx_k_15s_d, sizeof(__pyx_k_15s_d), 0, 0, 1, 0},
+  {&__pyx_kp_s_15s_lu, __pyx_k_15s_lu, sizeof(__pyx_k_15s_lu), 0, 0, 1, 0},
+  {&__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_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_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 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_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_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},
+  {&__pyx_kp_s_No_valid_variable, __pyx_k_No_valid_variable, sizeof(__pyx_k_No_valid_variable), 0, 0, 1, 0},
+  {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0},
+  {&__pyx_kp_s_Not_a_valid_var, __pyx_k_Not_a_valid_var, sizeof(__pyx_k_Not_a_valid_var), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_file, __pyx_k_Not_an_open_file, sizeof(__pyx_k_Not_an_open_file), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_var, __pyx_k_Not_an_open_var, sizeof(__pyx_k_Not_an_open_var), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_variable, __pyx_k_Not_an_open_variable, sizeof(__pyx_k_Not_an_open_variable), 0, 0, 1, 0},
+  {&__pyx_kp_s_Offset_dimension_mismatch, __pyx_k_Offset_dimension_mismatch, sizeof(__pyx_k_Offset_dimension_mismatch), 0, 0, 1, 0},
+  {&__pyx_kp_s_Only_contiguous_arrays_are_suppo, __pyx_k_Only_contiguous_arrays_are_suppo, sizeof(__pyx_k_Only_contiguous_arrays_are_suppo), 0, 0, 1, 0},
+  {&__pyx_kp_s_Reading, __pyx_k_Reading, sizeof(__pyx_k_Reading), 0, 0, 1, 0},
+  {&__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_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_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_adios, __pyx_k_adios, sizeof(__pyx_k_adios), 0, 0, 1, 1},
+  {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1},
+  {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1},
+  {&__pyx_n_s_attr_namelist, __pyx_k_attr_namelist, sizeof(__pyx_k_attr_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s_attrs, __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_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},
+  {&__pyx_kp_s_bytes, __pyx_k_bytes, sizeof(__pyx_k_bytes), 0, 0, 1, 0},
+  {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
+  {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1},
+  {&__pyx_n_s_complex, __pyx_k_complex, sizeof(__pyx_k_complex), 0, 0, 1, 1},
+  {&__pyx_n_s_complex128, __pyx_k_complex128, sizeof(__pyx_k_complex128), 0, 0, 1, 1},
+  {&__pyx_n_s_complex64, __pyx_k_complex64, sizeof(__pyx_k_complex64), 0, 0, 1, 1},
+  {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1},
+  {&__pyx_n_s_contiguous, __pyx_k_contiguous, sizeof(__pyx_k_contiguous), 0, 0, 1, 1},
+  {&__pyx_n_s_copy, __pyx_k_copy, sizeof(__pyx_k_copy), 0, 0, 1, 1},
+  {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
+  {&__pyx_n_s_current_step, __pyx_k_current_step, sizeof(__pyx_k_current_step), 0, 0, 1, 1},
+  {&__pyx_n_s_data_size, __pyx_k_data_size, sizeof(__pyx_k_data_size), 0, 0, 1, 1},
+  {&__pyx_n_s_dimensions, __pyx_k_dimensions, sizeof(__pyx_k_dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s_dims, __pyx_k_dims, sizeof(__pyx_k_dims), 0, 0, 1, 1},
+  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
+  {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1},
+  {&__pyx_n_s_double_complex, __pyx_k_double_complex, sizeof(__pyx_k_double_complex), 0, 0, 1, 1},
+  {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},
+  {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
+  {&__pyx_n_s_endianness, __pyx_k_endianness, sizeof(__pyx_k_endianness), 0, 0, 1, 1},
+  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
+  {&__pyx_n_s_fd_p, __pyx_k_fd_p, sizeof(__pyx_k_fd_p), 0, 0, 1, 1},
+  {&__pyx_n_s_fh, __pyx_k_fh, sizeof(__pyx_k_fh), 0, 0, 1, 1},
+  {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1},
+  {&__pyx_n_s_file_size, __pyx_k_file_size, sizeof(__pyx_k_file_size), 0, 0, 1, 1},
+  {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1},
+  {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
+  {&__pyx_n_s_float128, __pyx_k_float128, sizeof(__pyx_k_float128), 0, 0, 1, 1},
+  {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1},
+  {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1},
+  {&__pyx_n_s_fname, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1},
+  {&__pyx_n_s_fp, __pyx_k_fp, sizeof(__pyx_k_fp), 0, 0, 1, 1},
+  {&__pyx_n_s_from_steps, __pyx_k_from_steps, sizeof(__pyx_k_from_steps), 0, 0, 1, 1},
+  {&__pyx_n_s_global_dimensions, __pyx_k_global_dimensions, sizeof(__pyx_k_global_dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s_group, __pyx_k_group, sizeof(__pyx_k_group), 0, 0, 1, 1},
+  {&__pyx_n_s_group_id, __pyx_k_group_id, sizeof(__pyx_k_group_id), 0, 0, 1, 1},
+  {&__pyx_n_s_group_name, __pyx_k_group_name, sizeof(__pyx_k_group_name), 0, 0, 1, 1},
+  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+  {&__pyx_n_s_int16, __pyx_k_int16, sizeof(__pyx_k_int16), 0, 0, 1, 1},
+  {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1},
+  {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1},
+  {&__pyx_n_s_int8, __pyx_k_int8, sizeof(__pyx_k_int8), 0, 0, 1, 1},
+  {&__pyx_n_s_integer, __pyx_k_integer, sizeof(__pyx_k_integer), 0, 0, 1, 1},
+  {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
+  {&__pyx_n_s_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_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_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_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},
+  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+  {&__pyx_n_s_nattrs, __pyx_k_nattrs, sizeof(__pyx_k_nattrs), 0, 0, 1, 1},
+  {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0},
+  {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0},
+  {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1},
+  {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1},
+  {&__pyx_n_s_nsteps, __pyx_k_nsteps, sizeof(__pyx_k_nsteps), 0, 0, 1, 1},
+  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
+  {&__pyx_n_s_nvars, __pyx_k_nvars, sizeof(__pyx_k_nvars), 0, 0, 1, 1},
+  {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
+  {&__pyx_n_s_parameters, __pyx_k_parameters, sizeof(__pyx_k_parameters), 0, 0, 1, 1},
+  {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
+  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
+  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
+  {&__pyx_n_s_printself, __pyx_k_printself, sizeof(__pyx_k_printself), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
+  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
+  {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1},
+  {&__pyx_n_s_readvar, __pyx_k_readvar, sizeof(__pyx_k_readvar), 0, 0, 1, 1},
+  {&__pyx_n_s_real, __pyx_k_real, sizeof(__pyx_k_real), 0, 0, 1, 1},
+  {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1},
+  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
+  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
+  {&__pyx_n_s_stats, __pyx_k_stats, sizeof(__pyx_k_stats), 0, 0, 1, 1},
+  {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1},
+  {&__pyx_n_s_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_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
+  {&__pyx_n_s_uint16, __pyx_k_uint16, sizeof(__pyx_k_uint16), 0, 0, 1, 1},
+  {&__pyx_n_s_uint32, __pyx_k_uint32, sizeof(__pyx_k_uint32), 0, 0, 1, 1},
+  {&__pyx_n_s_uint64, __pyx_k_uint64, sizeof(__pyx_k_uint64), 0, 0, 1, 1},
+  {&__pyx_n_s_uint8, __pyx_k_uint8, sizeof(__pyx_k_uint8), 0, 0, 1, 1},
+  {&__pyx_n_s_unknown, __pyx_k_unknown, sizeof(__pyx_k_unknown), 0, 0, 1, 1},
+  {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0},
+  {&__pyx_n_s_unsigned_byte, __pyx_k_unsigned_byte, sizeof(__pyx_k_unsigned_byte), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_integer, __pyx_k_unsigned_integer, sizeof(__pyx_k_unsigned_integer), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_long, __pyx_k_unsigned_long, sizeof(__pyx_k_unsigned_long), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_short, __pyx_k_unsigned_short, sizeof(__pyx_k_unsigned_short), 0, 0, 1, 1},
+  {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
+  {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1},
+  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
+  {&__pyx_n_s_var, __pyx_k_var, sizeof(__pyx_k_var), 0, 0, 1, 1},
+  {&__pyx_n_s_var_namelist, __pyx_k_var_namelist, sizeof(__pyx_k_var_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s_varid, __pyx_k_varid, sizeof(__pyx_k_varid), 0, 0, 1, 1},
+  {&__pyx_n_s_varname, __pyx_k_varname, sizeof(__pyx_k_varname), 0, 0, 1, 1},
+  {&__pyx_n_s_vars, __pyx_k_vars, sizeof(__pyx_k_vars), 0, 0, 1, 1},
+  {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1},
+  {&__pyx_n_s_vp, __pyx_k_vp, sizeof(__pyx_k_vp), 0, 0, 1, 1},
+  {&__pyx_n_s_when, __pyx_k_when, sizeof(__pyx_k_when), 0, 0, 1, 1},
+  {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_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_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+
+  /* "adios.pyx":458
+ *         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_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
-    __pyx_v_fields = ((PyObject*)__pyx_t_3);
-    __pyx_t_3 = 0;
+  __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);
 
-    /* "numpy.pxd":796
- *     for childname in descr.names:
- *         fields = descr.fields[childname]
- *         child, new_offset = fields             # <<<<<<<<<<<<<<
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
+  /* "adios.pyx":530
+ *         if len(offset) == 0:
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)             # <<<<<<<<<<<<<<
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)
  */
-    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
-      PyObject* sequence = ((PyObject *)__pyx_v_fields);
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 2)) {
-        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
-      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(__pyx_t_4);
-      #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      #endif
-    } else if (1) {
-      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else
-    {
-      Py_ssize_t index = -1;
-      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
-      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_3);
-      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_6 = NULL;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L6_unpacking_done;
-      __pyx_L5_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_6 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L6_unpacking_done:;
-    }
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
-    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
-    __pyx_t_3 = 0;
-    __Pyx_XDECREF(__pyx_v_new_offset);
-    __pyx_v_new_offset = __pyx_t_4;
-    __pyx_t_4 = 0;
+  __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);
 
-    /* "numpy.pxd":798
- *         child, new_offset = fields
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
+  /* "/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 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (__pyx_t_7) {
+  __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);
 
-      /* "numpy.pxd":799
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
+  /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         if ((child.byteorder == c'>' and little_endian) or
+ *             info.buf = PyArray_DATA(self)
  */
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_32), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L7;
-    }
-    __pyx_L7:;
+  __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);
 
-    /* "numpy.pxd":801
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
- * 
- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
- *             (child.byteorder == c'<' and not little_endian)):
- *             raise ValueError(u"Non-native byte order not supported")
+  /* "/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_7 = ((__pyx_v_child->byteorder == '>') != 0);
-    if (__pyx_t_7) {
-      __pyx_t_8 = (__pyx_v_little_endian != 0);
-    } else {
-      __pyx_t_8 = __pyx_t_7;
-    }
-    if (!__pyx_t_8) {
+  __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);
 
-      /* "numpy.pxd":802
+  /* "/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
- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
- *             raise ValueError(u"Non-native byte order not supported")
- *             # One could encode it in the format string and have Cython
  */
-      __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
-      if (__pyx_t_7) {
-        __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0);
-        __pyx_t_10 = __pyx_t_9;
-      } else {
-        __pyx_t_10 = __pyx_t_7;
-      }
-      __pyx_t_7 = __pyx_t_10;
-    } else {
-      __pyx_t_7 = __pyx_t_8;
-    }
-    if (__pyx_t_7) {
+  __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);
 
-      /* "numpy.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_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_33), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L8;
-    }
-    __pyx_L8:;
+  __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);
 
-    /* "numpy.pxd":813
+  /* "/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.")             # <<<<<<<<<<<<<<
  * 
- *         # Output padding bytes
- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
- *             f[0] = 120 # "x"; pad byte
- *             f += 1
- */
-    while (1) {
-      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (!__pyx_t_7) break;
-
-      /* "numpy.pxd":814
- *         # Output padding bytes
- *         while offset[0] < new_offset:
- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
- *             f += 1
- *             offset[0] += 1
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-      (__pyx_v_f[0]) = 120;
+  __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);
 
-      /* "numpy.pxd":815
- *         while offset[0] < new_offset:
- *             f[0] = 120 # "x"; pad byte
- *             f += 1             # <<<<<<<<<<<<<<
- *             offset[0] += 1
+  /* "adios.pyx":569
+ * ## ====================
  * 
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     if not f.var.has_key(varname):
  */
-      __pyx_v_f = (__pyx_v_f + 1);
+  __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;}
 
-      /* "numpy.pxd":816
- *             f[0] = 120 # "x"; pad byte
- *             f += 1
- *             offset[0] += 1             # <<<<<<<<<<<<<<
+  /* "adios.pyx":578
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
- *         offset[0] += child.itemsize
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     return {'nvars': f.nvars,
  */
-      __pyx_t_11 = 0;
-      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
+  __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_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_52 = PyInt_FromLong(52); if (unlikely(!__pyx_int_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_54 = PyInt_FromLong(54); if (unlikely(!__pyx_int_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initadios(void); /*proto*/
+PyMODINIT_FUNC initadios(void)
+#else
+PyMODINIT_FUNC PyInit_adios(void); /*proto*/
+PyMODINIT_FUNC PyInit_adios(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_REFNANNY
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_adios(void)", 0);
+  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #ifdef __Pyx_CyFunction_USED
+  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_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;}
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  if (__pyx_module_is_main_adios) {
+    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  }
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "adios")) {
+      if (unlikely(PyDict_SetItemString(modules, "adios", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
+  }
+  #endif
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Constants init code ---*/
+  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Global init code ---*/
+  /*--- Variable export code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_5adios_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_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;}
+  __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;}
+  __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;}
+  __pyx_ptype_5adios_var = &__pyx_type_5adios_var;
+  /*--- Type import code ---*/
+  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
+  #if CYTHON_COMPILING_IN_PYPY
+  sizeof(PyTypeObject),
+  #else
+  sizeof(PyHeapTypeObject),
+  #endif
+  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Variable import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
 
-    /* "numpy.pxd":818
- *             offset[0] += 1
+  /* "adios.pyx":12
+ * """
  * 
- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
+ * import numpy as np             # <<<<<<<<<<<<<<
+ * cimport numpy as np
  * 
- *         if not PyDataType_HASFIELDS(child):
  */
-    __pyx_t_11 = 0;
-    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "numpy.pxd":820
- *         offset[0] += child.itemsize
+  /* "adios.pyx":225
+ * ## ====================
  * 
- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
- *             t = child.type_num
- *             if end - f < 5:
+ * class DATATYPE:             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
  */
-    __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
-    if (__pyx_t_7) {
+  __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_GOTREF(__pyx_t_1);
 
-      /* "numpy.pxd":821
+  /* "adios.pyx":226
  * 
- *         if not PyDataType_HASFIELDS(child):
- *             t = child.type_num             # <<<<<<<<<<<<<<
- *             if end - f < 5:
- *                 raise RuntimeError(u"Format string allocated too short.")
+ * class DATATYPE:
+ *     unknown = -1             # <<<<<<<<<<<<<<
+ *     byte = 0
+ *     short = 1
  */
-      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_XDECREF(__pyx_v_t);
-      __pyx_v_t = __pyx_t_3;
-      __pyx_t_3 = 0;
+  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;}
 
-      /* "numpy.pxd":822
- *         if not PyDataType_HASFIELDS(child):
- *             t = child.type_num
- *             if end - f < 5:             # <<<<<<<<<<<<<<
- *                 raise RuntimeError(u"Format string allocated too short.")
- * 
+  /* "adios.pyx":227
+ * class DATATYPE:
+ *     unknown = -1
+ *     byte = 0             # <<<<<<<<<<<<<<
+ *     short = 1
+ *     integer = 2
  */
-      __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
-      if (__pyx_t_7) {
+  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;}
 
-        /* "numpy.pxd":823
- *             t = child.type_num
- *             if end - f < 5:
- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
- * 
- *             # Until ticket #99 is fixed, use integers to avoid warnings
+  /* "adios.pyx":228
+ *     unknown = -1
+ *     byte = 0
+ *     short = 1             # <<<<<<<<<<<<<<
+ *     integer = 2
+ *     long = 4
  */
-        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_35), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L12;
-      }
-      __pyx_L12:;
+  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;}
 
-      /* "numpy.pxd":826
- * 
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+  /* "adios.pyx":229
+ *     byte = 0
+ *     short = 1
+ *     integer = 2             # <<<<<<<<<<<<<<
+ *     long = 4
+ *     unsigned_byte = 50
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 98;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":827
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+  /* "adios.pyx":230
+ *     short = 1
+ *     integer = 2
+ *     long = 4             # <<<<<<<<<<<<<<
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 66;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":828
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"
+  /* "adios.pyx":231
+ *     integer = 2
+ *     long = 4
+ *     unsigned_byte = 50             # <<<<<<<<<<<<<<
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 104;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":829
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
+  /* "adios.pyx":232
+ *     long = 4
+ *     unsigned_byte = 50
+ *     unsigned_short = 51             # <<<<<<<<<<<<<<
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 72;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":830
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
+  /* "adios.pyx":233
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
+ *     unsigned_integer = 52             # <<<<<<<<<<<<<<
+ *     unsigned_long = 54
+ *     real = 5
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 105;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":831
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+  /* "adios.pyx":234
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
+ *     unsigned_long = 54             # <<<<<<<<<<<<<<
+ *     real = 5
+ *     double = 6
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 73;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":832
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+  /* "adios.pyx":235
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
+ *     real = 5             # <<<<<<<<<<<<<<
+ *     double = 6
+ *     long_double = 7
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 108;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":833
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+  /* "adios.pyx":236
+ *     unsigned_long = 54
+ *     real = 5
+ *     double = 6             # <<<<<<<<<<<<<<
+ *     long_double = 7
+ *     string = 9
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 76;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":834
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+  /* "adios.pyx":237
+ *     real = 5
+ *     double = 6
+ *     long_double = 7             # <<<<<<<<<<<<<<
+ *     string = 9
+ *     complex = 10
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 113;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":835
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+  /* "adios.pyx":238
+ *     double = 6
+ *     long_double = 7
+ *     string = 9             # <<<<<<<<<<<<<<
+ *     complex = 10
+ *     double_complex = 11
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 81;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":836
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+  /* "adios.pyx":239
+ *     long_double = 7
+ *     string = 9
+ *     complex = 10             # <<<<<<<<<<<<<<
+ *     double_complex = 11
+ * 
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 102;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":837
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+  /* "adios.pyx":240
+ *     string = 9
+ *     complex = 10
+ *     double_complex = 11             # <<<<<<<<<<<<<<
+ * 
+ * class FLAG:
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 100;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":838
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+  /* "adios.pyx":225
+ * ## ====================
+ * 
+ * class DATATYPE:             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 103;
-        goto __pyx_L13;
-      }
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "numpy.pxd":839
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+  /* "adios.pyx":242
+ *     double_complex = 11
+ * 
+ * class FLAG:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     YES = 1
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 102;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  __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_GOTREF(__pyx_t_1);
 
-      /* "numpy.pxd":840
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+  /* "adios.pyx":243
+ * 
+ * class FLAG:
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     YES = 1
+ *     NO = 2
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 100;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":841
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
- *             else:
+  /* "adios.pyx":244
+ * class FLAG:
+ *     UNKNOWN = 0
+ *     YES = 1             # <<<<<<<<<<<<<<
+ *     NO = 2
+ * 
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 103;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":842
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+  /* "adios.pyx":245
+ *     UNKNOWN = 0
+ *     YES = 1
+ *     NO = 2             # <<<<<<<<<<<<<<
+ * 
+ * class BUFFER_ALLOC_WHEN:
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 79;
-        goto __pyx_L13;
-      }
-      /*else*/ {
+  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;}
 
-        /* "numpy.pxd":844
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
- *             f += 1
- *         else:
+  /* "adios.pyx":242
+ *     double_complex = 11
+ * 
+ * class FLAG:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     YES = 1
  */
-        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
-        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
-        __pyx_t_5 = 0;
-        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_5);
-        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      __pyx_L13:;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "numpy.pxd":845
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *             f += 1             # <<<<<<<<<<<<<<
- *         else:
- *             # Cython ignores struct boundary information ("T{...}"),
+  /* "adios.pyx":247
+ *     NO = 2
+ * 
+ * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     NOW = 1
  */
-      __pyx_v_f = (__pyx_v_f + 1);
-      goto __pyx_L11;
-    }
-    /*else*/ {
+  __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_GOTREF(__pyx_t_1);
 
-      /* "numpy.pxd":849
- *             # Cython ignores struct boundary information ("T{...}"),
- *             # so don't output it
- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
- *     return f
+  /* "adios.pyx":248
  * 
+ * class BUFFER_ALLOC_WHEN:
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     NOW = 1
+ *     LATER = 2
  */
-      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_v_f = __pyx_t_12;
-    }
-    __pyx_L11:;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  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;}
 
-  /* "numpy.pxd":850
- *             # so don't output it
- *             f = _util_dtypestring(child, f, end, offset)
- *     return f             # <<<<<<<<<<<<<<
+  /* "adios.pyx":249
+ * 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;}
+
+  /* "adios.pyx":250
+ *     UNKNOWN = 0
+ *     NOW = 1
+ *     LATER = 2             # <<<<<<<<<<<<<<
  * 
+ * ## ====================
  */
-  __pyx_r = __pyx_v_f;
-  goto __pyx_L0;
+  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;}
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_child);
-  __Pyx_XDECREF(__pyx_v_fields);
-  __Pyx_XDECREF(__pyx_v_childname);
-  __Pyx_XDECREF(__pyx_v_new_offset);
-  __Pyx_XDECREF(__pyx_v_t);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios.pyx":247
+ *     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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-/* "numpy.pxd":965
+  /* "adios.pyx":256
+ * ## ====================
  * 
+ * cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm)
  * 
- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
- *      cdef PyObject* baseptr
- *      if base is None:
  */
+  __pyx_k_ = MPI_COMM_WORLD;
 
-static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
-  PyObject *__pyx_v_baseptr;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  __Pyx_RefNannySetupContext("set_array_base", 0);
-
-  /* "numpy.pxd":967
- * cdef inline void set_array_base(ndarray arr, object base):
- *      cdef PyObject* baseptr
- *      if base is None:             # <<<<<<<<<<<<<<
- *          baseptr = NULL
- *      else:
+  /* "adios.pyx":262
+ *                    char * name,
+ *                    char * mode,
+ *                    MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     cdef int64_t fd
+ *     cdef int result
  */
-  __pyx_t_1 = (__pyx_v_base == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
+  __pyx_k__2 = MPI_COMM_WORLD;
 
-    /* "numpy.pxd":968
- *      cdef PyObject* baseptr
- *      if base is None:
- *          baseptr = NULL             # <<<<<<<<<<<<<<
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!
+  /* "adios.pyx":306
+ * ## ADIOS No-XML API
+ * ## ====================
+ * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm)
+ * 
  */
-    __pyx_v_baseptr = NULL;
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  __pyx_k__3 = MPI_COMM_WORLD;
 
-    /* "numpy.pxd":970
- *          baseptr = NULL
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)
+  /* "adios.pyx":422
+ * ## ====================
+ * 
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI_Comm comm = MPI_COMM_WORLD,
+ *                 char * parameters = ""):
  */
-    Py_INCREF(__pyx_v_base);
+  __pyx_k__4 = ADIOS_READ_METHOD_BP;
 
-    /* "numpy.pxd":971
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!
- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
- *      Py_XDECREF(arr.base)
- *      arr.base = baseptr
+  /* "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)
  */
-    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
-  }
-  __pyx_L3:;
+  __pyx_k__5 = MPI_COMM_WORLD;
 
-  /* "numpy.pxd":972
- *          Py_INCREF(base) # important to do this before decref below!
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
- *      arr.base = baseptr
+  /* "adios.pyx":428
+ * 
+ * 
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
  */
-  Py_XDECREF(__pyx_v_arr->base);
+  __pyx_k__7 = ADIOS_READ_METHOD_BP;
 
-  /* "numpy.pxd":973
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)
- *      arr.base = baseptr             # <<<<<<<<<<<<<<
+  /* "adios.pyx":449
  * 
- * cdef inline object get_array_base(ndarray arr):
+ *     def __init__(self, char * fname,
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *         self.fp = NULL
  */
-  __pyx_v_arr->base = __pyx_v_baseptr;
+  __pyx_k__8 = ADIOS_READ_METHOD_BP;
 
-  __Pyx_RefNannyFinishContext();
-}
+  /* "adios.pyx":450
+ *     def __init__(self, char * fname,
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
+ *         self.fp = NULL
+ *         self.var = {}
+ */
+  __pyx_k__9 = MPI_COMM_WORLD;
 
-/* "numpy.pxd":975
- *      arr.base = baseptr
+  /* "adios.pyx":569
+ * ## ====================
  * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("get_array_base", 0);
-
-  /* "numpy.pxd":976
+  /* "adios.pyx":578
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
- * cdef inline object get_array_base(ndarray arr):
- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
- *         return None
- *     else:
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname)
+ *     return {'nvars': f.nvars,
  */
-  __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
-  if (__pyx_t_1) {
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "numpy.pxd":977
- * cdef inline object get_array_base(ndarray arr):
- *     if arr.base is NULL:
- *         return None             # <<<<<<<<<<<<<<
- *     else:
- *         return <object>arr.base
+  /* "adios.pyx":1
+ * """             # <<<<<<<<<<<<<<
+ *  ADIOS is freely available under the terms of the BSD license described
+ *  in the COPYING file in the top level directory of this source distribution.
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  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;
 
-    /* "numpy.pxd":979
+  /* "/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
- *     else:
- *         return <object>arr.base             # <<<<<<<<<<<<<<
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
-    __pyx_r = ((PyObject *)__pyx_v_arr->base);
-    goto __pyx_L0;
+  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);
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init adios");
   }
-  __pyx_L3:;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-static struct __pyx_vtabstruct_5adios_AdiosFile __pyx_vtable_5adios_AdiosFile;
-
-static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosFile *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosFile *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosFile;
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosFile(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->group);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosFile(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->group) {
-    e = (*v)(p->group, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosFile(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->group);
-  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_9AdiosFile_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_groups_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_groups_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_tidx_start(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_tidx_start(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_ntimesteps(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(o);
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
 }
 
-static int __pyx_setprop_5adios_9AdiosFile_ntimesteps(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+/* Runtime support code */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
 }
+#endif /* CYTHON_REFNANNY */
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_version(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_7version_1__get__(o);
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
 }
 
-static int __pyx_setprop_5adios_9AdiosFile_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_7version_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
 }
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_file_size(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_9file_size_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_file_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_endianness(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10endianness_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_endianness(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_group(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_5group_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_group(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_5group_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_9AdiosFile_5group_5__del__(o);
-  }
-}
-
-static PyMethodDef __pyx_methods_5adios_AdiosFile[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosFile[] = {
-  {(char *)"name", __pyx_getprop_5adios_9AdiosFile_name, __pyx_setprop_5adios_9AdiosFile_name, 0, 0},
-  {(char *)"groups_count", __pyx_getprop_5adios_9AdiosFile_groups_count, __pyx_setprop_5adios_9AdiosFile_groups_count, 0, 0},
-  {(char *)"vars_count", __pyx_getprop_5adios_9AdiosFile_vars_count, __pyx_setprop_5adios_9AdiosFile_vars_count, 0, 0},
-  {(char *)"attrs_count", __pyx_getprop_5adios_9AdiosFile_attrs_count, __pyx_setprop_5adios_9AdiosFile_attrs_count, 0, 0},
-  {(char *)"tidx_start", __pyx_getprop_5adios_9AdiosFile_tidx_start, __pyx_setprop_5adios_9AdiosFile_tidx_start, 0, 0},
-  {(char *)"ntimesteps", __pyx_getprop_5adios_9AdiosFile_ntimesteps, __pyx_setprop_5adios_9AdiosFile_ntimesteps, 0, 0},
-  {(char *)"version", __pyx_getprop_5adios_9AdiosFile_version, __pyx_setprop_5adios_9AdiosFile_version, 0, 0},
-  {(char *)"file_size", __pyx_getprop_5adios_9AdiosFile_file_size, __pyx_setprop_5adios_9AdiosFile_file_size, 0, 0},
-  {(char *)"endianness", __pyx_getprop_5adios_9AdiosFile_endianness, __pyx_setprop_5adios_9AdiosFile_endianness, 0, 0},
-  {(char *)"group", __pyx_getprop_5adios_9AdiosFile_group, __pyx_setprop_5adios_9AdiosFile_group, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosFile = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosFile"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosFile), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosFile, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosFile, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosFile, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosFile, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosFile, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_9AdiosFile_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosFile, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-static struct __pyx_vtabstruct_5adios_AdiosGroup __pyx_vtable_5adios_AdiosGroup;
-
-static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosGroup *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosGroup *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosGroup;
-  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosGroup(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->file);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->var);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosGroup(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  if (p->file) {
-    e = (*v)(((PyObject*)p->file), a); if (e) return e;
-  }
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->var) {
-    e = (*v)(p->var, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosGroup(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->file);
-  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->var);
-  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_10AdiosGroup_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_grpid(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_grpid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_timestep(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_timestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_var(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_3var_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_var(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_3var_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_10AdiosGroup_3var_5__del__(o);
-  }
-}
-
-static PyMethodDef __pyx_methods_5adios_AdiosGroup[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosGroup[] = {
-  {(char *)"name", __pyx_getprop_5adios_10AdiosGroup_name, __pyx_setprop_5adios_10AdiosGroup_name, 0, 0},
-  {(char *)"grpid", __pyx_getprop_5adios_10AdiosGroup_grpid, __pyx_setprop_5adios_10AdiosGroup_grpid, 0, 0},
-  {(char *)"vars_count", __pyx_getprop_5adios_10AdiosGroup_vars_count, __pyx_setprop_5adios_10AdiosGroup_vars_count, 0, 0},
-  {(char *)"attrs_count", __pyx_getprop_5adios_10AdiosGroup_attrs_count, __pyx_setprop_5adios_10AdiosGroup_attrs_count, 0, 0},
-  {(char *)"timestep", __pyx_getprop_5adios_10AdiosGroup_timestep, __pyx_setprop_5adios_10AdiosGroup_timestep, 0, 0},
-  {(char *)"lasttimestep", __pyx_getprop_5adios_10AdiosGroup_lasttimestep, __pyx_setprop_5adios_10AdiosGroup_lasttimestep, 0, 0},
-  {(char *)"var", __pyx_getprop_5adios_10AdiosGroup_var, __pyx_setprop_5adios_10AdiosGroup_var, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosGroup = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosGroup"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosGroup), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosGroup, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosGroup, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosGroup, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosGroup, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosGroup, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_10AdiosGroup_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosGroup, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-static struct __pyx_vtabstruct_5adios_AdiosVariable __pyx_vtable_5adios_AdiosVariable;
-
-static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosVariable *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosVariable *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosVariable;
-  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosVariable(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->group);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->type);
-  Py_CLEAR(p->dims);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosVariable(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  if (p->group) {
-    e = (*v)(((PyObject*)p->group), a); if (e) return e;
-  }
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->type) {
-    e = (*v)(p->type, a); if (e) return e;
-  }
-  if (p->dims) {
-    e = (*v)(p->dims, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosVariable(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->group);
-  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->type);
-  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->dims);
-  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_varid(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_5varid_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_varid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4type_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4type_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4type_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_ndim(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_ndim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_dims(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4dims_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_dims(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_timedim(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_timedim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyMethodDef __pyx_methods_5adios_AdiosVariable[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosVariable[] = {
-  {(char *)"name", __pyx_getprop_5adios_13AdiosVariable_name, __pyx_setprop_5adios_13AdiosVariable_name, 0, 0},
-  {(char *)"varid", __pyx_getprop_5adios_13AdiosVariable_varid, __pyx_setprop_5adios_13AdiosVariable_varid, 0, 0},
-  {(char *)"type", __pyx_getprop_5adios_13AdiosVariable_type, __pyx_setprop_5adios_13AdiosVariable_type, 0, 0},
-  {(char *)"ndim", __pyx_getprop_5adios_13AdiosVariable_ndim, __pyx_setprop_5adios_13AdiosVariable_ndim, 0, 0},
-  {(char *)"dims", __pyx_getprop_5adios_13AdiosVariable_dims, __pyx_setprop_5adios_13AdiosVariable_dims, 0, 0},
-  {(char *)"timedim", __pyx_getprop_5adios_13AdiosVariable_timedim, __pyx_setprop_5adios_13AdiosVariable_timedim, 0, 0},
-  {(char *)"characteristics_count", __pyx_getprop_5adios_13AdiosVariable_characteristics_count, __pyx_setprop_5adios_13AdiosVariable_characteristics_count, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosVariable = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosVariable"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosVariable), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosVariable, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosVariable, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosVariable, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosVariable, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosVariable, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_13AdiosVariable_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosVariable, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-
-static PyMethodDef __pyx_methods[] = {
-  {__Pyx_NAMESTR("init"), (PyCFunction)__pyx_pw_5adios_1init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("open"), (PyCFunction)__pyx_pw_5adios_3open, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("set_group_size"), (PyCFunction)__pyx_pw_5adios_5set_group_size, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_5adios_7write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_int"), (PyCFunction)__pyx_pw_5adios_9write_int, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_long"), (PyCFunction)__pyx_pw_5adios_11write_long, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_float"), (PyCFunction)__pyx_pw_5adios_13write_float, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_15read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_17close, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("finalize"), (PyCFunction)__pyx_pw_5adios_19finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("init_noxml"), (PyCFunction)__pyx_pw_5adios_21init_noxml, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("allocate_buffer"), (PyCFunction)__pyx_pw_5adios_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("declare_group"), (PyCFunction)__pyx_pw_5adios_25declare_group, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_var"), (PyCFunction)__pyx_pw_5adios_27define_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_attribute"), (PyCFunction)__pyx_pw_5adios_29define_attribute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("select_method"), (PyCFunction)__pyx_pw_5adios_31select_method, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("adios2nptype"), (PyCFunction)__pyx_pw_5adios_33adios2nptype, METH_O, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-#if PY_MAJOR_VERSION >= 3
-static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
-  #else
-    PyModuleDef_HEAD_INIT,
-  #endif
-    __Pyx_NAMESTR("adios"),
-    __Pyx_DOCSTR(__pyx_k_36), /* m_doc */
-    -1, /* m_size */
-    __pyx_methods /* m_methods */,
-    NULL, /* m_reload */
-    NULL, /* m_traverse */
-    NULL, /* m_clear */
-    NULL /* m_free */
-};
-#endif
-
-static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
-  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
-  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
-  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
-  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
-  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
-  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
-  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
-  {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
-  {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0},
-  {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0},
-  {&__pyx_kp_u_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 1, 0, 0},
-  {&__pyx_kp_u_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 1, 0, 0},
-  {&__pyx_kp_u_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 1, 0, 0},
-  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
-  {&__pyx_kp_u_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0, 0},
-  {&__pyx_kp_u_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 1, 0, 0},
-  {&__pyx_kp_u_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 1, 0, 0},
-  {&__pyx_n_s_37, __pyx_k_37, sizeof(__pyx_k_37), 0, 0, 1, 1},
-  {&__pyx_n_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 1},
-  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
-  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
-  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
-  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
-  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
-  {&__pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_k__BUFFER_ALLOC_WHEN, sizeof(__pyx_k__BUFFER_ALLOC_WHEN), 0, 0, 1, 1},
-  {&__pyx_n_s__COMM_WORLD, __pyx_k__COMM_WORLD, sizeof(__pyx_k__COMM_WORLD), 0, 0, 1, 1},
-  {&__pyx_n_s__DATATYPE, __pyx_k__DATATYPE, sizeof(__pyx_k__DATATYPE), 0, 0, 1, 1},
-  {&__pyx_n_s__FLAG, __pyx_k__FLAG, sizeof(__pyx_k__FLAG), 0, 0, 1, 1},
-  {&__pyx_n_s__LATER, __pyx_k__LATER, sizeof(__pyx_k__LATER), 0, 0, 1, 1},
-  {&__pyx_n_s__MPI, __pyx_k__MPI, sizeof(__pyx_k__MPI), 0, 0, 1, 1},
-  {&__pyx_n_s__NO, __pyx_k__NO, sizeof(__pyx_k__NO), 0, 0, 1, 1},
-  {&__pyx_n_s__NOW, __pyx_k__NOW, sizeof(__pyx_k__NOW), 0, 0, 1, 1},
-  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
-  {&__pyx_n_s__UNKNOWN, __pyx_k__UNKNOWN, sizeof(__pyx_k__UNKNOWN), 0, 0, 1, 1},
-  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
-  {&__pyx_n_s__YES, __pyx_k__YES, sizeof(__pyx_k__YES), 0, 0, 1, 1},
-  {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1},
-  {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1},
-  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
-  {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1},
-  {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1},
-  {&__pyx_n_s____pyx_vtable__, __pyx_k____pyx_vtable__, sizeof(__pyx_k____pyx_vtable__), 0, 0, 1, 1},
-  {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1},
-  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
-  {&__pyx_n_s__adios, __pyx_k__adios, sizeof(__pyx_k__adios), 0, 0, 1, 1},
-  {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1},
-  {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1},
-  {&__pyx_n_s__attr_namelist, __pyx_k__attr_namelist, sizeof(__pyx_k__attr_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__attrs_count, __pyx_k__attrs_count, sizeof(__pyx_k__attrs_count), 0, 0, 1, 1},
-  {&__pyx_n_s__base_path, __pyx_k__base_path, sizeof(__pyx_k__base_path), 0, 0, 1, 1},
-  {&__pyx_n_s__buffer_size, __pyx_k__buffer_size, sizeof(__pyx_k__buffer_size), 0, 0, 1, 1},
-  {&__pyx_n_s__byte, __pyx_k__byte, sizeof(__pyx_k__byte), 0, 0, 1, 1},
-  {&__pyx_n_s__close, __pyx_k__close, sizeof(__pyx_k__close), 0, 0, 1, 1},
-  {&__pyx_n_s__comm, __pyx_k__comm, sizeof(__pyx_k__comm), 0, 0, 1, 1},
-  {&__pyx_n_s__complex, __pyx_k__complex, sizeof(__pyx_k__complex), 0, 0, 1, 1},
-  {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1},
-  {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1},
-  {&__pyx_n_s__config, __pyx_k__config, sizeof(__pyx_k__config), 0, 0, 1, 1},
-  {&__pyx_n_s__contiguous, __pyx_k__contiguous, sizeof(__pyx_k__contiguous), 0, 0, 1, 1},
-  {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1},
-  {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1},
-  {&__pyx_n_s__data_size, __pyx_k__data_size, sizeof(__pyx_k__data_size), 0, 0, 1, 1},
-  {&__pyx_n_s__dimensions, __pyx_k__dimensions, sizeof(__pyx_k__dimensions), 0, 0, 1, 1},
-  {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1},
-  {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1},
-  {&__pyx_n_s__double_complex, __pyx_k__double_complex, sizeof(__pyx_k__double_complex), 0, 0, 1, 1},
-  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
-  {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1},
-  {&__pyx_n_s__endianness, __pyx_k__endianness, sizeof(__pyx_k__endianness), 0, 0, 1, 1},
-  {&__pyx_n_s__fd_p, __pyx_k__fd_p, sizeof(__pyx_k__fd_p), 0, 0, 1, 1},
-  {&__pyx_n_s__fh, __pyx_k__fh, sizeof(__pyx_k__fh), 0, 0, 1, 1},
-  {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1},
-  {&__pyx_n_s__file_size, __pyx_k__file_size, sizeof(__pyx_k__file_size), 0, 0, 1, 1},
-  {&__pyx_n_s__fill, __pyx_k__fill, sizeof(__pyx_k__fill), 0, 0, 1, 1},
-  {&__pyx_n_s__flags, __pyx_k__flags, sizeof(__pyx_k__flags), 0, 0, 1, 1},
-  {&__pyx_n_s__float128, __pyx_k__float128, sizeof(__pyx_k__float128), 0, 0, 1, 1},
-  {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1},
-  {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1},
-  {&__pyx_n_s__fname, __pyx_k__fname, sizeof(__pyx_k__fname), 0, 0, 1, 1},
-  {&__pyx_n_s__fp, __pyx_k__fp, sizeof(__pyx_k__fp), 0, 0, 1, 1},
-  {&__pyx_n_s__gh, __pyx_k__gh, sizeof(__pyx_k__gh), 0, 0, 1, 1},
-  {&__pyx_n_s__global_dimensions, __pyx_k__global_dimensions, sizeof(__pyx_k__global_dimensions), 0, 0, 1, 1},
-  {&__pyx_n_s__gp, __pyx_k__gp, sizeof(__pyx_k__gp), 0, 0, 1, 1},
-  {&__pyx_n_s__group, __pyx_k__group, sizeof(__pyx_k__group), 0, 0, 1, 1},
-  {&__pyx_n_s__group_id, __pyx_k__group_id, sizeof(__pyx_k__group_id), 0, 0, 1, 1},
-  {&__pyx_n_s__group_name, __pyx_k__group_name, sizeof(__pyx_k__group_name), 0, 0, 1, 1},
-  {&__pyx_n_s__group_namelist, __pyx_k__group_namelist, sizeof(__pyx_k__group_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__groups_count, __pyx_k__groups_count, sizeof(__pyx_k__groups_count), 0, 0, 1, 1},
-  {&__pyx_n_s__grpid, __pyx_k__grpid, sizeof(__pyx_k__grpid), 0, 0, 1, 1},
-  {&__pyx_n_s__int16, __pyx_k__int16, sizeof(__pyx_k__int16), 0, 0, 1, 1},
-  {&__pyx_n_s__int32, __pyx_k__int32, sizeof(__pyx_k__int32), 0, 0, 1, 1},
-  {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1},
-  {&__pyx_n_s__int8, __pyx_k__int8, sizeof(__pyx_k__int8), 0, 0, 1, 1},
-  {&__pyx_n_s__integer, __pyx_k__integer, sizeof(__pyx_k__integer), 0, 0, 1, 1},
-  {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1},
-  {&__pyx_n_s__local_offsets, __pyx_k__local_offsets, sizeof(__pyx_k__local_offsets), 0, 0, 1, 1},
-  {&__pyx_n_s__long, __pyx_k__long, sizeof(__pyx_k__long), 0, 0, 1, 1},
-  {&__pyx_n_s__long_double, __pyx_k__long_double, sizeof(__pyx_k__long_double), 0, 0, 1, 1},
-  {&__pyx_n_s__method, __pyx_k__method, sizeof(__pyx_k__method), 0, 0, 1, 1},
-  {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1},
-  {&__pyx_n_s__mype, __pyx_k__mype, sizeof(__pyx_k__mype), 0, 0, 1, 1},
-  {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1},
-  {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1},
-  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
-  {&__pyx_n_s__ntimesteps, __pyx_k__ntimesteps, sizeof(__pyx_k__ntimesteps), 0, 0, 1, 1},
-  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
-  {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1},
-  {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1},
-  {&__pyx_n_s__parameters, __pyx_k__parameters, sizeof(__pyx_k__parameters), 0, 0, 1, 1},
-  {&__pyx_n_s__path, __pyx_k__path, sizeof(__pyx_k__path), 0, 0, 1, 1},
-  {&__pyx_n_s__print, __pyx_k__print, sizeof(__pyx_k__print), 0, 0, 1, 1},
-  {&__pyx_n_s__printself, __pyx_k__printself, sizeof(__pyx_k__printself), 0, 0, 1, 1},
-  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
-  {&__pyx_n_s__read, __pyx_k__read, sizeof(__pyx_k__read), 0, 0, 1, 1},
-  {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1},
-  {&__pyx_n_s__short, __pyx_k__short, sizeof(__pyx_k__short), 0, 0, 1, 1},
-  {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1},
-  {&__pyx_n_s__split, __pyx_k__split, sizeof(__pyx_k__split), 0, 0, 1, 1},
-  {&__pyx_n_s__stats, __pyx_k__stats, sizeof(__pyx_k__stats), 0, 0, 1, 1},
-  {&__pyx_n_s__string, __pyx_k__string, sizeof(__pyx_k__string), 0, 0, 1, 1},
-  {&__pyx_n_s__tidx_start, __pyx_k__tidx_start, sizeof(__pyx_k__tidx_start), 0, 0, 1, 1},
-  {&__pyx_n_s__time_index, __pyx_k__time_index, sizeof(__pyx_k__time_index), 0, 0, 1, 1},
-  {&__pyx_n_s__timedim, __pyx_k__timedim, sizeof(__pyx_k__timedim), 0, 0, 1, 1},
-  {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1},
-  {&__pyx_n_s__uint16, __pyx_k__uint16, sizeof(__pyx_k__uint16), 0, 0, 1, 1},
-  {&__pyx_n_s__uint32, __pyx_k__uint32, sizeof(__pyx_k__uint32), 0, 0, 1, 1},
-  {&__pyx_n_s__uint64, __pyx_k__uint64, sizeof(__pyx_k__uint64), 0, 0, 1, 1},
-  {&__pyx_n_s__uint8, __pyx_k__uint8, sizeof(__pyx_k__uint8), 0, 0, 1, 1},
-  {&__pyx_n_s__unknown, __pyx_k__unknown, sizeof(__pyx_k__unknown), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_byte, __pyx_k__unsigned_byte, sizeof(__pyx_k__unsigned_byte), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_integer, __pyx_k__unsigned_integer, sizeof(__pyx_k__unsigned_integer), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_long, __pyx_k__unsigned_long, sizeof(__pyx_k__unsigned_long), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_short, __pyx_k__unsigned_short, sizeof(__pyx_k__unsigned_short), 0, 0, 1, 1},
-  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
-  {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1},
-  {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1},
-  {&__pyx_n_s__var, __pyx_k__var, sizeof(__pyx_k__var), 0, 0, 1, 1},
-  {&__pyx_n_s__var_namelist, __pyx_k__var_namelist, sizeof(__pyx_k__var_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__varid, __pyx_k__varid, sizeof(__pyx_k__varid), 0, 0, 1, 1},
-  {&__pyx_n_s__vars_count, __pyx_k__vars_count, sizeof(__pyx_k__vars_count), 0, 0, 1, 1},
-  {&__pyx_n_s__version, __pyx_k__version, sizeof(__pyx_k__version), 0, 0, 1, 1},
-  {&__pyx_n_s__vp, __pyx_k__vp, sizeof(__pyx_k__vp), 0, 0, 1, 1},
-  {&__pyx_n_s__when, __pyx_k__when, sizeof(__pyx_k__when), 0, 0, 1, 1},
-  {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
-  {0, 0, 0, 0, 0, 0, 0}
-};
-static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  return 0;
-  __pyx_L1_error:;
-  return -1;
-}
-
-static int __Pyx_InitCachedConstants(void) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
-
-  /* "adios.pyx":447
- *         assert self.fp != NULL, 'Not an open file'
- * 
- *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
- */
-  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_13);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
-
-  /* "adios.pyx":577
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)             # <<<<<<<<<<<<<<
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)
- */
-  __pyx_k_tuple_18 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_k_tuple_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_18);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_18));
-
-  /* "numpy.pxd":215
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- */
-  __pyx_k_tuple_25 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_24)); if (unlikely(!__pyx_k_tuple_25)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_25);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-
-  /* "numpy.pxd":219
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
- * 
- *             info.buf = PyArray_DATA(self)
- */
-  __pyx_k_tuple_27 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_26)); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_27);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_27));
-
-  /* "numpy.pxd":257
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
- */
-  __pyx_k_tuple_29 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_29);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29));
-
-  /* "numpy.pxd":799
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
- * 
- *         if ((child.byteorder == c'>' and little_endian) or
- */
-  __pyx_k_tuple_32 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_31)); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_32);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_32));
-
-  /* "numpy.pxd":803
- *         if ((child.byteorder == c'>' and little_endian) or
- *             (child.byteorder == c'<' and not little_endian)):
- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *             # One could encode it in the format string and have Cython
- *             # complain instead, BUT: < and > in format strings also imply
- */
-  __pyx_k_tuple_33 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_33);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33));
-
-  /* "numpy.pxd":823
- *             t = child.type_num
- *             if end - f < 5:
- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
- * 
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- */
-  __pyx_k_tuple_35 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_34)); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_35);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));
-  __Pyx_RefNannyFinishContext();
-  return 0;
-  __pyx_L1_error:;
-  __Pyx_RefNannyFinishContext();
-  return -1;
-}
-
-static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_52 = PyInt_FromLong(52); if (unlikely(!__pyx_int_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_54 = PyInt_FromLong(54); if (unlikely(!__pyx_int_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  return 0;
-  __pyx_L1_error:;
-  return -1;
-}
-
-#if PY_MAJOR_VERSION < 3
-PyMODINIT_FUNC initadios(void); /*proto*/
-PyMODINIT_FUNC initadios(void)
-#else
-PyMODINIT_FUNC PyInit_adios(void); /*proto*/
-PyMODINIT_FUNC PyInit_adios(void)
-#endif
-{
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannyDeclarations
-  #if CYTHON_REFNANNY
-  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
-  if (!__Pyx_RefNanny) {
-      PyErr_Clear();
-      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
-      if (!__Pyx_RefNanny)
-          Py_FatalError("failed to import 'refnanny' module");
-  }
-  #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_adios(void)", 0);
-  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  /*--- Library function declarations ---*/
-  /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
-  PyEval_InitThreads();
-  #endif
-  #endif
-  /*--- Module creation code ---*/
-  #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_36), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
-  #else
-  __pyx_m = PyModule_Create(&__pyx_moduledef);
-  #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_d);
-  #if PY_MAJOR_VERSION >= 3
-  {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "adios")) {
-      if (unlikely(PyDict_SetItemString(modules, "adios", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_INCREF(__pyx_b);
-  #endif
-  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  /*--- Initialize various global constants etc. ---*/
-  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
-  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  if (__pyx_module_is_main_adios) {
-    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  }
-  /*--- Builtin init code ---*/
-  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Constants init code ---*/
-  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Global init code ---*/
-  /*--- Variable export code ---*/
-  /*--- Function export code ---*/
-  /*--- Type init code ---*/
-  __pyx_vtabptr_5adios_AdiosFile = &__pyx_vtable_5adios_AdiosFile;
-  __pyx_vtable_5adios_AdiosFile.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_close;
-  __pyx_vtable_5adios_AdiosFile.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosFile.tp_dict, __pyx_vtabptr_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosFile", (PyObject *)&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosFile = &__pyx_type_5adios_AdiosFile;
-  __pyx_vtabptr_5adios_AdiosGroup = &__pyx_vtable_5adios_AdiosGroup;
-  __pyx_vtable_5adios_AdiosGroup.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_close;
-  __pyx_vtable_5adios_AdiosGroup.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosGroup.tp_dict, __pyx_vtabptr_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosGroup", (PyObject *)&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosGroup = &__pyx_type_5adios_AdiosGroup;
-  __pyx_vtabptr_5adios_AdiosVariable = &__pyx_vtable_5adios_AdiosVariable;
-  __pyx_vtable_5adios_AdiosVariable.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_close;
-  __pyx_vtable_5adios_AdiosVariable.read = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args))__pyx_f_5adios_13AdiosVariable_read;
-  __pyx_vtable_5adios_AdiosVariable.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosVariable.tp_dict, __pyx_vtabptr_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosVariable", (PyObject *)&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosVariable = &__pyx_type_5adios_AdiosVariable;
-  /*--- Type import code ---*/
-  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
-  #if CYTHON_COMPILING_IN_PYPY
-  sizeof(PyTypeObject),
-  #else
-  sizeof(PyHeapTypeObject),
-  #endif
-  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Status = __Pyx_ImportType("mpi4py.MPI", "Status", sizeof(struct PyMPIStatusObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Status)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Datatype = __Pyx_ImportType("mpi4py.MPI", "Datatype", sizeof(struct PyMPIDatatypeObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Datatype)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Request = __Pyx_ImportType("mpi4py.MPI", "Request", sizeof(struct PyMPIRequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Request)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Prequest = __Pyx_ImportType("mpi4py.MPI", "Prequest", sizeof(struct PyMPIPrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Prequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Grequest = __Pyx_ImportType("mpi4py.MPI", "Grequest", sizeof(struct PyMPIGrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Grequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Op = __Pyx_ImportType("mpi4py.MPI", "Op", sizeof(struct PyMPIOpObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Op)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Group = __Pyx_ImportType("mpi4py.MPI", "Group", sizeof(struct PyMPIGroupObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Group)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Info = __Pyx_ImportType("mpi4py.MPI", "Info", sizeof(struct PyMPIInfoObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Info)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Errhandler = __Pyx_ImportType("mpi4py.MPI", "Errhandler", sizeof(struct PyMPIErrhandlerObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Errhandler)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Comm = __Pyx_ImportType("mpi4py.MPI", "Comm", sizeof(struct PyMPICommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Comm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Intracomm = __Pyx_ImportType("mpi4py.MPI", "Intracomm", sizeof(struct PyMPIIntracommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intracomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Cartcomm = __Pyx_ImportType("mpi4py.MPI", "Cartcomm", sizeof(struct PyMPICartcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Cartcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Graphcomm = __Pyx_ImportType("mpi4py.MPI", "Graphcomm", sizeof(struct PyMPIGraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Graphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = __Pyx_ImportType("mpi4py.MPI", "Distgraphcomm", sizeof(struct PyMPIDistgraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Distgraphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Intercomm = __Pyx_ImportType("mpi4py.MPI", "Intercomm", sizeof(struct PyMPIIntercommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intercomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Win = __Pyx_ImportType("mpi4py.MPI", "Win", sizeof(struct PyMPIWinObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Win)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_File = __Pyx_ImportType("mpi4py.MPI", "File", sizeof(struct PyMPIFileObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_File)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Variable import code ---*/
-  /*--- Function import code ---*/
-  /*--- Execution code ---*/
-
-  /* "adios.pyx":8
- * """
- * 
- * import numpy as np             # <<<<<<<<<<<<<<
- * cimport numpy as np
- * 
- */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "adios.pyx":11
- * cimport numpy as np
- * 
- * import mpi4py.MPI as MPI             # <<<<<<<<<<<<<<
- * cimport mpi4py.MPI as MPI
- * 
- */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s_38));
-  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_38));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s_38));
-  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_37), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__MPI, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "adios.pyx":180
- * ## ==========
- * 
- * class DATATYPE(object):             # <<<<<<<<<<<<<<
- *     unknown = -1
- *     byte = 0
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":181
- * 
- * class DATATYPE(object):
- *     unknown = -1             # <<<<<<<<<<<<<<
- *     byte = 0
- *     short = 1
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":182
- * class DATATYPE(object):
- *     unknown = -1
- *     byte = 0             # <<<<<<<<<<<<<<
- *     short = 1
- *     integer = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":183
- *     unknown = -1
- *     byte = 0
- *     short = 1             # <<<<<<<<<<<<<<
- *     integer = 2
- *     long = 4
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":184
- *     byte = 0
- *     short = 1
- *     integer = 2             # <<<<<<<<<<<<<<
- *     long = 4
- *     unsigned_byte = 50
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":185
- *     short = 1
- *     integer = 2
- *     long = 4             # <<<<<<<<<<<<<<
- *     unsigned_byte = 50
- *     unsigned_short = 51
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":186
- *     integer = 2
- *     long = 4
- *     unsigned_byte = 50             # <<<<<<<<<<<<<<
- *     unsigned_short = 51
- *     unsigned_integer = 52
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":187
- *     long = 4
- *     unsigned_byte = 50
- *     unsigned_short = 51             # <<<<<<<<<<<<<<
- *     unsigned_integer = 52
- *     unsigned_long = 54
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":188
- *     unsigned_byte = 50
- *     unsigned_short = 51
- *     unsigned_integer = 52             # <<<<<<<<<<<<<<
- *     unsigned_long = 54
- *     real = 5
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":189
- *     unsigned_short = 51
- *     unsigned_integer = 52
- *     unsigned_long = 54             # <<<<<<<<<<<<<<
- *     real = 5
- *     double = 6
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":190
- *     unsigned_integer = 52
- *     unsigned_long = 54
- *     real = 5             # <<<<<<<<<<<<<<
- *     double = 6
- *     long_double = 7
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":191
- *     unsigned_long = 54
- *     real = 5
- *     double = 6             # <<<<<<<<<<<<<<
- *     long_double = 7
- *     string = 9
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":192
- *     real = 5
- *     double = 6
- *     long_double = 7             # <<<<<<<<<<<<<<
- *     string = 9
- *     complex = 10
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":193
- *     double = 6
- *     long_double = 7
- *     string = 9             # <<<<<<<<<<<<<<
- *     complex = 10
- *     double_complex = 11
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":194
- *     long_double = 7
- *     string = 9
- *     complex = 10             # <<<<<<<<<<<<<<
- *     double_complex = 11
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__complex, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":195
- *     string = 9
- *     complex = 10
- *     double_complex = 11             # <<<<<<<<<<<<<<
- * 
- * class FLAG(object):
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":180
- * ## ==========
- * 
- * class DATATYPE(object):             # <<<<<<<<<<<<<<
- *     unknown = -1
- *     byte = 0
- */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__DATATYPE, __pyx_n_s__DATATYPE, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__DATATYPE, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":197
- *     double_complex = 11
- * 
- * class FLAG(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     YES = 1
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":198
- * 
- * class FLAG(object):
- *     UNKNOWN = 0             # <<<<<<<<<<<<<<
- *     YES = 1
- *     NO = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":199
- * class FLAG(object):
- *     UNKNOWN = 0
- *     YES = 1             # <<<<<<<<<<<<<<
- *     NO = 2
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":200
- *     UNKNOWN = 0
- *     YES = 1
- *     NO = 2             # <<<<<<<<<<<<<<
- * 
- * class BUFFER_ALLOC_WHEN(object):
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":197
- *     double_complex = 11
- * 
- * class FLAG(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     YES = 1
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__FLAG, __pyx_n_s__FLAG, __pyx_n_s__adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":202
- *     NO = 2
- * 
- * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     NOW = 1
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":203
- * 
- * class BUFFER_ALLOC_WHEN(object):
- *     UNKNOWN = 0             # <<<<<<<<<<<<<<
- *     NOW = 1
- *     LATER = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":204
- * class BUFFER_ALLOC_WHEN(object):
- *     UNKNOWN = 0
- *     NOW = 1             # <<<<<<<<<<<<<<
- *     LATER = 2
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":205
- *     UNKNOWN = 0
- *     NOW = 1
- *     LATER = 2             # <<<<<<<<<<<<<<
- * 
- * ## ==========
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":202
- *     NO = 2
- * 
- * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     NOW = 1
- */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":211
- * ## ==========
- * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_1 = ((struct PyMPICommObject *)__pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "adios.pyx":217
- *                    char * name,
- *                    char * mode,
- *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     cdef int64_t fd
- *     cdef int result
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_2 = ((struct PyMPICommObject *)__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "adios.pyx":261
- * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_6 = ((struct PyMPICommObject *)__pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "adios.pyx":440
- *     cpdef public dict group
- * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.fp = NULL
- *         self.group = {}
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_10 = ((struct PyMPICommObject *)__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "adios.pyx":1
- * """             # <<<<<<<<<<<<<<
- *  ADIOS is freely available under the terms of the BSD license described
- *  in the COPYING file in the top level directory of this source distribution.
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "numpy.pxd":975
- *      arr.base = baseptr
- * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
- */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  if (__pyx_m) {
-    __Pyx_AddTraceback("init adios", __pyx_clineno, __pyx_lineno, __pyx_filename);
-    Py_DECREF(__pyx_m); __pyx_m = 0;
-  } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init adios");
-  }
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
-  return __pyx_m;
-  #endif
-}
-
-/* Runtime support code */
-#if CYTHON_REFNANNY
-static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
-    PyObject *m = NULL, *p = NULL;
-    void *r = NULL;
-    m = PyImport_ImportModule((char *)modname);
-    if (!m) goto end;
-    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
-    if (!p) goto end;
-    r = PyLong_AsVoidPtr(p);
-end:
-    Py_XDECREF(p);
-    Py_XDECREF(m);
-    return (__Pyx_RefNannyAPIStruct *)r;
-}
-#endif /* CYTHON_REFNANNY */
-
-static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
-    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
-    if (unlikely(!result)) {
-        PyErr_Format(PyExc_NameError,
-#if PY_MAJOR_VERSION >= 3
-            "name '%U' is not defined", name);
-#else
-            "name '%s' is not defined", PyString_AS_STRING(name));
-#endif
-    }
-    return result;
-}
-
-static void __Pyx_RaiseDoubleKeywordsError(
-    const char* func_name,
-    PyObject* kw_name)
-{
-    PyErr_Format(PyExc_TypeError,
-        #if PY_MAJOR_VERSION >= 3
-        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
-        #else
-        "%s() got multiple values for keyword argument '%s'", func_name,
-        PyString_AsString(kw_name));
-        #endif
-}
-
-static int __Pyx_ParseOptionalKeywords(
-    PyObject *kwds,
-    PyObject **argnames[],
-    PyObject *kwds2,
-    PyObject *values[],
-    Py_ssize_t num_pos_args,
-    const char* function_name)
-{
-    PyObject *key = 0, *value = 0;
-    Py_ssize_t pos = 0;
-    PyObject*** name;
-    PyObject*** first_kw_arg = argnames + num_pos_args;
-    while (PyDict_Next(kwds, &pos, &key, &value)) {
-        name = first_kw_arg;
-        while (*name && (**name != key)) name++;
-        if (*name) {
-            values[name-argnames] = value;
-            continue;
-        }
-        name = first_kw_arg;
-        #if PY_MAJOR_VERSION < 3
-        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
-            while (*name) {
-                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
-                        && _PyString_Eq(**name, key)) {
-                    values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    if ((**argname == key) || (
-                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
-                             && _PyString_Eq(**argname, key))) {
-                        goto arg_passed_twice;
-                    }
-                    argname++;
-                }
-            }
-        } else
-        #endif
-        if (likely(PyUnicode_Check(key))) {
-            while (*name) {
-                int cmp = (**name == key) ? 0 :
-                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
-                #endif
-                    PyUnicode_Compare(**name, key);
-                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                if (cmp == 0) {
-                    values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    int cmp = (**argname == key) ? 0 :
-                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
-                    #endif
-                        PyUnicode_Compare(**argname, key);
-                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                    if (cmp == 0) goto arg_passed_twice;
-                    argname++;
-                }
-            }
-        } else
-            goto invalid_keyword_type;
-        if (kwds2) {
-            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
-        } else {
-            goto invalid_keyword;
-        }
-    }
-    return 0;
-arg_passed_twice:
-    __Pyx_RaiseDoubleKeywordsError(function_name, key);
-    goto bad;
-invalid_keyword_type:
-    PyErr_Format(PyExc_TypeError,
-        "%s() keywords must be strings", function_name);
-    goto bad;
-invalid_keyword:
-    PyErr_Format(PyExc_TypeError,
-    #if PY_MAJOR_VERSION < 3
-        "%s() got an unexpected keyword argument '%s'",
-        function_name, PyString_AsString(key));
-    #else
-        "%s() got an unexpected keyword argument '%U'",
-        function_name, key);
-    #endif
-bad:
-    return -1;
-}
-
-static void __Pyx_RaiseArgtupleInvalid(
-    const char* func_name,
-    int exact,
-    Py_ssize_t num_min,
-    Py_ssize_t num_max,
-    Py_ssize_t num_found)
-{
-    Py_ssize_t num_expected;
-    const char *more_or_less;
-    if (num_found < num_min) {
-        num_expected = num_min;
-        more_or_less = "at least";
-    } else {
-        num_expected = num_max;
-        more_or_less = "at most";
-    }
-    if (exact) {
-        more_or_less = "exactly";
-    }
-    PyErr_Format(PyExc_TypeError,
-                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                 func_name, more_or_less, num_expected,
-                 (num_expected == 1) ? "" : "s", num_found);
-}
-
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact)
-{
-    if (!type) {
-        PyErr_Format(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (none_allowed && obj == Py_None) return 1;
-    else if (exact) {
-        if (Py_TYPE(obj) == type) return 1;
-    }
-    else {
-        if (PyObject_TypeCheck(obj, type)) return 1;
-    }
-    PyErr_Format(PyExc_TypeError,
-        "Argument '%s' has incorrect type (expected %s, got %s)",
-        name, type->tp_name, Py_TYPE(obj)->tp_name);
-    return 0;
-}
-
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
-    PyObject *result;
-#if CYTHON_COMPILING_IN_CPYTHON
-    result = PyDict_GetItem(__pyx_d, name);
-    if (result) {
-        Py_INCREF(result);
-    } else {
-#else
-    result = PyObject_GetItem(__pyx_d, name);
-    if (!result) {
-        PyErr_Clear();
-#endif
-        result = __Pyx_GetBuiltinName(name);
-    }
-    return result;
-}
-
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
-    if (unlikely(!type)) {
-        PyErr_Format(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (likely(PyObject_TypeCheck(obj, type)))
-        return 1;
-    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
-                 Py_TYPE(obj)->tp_name, type->tp_name);
-    return 0;
-}
-
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    tmp_type = tstate->curexc_type;
-    tmp_value = tstate->curexc_value;
-    tmp_tb = tstate->curexc_traceback;
-    tstate->curexc_type = type;
-    tstate->curexc_value = value;
-    tstate->curexc_traceback = tb;
-    Py_XDECREF(tmp_type);
-    Py_XDECREF(tmp_value);
-    Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
-#endif
-}
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->curexc_type;
-    *value = tstate->curexc_value;
-    *tb = tstate->curexc_traceback;
-    tstate->curexc_type = 0;
-    tstate->curexc_value = 0;
-    tstate->curexc_traceback = 0;
-#else
-    PyErr_Fetch(type, value, tb);
-#endif
-}
-
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
-    } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
-    }
-}
-
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
-    PyObject *r;
-    if (!j) return NULL;
-    r = PyObject_GetItem(o, j);
-    Py_DECREF(j);
-    return r;
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
-                                                              int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
-        PyObject *r = PyList_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
-                                                              int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
-        PyObject *r = PyTuple_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
-                                                     int is_list, int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (is_list || PyList_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
-        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
-            PyObject *r = PyList_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    }
-    else if (PyTuple_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
-        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
-            PyObject *r = PyTuple_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    } else {
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_item)) {
-            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (likely(l >= 0)) {
-                    i += l;
-                } else {
-                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                        PyErr_Clear();
-                    else
-                        return NULL;
-                }
-            }
-            return m->sq_item(o, i);
-        }
-    }
-#else
-    if (is_list || PySequence_Check(o)) {
-        return PySequence_GetItem(o, i);
-    }
-#endif
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-}
-
-#if PY_MAJOR_VERSION >= 3
-static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
-    return PyObject_CallMethodObjArgs(d, __pyx_n_s__values, NULL);
-}
-#endif
-
-#if PY_MAJOR_VERSION < 3
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
-                        CYTHON_UNUSED PyObject *cause) {
-    Py_XINCREF(type);
-    if (!value || value == Py_None)
-        value = NULL;
-    else
-        Py_INCREF(value);
-    if (!tb || tb == Py_None)
-        tb = NULL;
-    else {
-        Py_INCREF(tb);
-        if (!PyTraceBack_Check(tb)) {
-            PyErr_SetString(PyExc_TypeError,
-                "raise: arg 3 must be a traceback or None");
-            goto raise_error;
-        }
-    }
-    #if PY_VERSION_HEX < 0x02050000
-    if (PyClass_Check(type)) {
-    #else
-    if (PyType_Check(type)) {
-    #endif
-#if CYTHON_COMPILING_IN_PYPY
-        if (!value) {
-            Py_INCREF(Py_None);
-            value = Py_None;
-        }
-#endif
-        PyErr_NormalizeException(&type, &value, &tb);
-    } else {
-        if (value) {
-            PyErr_SetString(PyExc_TypeError,
-                "instance exception may not have a separate value");
-            goto raise_error;
-        }
-        value = type;
-        #if PY_VERSION_HEX < 0x02050000
-        if (PyInstance_Check(type)) {
-            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
-            Py_INCREF(type);
-        } else {
-            type = 0;
-            PyErr_SetString(PyExc_TypeError,
-                "raise: exception must be an old-style class or instance");
-            goto raise_error;
-        }
-        #else
-        type = (PyObject*) Py_TYPE(type);
-        Py_INCREF(type);
-        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
-            PyErr_SetString(PyExc_TypeError,
-                "raise: exception class must be a subclass of BaseException");
-            goto raise_error;
-        }
-        #endif
-    }
-    __Pyx_ErrRestore(type, value, tb);
-    return;
-raise_error:
-    Py_XDECREF(value);
-    Py_XDECREF(type);
-    Py_XDECREF(tb);
-    return;
-}
-#else /* Python 3+ */
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
-    PyObject* owned_instance = NULL;
-    if (tb == Py_None) {
-        tb = 0;
-    } else if (tb && !PyTraceBack_Check(tb)) {
-        PyErr_SetString(PyExc_TypeError,
-            "raise: arg 3 must be a traceback or None");
-        goto bad;
-    }
-    if (value == Py_None)
-        value = 0;
-    if (PyExceptionInstance_Check(type)) {
-        if (value) {
-            PyErr_SetString(PyExc_TypeError,
-                "instance exception may not have a separate value");
-            goto bad;
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
         }
-        value = type;
-        type = (PyObject*) Py_TYPE(value);
-    } else if (PyExceptionClass_Check(type)) {
-        PyObject *args;
-        if (!value)
-            args = PyTuple_New(0);
-        else if (PyTuple_Check(value)) {
-            Py_INCREF(value);
-            args = value;
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
         } else
-            args = PyTuple_Pack(1, value);
-        if (!args)
-            goto bad;
-        owned_instance = PyEval_CallObject(type, args);
-        Py_DECREF(args);
-        if (!owned_instance)
-            goto bad;
-        value = owned_instance;
-        if (!PyExceptionInstance_Check(value)) {
-            PyErr_Format(PyExc_TypeError,
-                         "calling %R should have returned an instance of "
-                         "BaseException, not %R",
-                         type, Py_TYPE(value));
-            goto bad;
-        }
-    } else {
-        PyErr_SetString(PyExc_TypeError,
-            "raise: exception class must be a subclass of BaseException");
-        goto bad;
-    }
-#if PY_VERSION_HEX >= 0x03030000
-    if (cause) {
-#else
-    if (cause && cause != Py_None) {
-#endif
-        PyObject *fixed_cause;
-        if (cause == Py_None) {
-            fixed_cause = NULL;
-        } else if (PyExceptionClass_Check(cause)) {
-            fixed_cause = PyObject_CallObject(cause, NULL);
-            if (fixed_cause == NULL)
-                goto bad;
-        } else if (PyExceptionInstance_Check(cause)) {
-            fixed_cause = cause;
-            Py_INCREF(fixed_cause);
-        } else {
-            PyErr_SetString(PyExc_TypeError,
-                            "exception causes must derive from "
-                            "BaseException");
-            goto bad;
-        }
-        PyException_SetCause(value, fixed_cause);
-    }
-    PyErr_SetObject(type, value);
-    if (tb) {
-        PyThreadState *tstate = PyThreadState_GET();
-        PyObject* tmp_tb = tstate->curexc_traceback;
-        if (tb != tmp_tb) {
-            Py_INCREF(tb);
-            tstate->curexc_traceback = tb;
-            Py_XDECREF(tmp_tb);
-        }
-    }
-bad:
-    Py_XDECREF(owned_instance);
-    return;
-}
-#endif
-
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
-    PyErr_Format(PyExc_ValueError,
-                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
-    PyErr_Format(PyExc_ValueError,
-                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
-                 index, (index == 1) ? "" : "s");
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-}
-
-static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    PyObject* exc_type = tstate->curexc_type;
-    if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
-            PyObject *exc_value, *exc_tb;
-            exc_value = tstate->curexc_value;
-            exc_tb = tstate->curexc_traceback;
-            tstate->curexc_type = 0;
-            tstate->curexc_value = 0;
-            tstate->curexc_traceback = 0;
-            Py_DECREF(exc_type);
-            Py_XDECREF(exc_value);
-            Py_XDECREF(exc_tb);
-            return 0;
-        } else {
-            return -1;
-        }
-    }
-    return 0;
-#else
-    if (unlikely(PyErr_Occurred())) {
-        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
-            PyErr_Clear();
-            return 0;
-        } else {
-            return -1;
-        }
-    }
-    return 0;
-#endif
-}
-
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
-    if (unlikely(retval)) {
-        Py_DECREF(retval);
-        __Pyx_RaiseTooManyValuesError(expected);
-        return -1;
-    } else {
-        return __Pyx_IterFinish();
-    }
-    return 0;
-}
-
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
-    PyObject *ob = PyCapsule_New(vtable, 0, 0);
-#else
-    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
-#endif
-    if (!ob)
-        goto bad;
-    if (PyDict_SetItem(dict, __pyx_n_s____pyx_vtable__, ob) < 0)
-        goto bad;
-    Py_DECREF(ob);
-    return 0;
-bad:
-    Py_XDECREF(ob);
-    return -1;
-}
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    #if PY_VERSION_HEX >= 0x02050000
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                 #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
                 }
+                name++;
             }
-            level = 0; /* try absolute import on failure */
-        }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
+                }
+            }
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
         }
     }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
     #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);
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
     #endif
 bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
+    return -1;
 }
 
-static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) {
-    PyObject *metaclass;
-#if PY_MAJOR_VERSION < 3
-    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
-        PyObject *base = PyTuple_GET_ITEM(bases, 0);
-        metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__);
-        if (!metaclass) {
-            PyErr_Clear();
-            metaclass = (PyObject*) Py_TYPE(base);
-        }
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
     } else {
-        metaclass = (PyObject *) &PyClass_Type;
+        num_expected = num_max;
+        more_or_less = "at most";
     }
-#else
-    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
-        PyObject *base = PyTuple_GET_ITEM(bases, 0);
-        metaclass = (PyObject*) Py_TYPE(base);
-    } else {
-        metaclass = (PyObject *) &PyType_Type;
+    if (exact) {
+        more_or_less = "exactly";
     }
-#endif
-    Py_INCREF(metaclass);
-    return metaclass;
+    PyErr_Format(PyExc_TypeError,
+                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
 }
 
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
-                                   PyObject *qualname, PyObject *modname) {
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
-    PyObject *metaclass;
-    if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0)
-        return NULL;
-    if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0)
-        return NULL;
-    metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__);
-    if (metaclass) {
-        Py_INCREF(metaclass);
+#if CYTHON_COMPILING_IN_CPYTHON
+    result = PyDict_GetItem(__pyx_d, name);
+    if (result) {
+        Py_INCREF(result);
     } else {
-        metaclass = __Pyx_FindPy2Metaclass(bases);
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    if (!result) {
+        PyErr_Clear();
+#endif
+        result = __Pyx_GetBuiltinName(name);
     }
-    result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
-    Py_DECREF(metaclass);
     return result;
 }
 
-static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject* x) {
-    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if (sizeof(int64_t) == sizeof(char)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedChar(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedChar(x);
-    } else if (sizeof(int64_t) == sizeof(short)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedShort(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedShort(x);
-    } else if (sizeof(int64_t) == sizeof(int)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedInt(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedInt(x);
-    } else if (sizeof(int64_t) == sizeof(long)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedLong(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedLong(x);
-    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedLongLong(x);
-    }  else {
-        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-        PyErr_SetString(PyExc_RuntimeError,
-                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-        #else
-        int64_t val;
-        PyObject *v = __Pyx_PyNumber_Int(x);
-        #if PY_MAJOR_VERSION < 3
-        if (likely(v) && !PyLong_Check(v)) {
-            PyObject *tmp = v;
-            v = PyNumber_Long(tmp);
-            Py_DECREF(tmp);
-        }
-        #endif
-        if (likely(v)) {
-            int one = 1; int is_little = (int)*(unsigned char *)&one;
-            unsigned char *bytes = (unsigned char *)&val;
-            int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                          bytes, sizeof(val),
-                                          is_little, !is_unsigned);
-            Py_DECREF(v);
-            if (likely(!ret))
-                return val;
-        }
-        #endif
-        return (int64_t)-1;
-    }
-}
-
-static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject* x) {
-    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if (sizeof(uint64_t) == sizeof(char)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedChar(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedChar(x);
-    } else if (sizeof(uint64_t) == sizeof(short)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedShort(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedShort(x);
-    } else if (sizeof(uint64_t) == sizeof(int)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedInt(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedInt(x);
-    } else if (sizeof(uint64_t) == sizeof(long)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedLong(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedLong(x);
-    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedLongLong(x);
-    }  else {
-        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-        PyErr_SetString(PyExc_RuntimeError,
-                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-        #else
-        uint64_t val;
-        PyObject *v = __Pyx_PyNumber_Int(x);
-        #if PY_MAJOR_VERSION < 3
-        if (likely(v) && !PyLong_Check(v)) {
-            PyObject *tmp = v;
-            v = PyNumber_Long(tmp);
-            Py_DECREF(tmp);
-        }
-        #endif
-        if (likely(v)) {
-            int one = 1; int is_little = (int)*(unsigned char *)&one;
-            unsigned char *bytes = (unsigned char *)&val;
-            int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                          bytes, sizeof(val),
-                                          is_little, !is_unsigned);
-            Py_DECREF(v);
-            if (likely(!ret))
-                return val;
-        }
-        #endif
-        return (uint64_t)-1;
-    }
-}
-
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t val) {
-    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if ((sizeof(int64_t) == sizeof(char))  ||
-        (sizeof(int64_t) == sizeof(short))) {
-        return PyInt_FromLong((long)val);
-    } else if ((sizeof(int64_t) == sizeof(int)) ||
-               (sizeof(int64_t) == sizeof(long))) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLong((unsigned long)val);
-        else
-            return PyInt_FromLong((long)val);
-    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
-        else
-            return PyLong_FromLongLong((PY_LONG_LONG)val);
-    } else {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&val;
-        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
-                                     little, !is_unsigned);
-    }
-}
-
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
-static PyObject *__Pyx_GetStdout(void) {
-    PyObject *f = PySys_GetObject((char *)"stdout");
-    if (!f) {
-        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
-    }
-    return f;
-}
-static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
-    int i;
-    if (!f) {
-        if (!(f = __Pyx_GetStdout()))
-            return -1;
-    }
-    Py_INCREF(f);
-    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
-        PyObject* v;
-        if (PyFile_SoftSpace(f, 1)) {
-            if (PyFile_WriteString(" ", f) < 0)
-                goto error;
-        }
-        v = PyTuple_GET_ITEM(arg_tuple, i);
-        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
-            goto error;
-        if (PyString_Check(v)) {
-            char *s = PyString_AsString(v);
-            Py_ssize_t len = PyString_Size(v);
-            if (len > 0 &&
-                isspace(Py_CHARMASK(s[len-1])) &&
-                s[len-1] != ' ')
-                    PyFile_SoftSpace(f, 0);
-        }
-    }
-    if (newline) {
-        if (PyFile_WriteString("\n", f) < 0)
-            goto error;
-        PyFile_SoftSpace(f, 0);
-    }
-    Py_DECREF(f);
-    return 0;
-error:
-    Py_DECREF(f);
-    return -1;
-}
-#else /* Python 3 has a print function */
-static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
-    PyObject* kwargs = 0;
-    PyObject* result = 0;
-    PyObject* end_string;
-    if (unlikely(!__pyx_print)) {
-        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s__print);
-        if (!__pyx_print)
-            return -1;
-    }
-    if (stream) {
-        kwargs = PyDict_New();
-        if (unlikely(!kwargs))
-            return -1;
-        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s__file, stream) < 0))
-            goto bad;
-        if (!newline) {
-            end_string = PyUnicode_FromStringAndSize(" ", 1);
-            if (unlikely(!end_string))
-                goto bad;
-            if (PyDict_SetItem(kwargs, __pyx_n_s__end, end_string) < 0) {
-                Py_DECREF(end_string);
-                goto bad;
-            }
-            Py_DECREF(end_string);
-        }
-    } else if (!newline) {
-        if (unlikely(!__pyx_print_kwargs)) {
-            __pyx_print_kwargs = PyDict_New();
-            if (unlikely(!__pyx_print_kwargs))
-                return -1;
-            end_string = PyUnicode_FromStringAndSize(" ", 1);
-            if (unlikely(!end_string))
-                return -1;
-            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s__end, end_string) < 0) {
-                Py_DECREF(end_string);
-                return -1;
-            }
-            Py_DECREF(end_string);
-        }
-        kwargs = __pyx_print_kwargs;
-    }
-    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
-    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
-        Py_DECREF(kwargs);
-    if (!result)
-        return -1;
-    Py_DECREF(result);
-    return 0;
-bad:
-    if (kwargs != __pyx_print_kwargs)
-        Py_XDECREF(kwargs);
-    return -1;
-}
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    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
-
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t val) {
-    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if ((sizeof(uint64_t) == sizeof(char))  ||
-        (sizeof(uint64_t) == sizeof(short))) {
-        return PyInt_FromLong((long)val);
-    } else if ((sizeof(uint64_t) == sizeof(int)) ||
-               (sizeof(uint64_t) == sizeof(long))) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLong((unsigned long)val);
-        else
-            return PyInt_FromLong((long)val);
-    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
-        else
-            return PyLong_FromLongLong((PY_LONG_LONG)val);
-    } else {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&val;
-        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
-                                     little, !is_unsigned);
+    result = (*call)(func, arg, kw);
+#if PY_VERSION_HEX >= 0x02060000
+    Py_LeaveRecursiveCall();
+#endif
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
     }
+    return result;
 }
+#endif
 
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
-static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
-    if (!f) {
-        if (!(f = __Pyx_GetStdout()))
-            return -1;
-    }
-    Py_INCREF(f);
-    if (PyFile_SoftSpace(f, 0)) {
-        if (PyFile_WriteString(" ", f) < 0)
-            goto error;
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
     }
-    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
-        goto error;
-    if (PyFile_WriteString("\n", f) < 0)
-        goto error;
-    Py_DECREF(f);
+    if (likely(PyObject_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
     return 0;
-error:
-    Py_DECREF(f);
-    return -1;
-    /* the line below is just to avoid C compiler
-     * warnings about unused functions */
-    return __Pyx_Print(f, NULL, 0);
-}
-#else /* Python 3 has a print function */
-static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
-    int res;
-    PyObject* arg_tuple = PyTuple_Pack(1, o);
-    if (unlikely(!arg_tuple))
-        return -1;
-    res = __Pyx_Print(stream, arg_tuple, 1);
-    Py_DECREF(arg_tuple);
-    return res;
 }
-#endif
 
-#if CYTHON_CCOMPLEX
-  #ifdef __cplusplus
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      return ::std::complex< float >(x, y);
-    }
-  #else
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      return x + y*(__pyx_t_float_complex)_Complex_I;
-    }
-  #endif
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
 #else
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      __pyx_t_float_complex z;
-      z.real = x;
-      z.imag = y;
-      return z;
-    }
+    PyErr_Restore(type, value, tb);
+#endif
+}
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(type, value, tb);
 #endif
+}
 
-#if CYTHON_CCOMPLEX
-#else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-       return (a.real == b.real) && (a.imag == b.imag);
+static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
+                                  int full_traceback) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    if (full_traceback) {
+        Py_XINCREF(old_exc);
+        Py_XINCREF(old_val);
+        Py_XINCREF(old_tb);
+        __Pyx_ErrRestore(old_exc, old_val, old_tb);
+        PyErr_PrintEx(1);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real + b.real;
-        z.imag = a.imag + b.imag;
-        return z;
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real - b.real;
-        z.imag = a.imag - b.imag;
-        return z;
+}
+
+static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+}
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real * b.real - a.imag * b.imag;
-        z.imag = a.real * b.imag + a.imag * b.real;
-        return z;
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (likely(Py_TYPE(obj) == type)) return 1;
+        #if PY_MAJOR_VERSION == 2
+        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+        #endif
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        float denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    else {
+        if (likely(PyObject_TypeCheck(obj, type))) return 1;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
-        __pyx_t_float_complex z;
-        z.real = -a.real;
-        z.imag = -a.imag;
-        return z;
+    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
+    return 0;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
-       return (a.real == 0) && (a.imag == 0);
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
-        __pyx_t_float_complex z;
-        z.real =  a.real;
-        z.imag = -a.imag;
-        return z;
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
     }
-    #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
-          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
-            return sqrtf(z.real*z.real + z.imag*z.imag);
-          #else
-            return hypotf(z.real, z.imag);
-          #endif
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
         }
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-            __pyx_t_float_complex z;
-            float r, lnr, theta, z_r, z_theta;
-            if (b.imag == 0 && b.real == (int)b.real) {
-                if (b.real < 0) {
-                    float denom = a.real * a.real + a.imag * a.imag;
-                    a.real = a.real / denom;
-                    a.imag = -a.imag / denom;
-                    b.real = -b.real;
-                }
-                switch ((int)b.real) {
-                    case 0:
-                        z.real = 1;
-                        z.imag = 0;
-                        return z;
-                    case 1:
-                        return a;
-                    case 2:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(a, a);
-                    case 3:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, a);
-                    case 4:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, z);
-                }
-            }
-            if (a.imag == 0) {
-                if (a.real == 0) {
-                    return a;
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
+                        PyErr_Clear();
+                    else
+                        return NULL;
                 }
-                r = a.real;
-                theta = 0;
-            } else {
-                r = __Pyx_c_absf(a);
-                theta = atan2f(a.imag, a.real);
             }
-            lnr = logf(r);
-            z_r = expf(lnr * b.real - theta * b.imag);
-            z_theta = theta * b.real + lnr * b.imag;
-            z.real = z_r * cosf(z_theta);
-            z.imag = z_r * sinf(z_theta);
-            return z;
+            return m->sq_item(o, i);
         }
-    #endif
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
 #endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
 
-#if CYTHON_CCOMPLEX
-  #ifdef __cplusplus
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      return ::std::complex< double >(x, y);
-    }
-  #else
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      return x + y*(__pyx_t_double_complex)_Complex_I;
+static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject* exc_type = tstate->curexc_type;
+    if (unlikely(exc_type)) {
+        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+            PyObject *exc_value, *exc_tb;
+            exc_value = tstate->curexc_value;
+            exc_tb = tstate->curexc_traceback;
+            tstate->curexc_type = 0;
+            tstate->curexc_value = 0;
+            tstate->curexc_traceback = 0;
+            Py_DECREF(exc_type);
+            Py_XDECREF(exc_value);
+            Py_XDECREF(exc_tb);
+            return 0;
+        } else {
+            return -1;
+        }
     }
-  #endif
+    return 0;
 #else
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      __pyx_t_double_complex z;
-      z.real = x;
-      z.imag = y;
-      return z;
+    if (unlikely(PyErr_Occurred())) {
+        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
+            PyErr_Clear();
+            return 0;
+        } else {
+            return -1;
+        }
     }
+    return 0;
 #endif
+}
+
+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",
+                 index, (index == 1) ? "" : "s");
+}
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    PyErr_Format(PyExc_ValueError,
+                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else {
+        return __Pyx_IterFinish();
+    }
+    return 0;
+}
 
-#if CYTHON_CCOMPLEX
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+}
+
+static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
+    if (t == Py_None) {
+      __Pyx_RaiseNoneNotIterableError();
+    } else if (PyTuple_GET_SIZE(t) < index) {
+      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
+    } else {
+      __Pyx_RaiseTooManyValuesError(index);
+    }
+}
+
+static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
+                                             int is_tuple, int has_known_size, int decref_tuple) {
+    Py_ssize_t index;
+    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
+    if (!is_tuple && unlikely(!PyTuple_Check(tuple))) {
+        iternextfunc iternext;
+        iter = PyObject_GetIter(tuple);
+        if (unlikely(!iter)) goto bad;
+        if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
+        iternext = Py_TYPE(iter)->tp_iternext;
+        value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
+        value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
+        if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
+        Py_DECREF(iter);
+    } else {
+        if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) {
+            __Pyx_UnpackTupleError(tuple, 2);
+            goto bad;
+        }
+#if CYTHON_COMPILING_IN_PYPY
+        value1 = PySequence_ITEM(tuple, 0);
+        if (unlikely(!value1)) goto bad;
+        value2 = PySequence_ITEM(tuple, 1);
+        if (unlikely(!value2)) goto bad;
 #else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-       return (a.real == b.real) && (a.imag == b.imag);
-    }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real + b.real;
-        z.imag = a.imag + b.imag;
-        return z;
+        value1 = PyTuple_GET_ITEM(tuple, 0);
+        value2 = PyTuple_GET_ITEM(tuple, 1);
+        Py_INCREF(value1);
+        Py_INCREF(value2);
+#endif
+        if (decref_tuple) { Py_DECREF(tuple); }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real - b.real;
-        z.imag = a.imag - b.imag;
-        return z;
+    *pvalue1 = value1;
+    *pvalue2 = value2;
+    return 0;
+unpacking_failed:
+    if (!has_known_size && __Pyx_IterFinish() == 0)
+        __Pyx_RaiseNeedMoreValuesError(index);
+bad:
+    Py_XDECREF(iter);
+    Py_XDECREF(value1);
+    Py_XDECREF(value2);
+    if (decref_tuple) { Py_XDECREF(tuple); }
+    return -1;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
+    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
+    *p_source_is_dict = is_dict;
+#if !CYTHON_COMPILING_IN_PYPY
+    if (is_dict) {
+        *p_orig_length = PyDict_Size(iterable);
+        Py_INCREF(iterable);
+        return iterable;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real * b.real - a.imag * b.imag;
-        z.imag = a.real * b.imag + a.imag * b.real;
-        return z;
+#endif
+    *p_orig_length = 0;
+    if (method_name) {
+        PyObject* iter;
+        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
+        if (!iterable)
+            return NULL;
+#if !CYTHON_COMPILING_IN_PYPY
+        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
+            return iterable;
+#endif
+        iter = PyObject_GetIter(iterable);
+        Py_DECREF(iterable);
+        return iter;
+    }
+    return PyObject_GetIter(iterable);
+}
+static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* iter_obj, Py_ssize_t orig_length, Py_ssize_t* ppos,
+                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
+    PyObject* next_item;
+#if !CYTHON_COMPILING_IN_PYPY
+    if (source_is_dict) {
+        PyObject *key, *value;
+        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
+            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
+            return -1;
+        }
+        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
+            return 0;
+        }
+        if (pitem) {
+            PyObject* tuple = PyTuple_New(2);
+            if (unlikely(!tuple)) {
+                return -1;
+            }
+            Py_INCREF(key);
+            Py_INCREF(value);
+            PyTuple_SET_ITEM(tuple, 0, key);
+            PyTuple_SET_ITEM(tuple, 1, value);
+            *pitem = tuple;
+        } else {
+            if (pkey) {
+                Py_INCREF(key);
+                *pkey = key;
+            }
+            if (pvalue) {
+                Py_INCREF(value);
+                *pvalue = value;
+            }
+        }
+        return 1;
+    } else if (PyTuple_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyTuple_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else if (PyList_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyList_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else
+#endif
+    {
+        next_item = PyIter_Next(iter_obj);
+        if (unlikely(!next_item)) {
+            return __Pyx_IterFinish();
+        }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        double denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    if (pitem) {
+        *pitem = next_item;
+    } else if (pkey && pvalue) {
+        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
+            return -1;
+    } else if (pkey) {
+        *pkey = next_item;
+    } else {
+        *pvalue = next_item;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
-        __pyx_t_double_complex z;
-        z.real = -a.real;
-        z.imag = -a.imag;
-        return z;
+    return 1;
+}
+
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
     }
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
-       return (a.real == 0) && (a.imag == 0);
+    #if PY_VERSION_HEX < 0x02050000
+    if (PyClass_Check(type)) {
+    #else
+    if (PyType_Check(type)) {
+    #endif
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        #if PY_VERSION_HEX < 0x02050000
+        if (PyInstance_Check(type)) {
+            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+            Py_INCREF(type);
+        } else {
+            type = 0;
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception must be an old-style class or instance");
+            goto raise_error;
+        }
+        #else
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+        #endif
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
-        __pyx_t_double_complex z;
-        z.real =  a.real;
-        z.imag = -a.imag;
-        return z;
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else /* Python 3+ */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
     }
-    #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
-          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
-            return sqrt(z.real*z.real + z.imag*z.imag);
-          #else
-            return hypot(z.real, z.imag);
-          #endif
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
         }
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-            __pyx_t_double_complex z;
-            double r, lnr, theta, z_r, z_theta;
-            if (b.imag == 0 && b.real == (int)b.real) {
-                if (b.real < 0) {
-                    double denom = a.real * a.real + a.imag * a.imag;
-                    a.real = a.real / denom;
-                    a.imag = -a.imag / denom;
-                    b.real = -b.real;
-                }
-                switch ((int)b.real) {
-                    case 0:
-                        z.real = 1;
-                        z.imag = 0;
-                        return z;
-                    case 1:
-                        return a;
-                    case 2:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(a, a);
-                    case 3:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, a);
-                    case 4:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, z);
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *instance_class = NULL;
+        if (value && PyExceptionInstance_Check(value)) {
+            instance_class = (PyObject*) Py_TYPE(value);
+            if (instance_class != type) {
+                if (PyObject_IsSubclass(instance_class, type)) {
+                    type = instance_class;
+                } else {
+                    instance_class = NULL;
                 }
             }
-            if (a.imag == 0) {
-                if (a.real == 0) {
-                    return a;
-                }
-                r = a.real;
-                theta = 0;
-            } else {
-                r = __Pyx_c_abs(a);
-                theta = atan2(a.imag, a.real);
+        }
+        if (!instance_class) {
+            PyObject *args;
+            if (!value)
+                args = PyTuple_New(0);
+            else if (PyTuple_Check(value)) {
+                Py_INCREF(value);
+                args = value;
+            } else
+                args = PyTuple_Pack(1, value);
+            if (!args)
+                goto bad;
+            owned_instance = PyObject_Call(type, args, NULL);
+            Py_DECREF(args);
+            if (!owned_instance)
+                goto bad;
+            value = owned_instance;
+            if (!PyExceptionInstance_Check(value)) {
+                PyErr_Format(PyExc_TypeError,
+                             "calling %R should have returned an instance of "
+                             "BaseException, not %R",
+                             type, Py_TYPE(value));
+                goto bad;
             }
-            lnr = log(r);
-            z_r = exp(lnr * b.real - theta * b.imag);
-            z_theta = theta * b.real + lnr * b.imag;
-            z.real = z_r * cos(z_theta);
-            z.imag = z_r * sin(z_theta);
-            return z;
         }
-    #endif
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+#if PY_VERSION_HEX >= 0x03030000
+    if (cause) {
+#else
+    if (cause && cause != Py_None) {
+#endif
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
+    PyErr_SetObject(type, value);
+    if (tb) {
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+    }
+bad:
+    Py_XDECREF(owned_instance);
+    return;
+}
+#endif
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
 #endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
 
-static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
-    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned char" :
-                    "value too large to convert to unsigned char");
-            }
-            return (unsigned char)-1;
+static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
+    for (i=0; i < nbases; i++) {
+        PyTypeObject *tmptype;
+        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
+        tmptype = Py_TYPE(tmp);
+#if PY_MAJOR_VERSION < 3
+        if (tmptype == &PyClass_Type)
+            continue;
+#endif
+        if (!metaclass) {
+            metaclass = tmptype;
+            continue;
         }
-        return (unsigned char)val;
+        if (PyType_IsSubtype(metaclass, tmptype))
+            continue;
+        if (PyType_IsSubtype(tmptype, metaclass)) {
+            metaclass = tmptype;
+            continue;
+        }
+        PyErr_SetString(PyExc_TypeError,
+                        "metaclass conflict: "
+                        "the metaclass of a derived class "
+                        "must be a (non-strict) subclass "
+                        "of the metaclasses of all its bases");
+        return NULL;
+    }
+    if (!metaclass) {
+#if PY_MAJOR_VERSION < 3
+        metaclass = &PyClass_Type;
+#else
+        metaclass = &PyType_Type;
+#endif
     }
-    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
+    Py_INCREF((PyObject*) metaclass);
+    return (PyObject*) metaclass;
 }
 
-static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
-    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned short" :
-                    "value too large to convert to unsigned short");
+static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
+    PyObject *ns;
+    if (metaclass) {
+        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
+        if (prep) {
+            PyObject *pargs = PyTuple_Pack(2, name, bases);
+            if (unlikely(!pargs)) {
+                Py_DECREF(prep);
+                return NULL;
             }
-            return (unsigned short)-1;
+            ns = PyObject_Call(prep, pargs, mkw);
+            Py_DECREF(prep);
+            Py_DECREF(pargs);
+        } else {
+            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
+                return NULL;
+            PyErr_Clear();
+            ns = PyDict_New();
         }
-        return (unsigned short)val;
+    } else {
+        ns = PyDict_New();
     }
-    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
+    if (unlikely(!ns))
+        return NULL;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
+    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
+    return ns;
+bad:
+    Py_DECREF(ns);
+    return NULL;
 }
-
-static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
-    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned int" :
-                    "value too large to convert to unsigned int");
-            }
-            return (unsigned int)-1;
+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;
         }
-        return (unsigned int)val;
     }
-    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
+    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 CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
-    const char neg_one = (char)-1, const_zero = 0;
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
-    if (sizeof(char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to char" :
-                    "value too large to convert to char");
-            }
-            return (char)-1;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
-        return (char)val;
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
     }
-    return (char)__Pyx_PyInt_AsLong(x);
 }
 
-static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
-    const short neg_one = (short)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to short" :
-                    "value too large to convert to short");
-            }
-            return (short)-1;
-        }
-        return (short)val;
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func)             \
+    {                                                                     \
+        func_type value = func(x);                                        \
+        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;                                  \
+            }                                                             \
+        }                                                                 \
+        return (target_type) value;                                       \
     }
-    return (short)__Pyx_PyInt_AsLong(x);
-}
 
-static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
-    const int neg_one = (int)-1, const_zero = 0;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #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 (sizeof(int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG)
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to int" :
-                    "value too large to convert to int");
+                                "can't convert negative value to int");
+                return (int) -1;
             }
-            return (int)-1;
+            return (int) val;
         }
-        return (int)val;
-    }
-    return (int)__Pyx_PyInt_AsLong(x);
-}
-
-static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
-    const signed char neg_one = (signed char)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(signed char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (int) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+ #endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed char" :
-                    "value too large to convert to signed char");
+                                "can't convert negative value to int");
+                return (int) -1;
+            }
+            if (sizeof(int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(int) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong)
+            }
+        } 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];
+                }
+            }
+ #endif
+#endif
+            if (sizeof(int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong)
+            } else if (sizeof(int) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
             }
-            return (signed char)-1;
+#endif
+            return (int) -1;
         }
-        return (signed char)val;
+    } else {
+        int val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (int) -1;
+        val = __Pyx_PyInt_As_int(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return (signed char)__Pyx_PyInt_AsSignedLong(x);
 }
 
-static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
-    const signed short neg_one = (signed short)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(signed short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed short" :
-                    "value too large to convert to signed short");
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    #if PY_VERSION_HEX >= 0x02050000
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
             }
-            return (signed short)-1;
+            level = 0; /* try absolute import on failure */
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
         }
-        return (signed short)val;
     }
-    return (signed short)__Pyx_PyInt_AsSignedLong(x);
+    #else
+    if (level>0) {
+        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
+        goto bad;
+    }
+    module = PyObject_CallFunctionObjArgs(py_import,
+        name, global_dict, empty_dict, list, NULL);
+    #endif
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
 }
 
-static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
-    const signed int neg_one = (signed int)-1, const_zero = 0;
+#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 (sizeof(signed int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+#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)
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed int" :
-                    "value too large to convert to signed int");
+                                "can't convert negative value to MPI_Comm");
+                return (MPI_Comm) -1;
             }
-            return (signed int)-1;
+            return (MPI_Comm) val;
         }
-        return (signed int)val;
-    }
-    return (signed int)__Pyx_PyInt_AsSignedLong(x);
-}
-
-static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
-    const int neg_one = (int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(MPI_Comm)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (MPI_Comm) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+ #endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to int" :
-                    "value too large to convert to int");
+                                "can't convert negative value to MPI_Comm");
+                return (MPI_Comm) -1;
+            }
+            if (sizeof(MPI_Comm) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(MPI_Comm) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, unsigned long long, PyLong_AsUnsignedLongLong)
+            }
+        } 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];
+                }
+            }
+ #endif
+#endif
+            if (sizeof(MPI_Comm) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, long, PyLong_AsLong)
+            } else if (sizeof(MPI_Comm) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(MPI_Comm, long long, PyLong_AsLongLong)
             }
-            return (int)-1;
         }
-        return (int)val;
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            MPI_Comm val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (MPI_Comm) -1;
+        }
+    } else {
+        MPI_Comm val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (MPI_Comm) -1;
+        val = __Pyx_PyInt_As_MPI_Comm(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return (int)__Pyx_PyInt_AsLong(x);
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
-    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
+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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to unsigned long");
-            return (unsigned long)-1;
+        if (sizeof(int64_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (int64_t) val;
         }
-        return (unsigned long)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned long)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return (int64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to unsigned long");
-                return (unsigned long)-1;
+                                "can't convert negative value to int64_t");
+                return (int64_t) -1;
+            }
+            if (sizeof(int64_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (unsigned long)PyLong_AsUnsignedLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned long)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return +(int64_t) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(int64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
 #endif
+            if (sizeof(int64_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong)
+            } else if (sizeof(int64_t) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int64_t val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-            return (unsigned long)PyLong_AsLong(x);
+            return (int64_t) -1;
         }
     } else {
-        unsigned long val;
+        int64_t val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (unsigned long)-1;
-        val = __Pyx_PyInt_AsUnsignedLong(tmp);
+        if (!tmp) return (int64_t) -1;
+        val = __Pyx_PyInt_As_int64_t(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
-    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
+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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to unsigned PY_LONG_LONG");
-            return (unsigned PY_LONG_LONG)-1;
+        if (sizeof(uint64_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (uint64_t) val;
         }
-        return (unsigned PY_LONG_LONG)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(uint64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return (uint64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to unsigned PY_LONG_LONG");
-                return (unsigned PY_LONG_LONG)-1;
+                                "can't convert negative value to uint64_t");
+                return (uint64_t) -1;
+            }
+            if (sizeof(uint64_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(uint64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return +(uint64_t) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(uint64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
+#endif
+            if (sizeof(uint64_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong)
+            } else if (sizeof(uint64_t) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            uint64_t val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-#endif
-            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
+            return (uint64_t) -1;
         }
     } else {
-        unsigned PY_LONG_LONG val;
+        uint64_t val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (unsigned PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
+        if (!tmp) return (uint64_t) -1;
+        val = __Pyx_PyInt_As_uint64_t(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
-    const long neg_one = (long)-1, const_zero = 0;
+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))) {
-        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;
+        if (sizeof(long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (long) val;
         }
-        return (long)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
+ #if CYTHON_USE_PYLONG_INTERNALS
             if (sizeof(digit) <= sizeof(long)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
                     case  1: return (long) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
                                 "can't convert negative value to long");
-                return (long)-1;
+                return (long) -1;
+            }
+            if (sizeof(long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(long) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (long)PyLong_AsUnsignedLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
+ #if CYTHON_USE_PYLONG_INTERNALS
             if (sizeof(digit) <= sizeof(long)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
@@ -15649,202 +14153,535 @@ static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
                     case -1: return -(long) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
 #endif
+            if (sizeof(long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong)
+            } else if (sizeof(long) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            long val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-            return (long)PyLong_AsLong(x);
+            return (long) -1;
         }
     } else {
         long val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (long)-1;
-        val = __Pyx_PyInt_AsLong(tmp);
+        if (!tmp) return (long) -1;
+        val = __Pyx_PyInt_As_long(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
-#endif
-static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
-    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
+    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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to PY_LONG_LONG");
-            return (PY_LONG_LONG)-1;
+    if (is_unsigned) {
+        if (sizeof(int64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
-        return (PY_LONG_LONG)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+    } else {
+        if (sizeof(int64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static PyObject *__Pyx_GetStdout(void) {
+    PyObject *f = PySys_GetObject((char *)"stdout");
+    if (!f) {
+        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+    }
+    return f;
+}
+static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
+    int i;
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
+        PyObject* v;
+        if (PyFile_SoftSpace(f, 1)) {
+            if (PyFile_WriteString(" ", f) < 0)
+                goto error;
+        }
+        v = PyTuple_GET_ITEM(arg_tuple, i);
+        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
+            goto error;
+        if (PyString_Check(v)) {
+            char *s = PyString_AsString(v);
+            Py_ssize_t len = PyString_Size(v);
+            if (len > 0) {
+                switch (s[len-1]) {
+                    case ' ': break;
+                    case '\f': case '\r': case '\n': case '\t': case '\v':
+                        PyFile_SoftSpace(f, 0);
+                        break;
+                    default:  break;
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to PY_LONG_LONG");
-                return (PY_LONG_LONG)-1;
+        }
+    }
+    if (newline) {
+        if (PyFile_WriteString("\n", f) < 0)
+            goto error;
+        PyFile_SoftSpace(f, 0);
+    }
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+}
+#else /* Python 3 has a print function */
+static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
+    PyObject* kwargs = 0;
+    PyObject* result = 0;
+    PyObject* end_string;
+    if (unlikely(!__pyx_print)) {
+        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print);
+        if (!__pyx_print)
+            return -1;
+    }
+    if (stream) {
+        kwargs = PyDict_New();
+        if (unlikely(!kwargs))
+            return -1;
+        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0))
+            goto bad;
+        if (!newline) {
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                goto bad;
+            if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) {
+                Py_DECREF(end_string);
+                goto bad;
             }
-            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                }
+            Py_DECREF(end_string);
+        }
+    } else if (!newline) {
+        if (unlikely(!__pyx_print_kwargs)) {
+            __pyx_print_kwargs = PyDict_New();
+            if (unlikely(!__pyx_print_kwargs))
+                return -1;
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                return -1;
+            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) {
+                Py_DECREF(end_string);
+                return -1;
             }
+            Py_DECREF(end_string);
+        }
+        kwargs = __pyx_print_kwargs;
+    }
+    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
+    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
+        Py_DECREF(kwargs);
+    if (!result)
+        return -1;
+    Py_DECREF(result);
+    return 0;
+bad:
+    if (kwargs != __pyx_print_kwargs)
+        Py_XDECREF(kwargs);
+    return -1;
+}
 #endif
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
+    const uint64_t neg_one = (uint64_t) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(uint64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
+        }
+    } else {
+        if (sizeof(uint64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint64_t) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    if (PyFile_SoftSpace(f, 0)) {
+        if (PyFile_WriteString(" ", f) < 0)
+            goto error;
+    }
+    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString("\n", f) < 0)
+        goto error;
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+    /* the line below is just to avoid C compiler
+     * warnings about unused functions */
+    return __Pyx_Print(f, NULL, 0);
+}
+#else /* Python 3 has a print function */
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
+    int res;
+    PyObject* arg_tuple = PyTuple_Pack(1, o);
+    if (unlikely(!arg_tuple))
+        return -1;
+    res = __Pyx_Print(stream, arg_tuple, 1);
+    Py_DECREF(arg_tuple);
+    return res;
+}
 #endif
-            return (PY_LONG_LONG)PyLong_AsLongLong(x);
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    const long neg_one = (long) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
     } else {
-        PY_LONG_LONG val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsLongLong(tmp);
-        Py_DECREF(tmp);
-        return val;
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+    const unsigned long neg_one = (unsigned long) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
+        }
+    } else {
+        if (sizeof(unsigned long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
+                                     little, !is_unsigned);
+    }
+}
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return ::std::complex< float >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return x + y*(__pyx_t_float_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      __pyx_t_float_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
+#endif
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        float denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
     }
-}
-
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
-#endif
-static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
-    const signed long neg_one = (signed long)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-#if PY_MAJOR_VERSION < 3
-    if (likely(PyInt_Check(x))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to signed long");
-            return (signed long)-1;
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrtf(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypotf(z.real, z.imag);
+          #endif
         }
-        return (signed long)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed long)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (signed long) ((PyLongObject*)x)->ob_digit[0];
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+            __pyx_t_float_complex z;
+            float r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    float denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(a, a);
+                    case 3:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, a);
+                    case 4:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, z);
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to signed long");
-                return (signed long)-1;
-            }
-            return (signed long)PyLong_AsUnsignedLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed long)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(signed long) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0];
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
                 }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_absf(a);
+                theta = atan2f(a.imag, a.real);
             }
-#endif
-#endif
-            return (signed long)PyLong_AsLong(x);
+            lnr = logf(r);
+            z_r = expf(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cosf(z_theta);
+            z.imag = z_r * sinf(z_theta);
+            return z;
         }
-    } else {
-        signed long val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (signed long)-1;
-        val = __Pyx_PyInt_AsSignedLong(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-}
-
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
+    #endif
 #endif
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return ::std::complex< double >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return x + y*(__pyx_t_double_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      __pyx_t_double_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
 #endif
-static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
-    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-#if PY_MAJOR_VERSION < 3
-    if (likely(PyInt_Check(x))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to signed PY_LONG_LONG");
-            return (signed PY_LONG_LONG)-1;
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        double denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrt(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypot(z.real, z.imag);
+          #endif
         }
-        return (signed PY_LONG_LONG)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+            __pyx_t_double_complex z;
+            double r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    double denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(a, a);
+                    case 3:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, a);
+                    case 4:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, z);
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to signed PY_LONG_LONG");
-                return (signed PY_LONG_LONG)-1;
-            }
-            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
                 }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_abs(a);
+                theta = atan2(a.imag, a.real);
             }
-#endif
-#endif
-            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
+            lnr = log(r);
+            z_r = exp(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cos(z_theta);
+            z.imag = z_r * sin(z_theta);
+            return z;
         }
-    } else {
-        signed PY_LONG_LONG val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (signed PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsSignedLongLong(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-}
+    #endif
+#endif
 
 static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
@@ -15910,7 +14747,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
         goto bad;
     if (!PyType_Check(result)) {
         PyErr_Format(PyExc_TypeError,
-            "%s.%s is not a type object",
+            "%.200s.%.200s is not a type object",
             module_name, class_name);
         goto bad;
     }
@@ -15938,7 +14775,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
     }
     else if ((size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
-            "%s.%s has the wrong size, try recompiling",
+            "%.200s.%.200s has the wrong size, try recompiling",
             module_name, class_name);
         goto bad;
     }
@@ -16191,10 +15028,18 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif /* PY_VERSION_HEX < 0x03030000 */
     } else
 #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#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);
-        if (r < 0) {
+        if (unlikely(r < 0)) {
             return NULL;
         } else {
             return result;
@@ -16239,7 +15084,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
     if (!PyLong_Check(res)) {
 #endif
       PyErr_Format(PyExc_TypeError,
-                   "__%s__ returned non-%s (type %.200s)",
+                   "__%.4s__ returned non-%.4s (type %.200s)",
                    name, name, Py_TYPE(res)->tp_name);
       Py_DECREF(res);
       return NULL;
@@ -16251,9 +15096,35 @@ 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 = PyNumber_Index(b);
+  PyObject *x;
+#if PY_MAJOR_VERSION < 3
+  if (likely(PyInt_CheckExact(b)))
+      return PyInt_AS_LONG(b);
+#endif
+  if (likely(PyLong_CheckExact(b))) {
+    #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+     #if CYTHON_USE_PYLONG_INTERNALS
+       switch (Py_SIZE(b)) {
+       case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0];
+       case  0: return 0;
+       case  1: return ((PyLongObject*)b)->ob_digit[0];
+       }
+     #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;
   ival = PyInt_AsSsize_t(x);
   Py_DECREF(x);
@@ -16272,16 +15143,6 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
 #endif
 }
-static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
-   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
-   if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
-       if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred())
-           PyErr_SetString(PyExc_OverflowError,
-                           "value too large to convert to size_t");
-       return (size_t)-1;
-   }
-   return (size_t)val;
-}
 
 
 #endif /* Py_PYTHON_H */
diff --git a/wrappers/numpy/adios.pyx b/wrappers/numpy/adios.pyx
index 7e6b2e9..691b50a 100644
--- a/wrappers/numpy/adios.pyx
+++ b/wrappers/numpy/adios.pyx
@@ -4,19 +4,25 @@
 
  Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
 """
+"""
+ This is a cython file. To generate a CPP file, use the following command:
+ $ cython --cplus adios.pyx
+"""
 
 import numpy as np
 cimport numpy as np
 
-import mpi4py.MPI as MPI 
-cimport mpi4py.MPI as MPI
+
+## This is a serial version of Adios. No use of MPI.
+##import mpi4py.MPI as MPI 
+##cimport mpi4py.MPI as MPI
 
 import cython
 cimport cython
 
-## ==========
+## ====================
 ## ADIOS Exported Functions
-## ==========
+## ====================
 
 from libc.stdint cimport uint32_t, int64_t, uint64_t
 from libc.stdlib cimport malloc, free
@@ -48,8 +54,8 @@ cdef extern from "adios_types.h":
         pass
 
 cdef extern from "adios.h":
-    ctypedef struct MPI_Comm:
-        pass
+    ctypedef int MPI_Comm
+    int MPI_COMM_WORLD
 
     ctypedef char* const_char_ptr "const char*"
 
@@ -61,7 +67,7 @@ cdef extern from "adios.h":
                          char * group_name,
                          char * name, 
                          char * mode,
-                         void * comm)
+                         MPI_Comm comm)
     
     cdef int adios_group_size (int64_t fd_p,
                                uint64_t data_size,
@@ -108,76 +114,115 @@ cdef extern from "adios.h":
                                   char * parameters,
                                   char * base_path)
 
+cdef extern from "adios_selection.h":
+    ctypedef enum ADIOS_SELECTION_TYPE:
+        ADIOS_SELECTION_BOUNDINGBOX
+        ADIOS_SELECTION_POINTS
+        ADIOS_SELECTION_WRITEBLOCK
+        ADIOS_SELECTION_AUTO
+
+    ctypedef struct ADIOS_SELECTION_BOUNDINGBOX_STRUCT:
+        int       ndim
+        uint64_t *start
+        uint64_t *count
+
+    ctypedef struct ADIOS_SELECTION_POINTS_STRUCT:
+        pass
+
+    ctypedef struct ADIOS_SELECTION_WRITEBLOCK_STRUCT:
+        pass
+    
+    ctypedef struct ADIOS_SELECTION_AUTO_STRUCT:
+        pass
+
+    cdef union ADIOS_SELECTION_UNION:
+        ADIOS_SELECTION_BOUNDINGBOX_STRUCT bb
+        ADIOS_SELECTION_POINTS_STRUCT points
+        ADIOS_SELECTION_WRITEBLOCK_STRUCT block
+        ADIOS_SELECTION_AUTO_STRUCT autosel
+
+    ctypedef struct ADIOS_SELECTION:
+        ADIOS_SELECTION_TYPE    type
+        ADIOS_SELECTION_UNION   u
+
+    cdef ADIOS_SELECTION * adios_selection_boundingbox (int ndim,
+                                                        const uint64_t *start,
+                                                        const uint64_t *count)
+
 cdef extern from "adios_read.h":
-    ctypedef struct MPI_Comm:
+    ctypedef enum ADIOS_READ_METHOD:
+        ADIOS_READ_METHOD_BP
+        ADIOS_READ_METHOD_BP_AGGREGATE
         pass
 
+    ctypedef enum ADIOS_LOCKMODE:
+        ADIOS_LOCKMODE_NONE
+        ADIOS_LOCKMODE_CURRENT
+        ADIOS_LOCKMODE_ALL
+
     ctypedef struct ADIOS_FILE:
-        uint64_t fh
-        int      groups_count
-        int      vars_count
-        int      attrs_count
-        int      tidx_start
-        int      ntimesteps
-        int      version
+        uint64_t fh               
+        int      nvars            
+        char     ** var_namelist  
+        int      nattrs           
+        char     ** attr_namelist 
+        int      nmeshes          
+        char     ** mesh_namelist 
+        int      current_step     
+        int      last_step        
+        char     *path            
+        int      endianness       
+        int      version          
         uint64_t file_size
-        int      endianness
-        char     ** group_namelist
-        void     * internal_data
-
-    ctypedef struct ADIOS_GROUP:
-        uint64_t gh
-        int      grpid
-        int      vars_count
-        char     ** var_namelist
-        int      attrs_count
-        char     ** attr_namelist
-        ADIOS_FILE * fp
-        int      timestep
-        int      lasttimestep
 
     ctypedef struct ADIOS_VARINFO:
-        int        grpid
         int        varid
-        ADIOS_DATATYPES   type
-        int        ndim
-        uint64_t * dims
-        int        timedim
-        int        characteristics_count
-        void     * value
-        void     * gmin
-        void     * gmax
-        double   * gavg
-        double   * gstd_dev
-        void     ** mins
-        void     ** maxs
-        double   ** avgs
-        double   ** std_devs
-
-
-    cdef ADIOS_FILE * adios_fopen (char *, MPI_Comm)
-    cdef int adios_fclose (ADIOS_FILE *)
-
-    cdef ADIOS_GROUP * adios_gopen (ADIOS_FILE *, char *)
-    cdef ADIOS_GROUP * adios_gopen_byid (ADIOS_FILE *, int)
-    cdef int adios_gclose (ADIOS_GROUP *)
-
-    cdef ADIOS_VARINFO * adios_inq_var (ADIOS_GROUP *, char *)
-    cdef ADIOS_VARINFO * adios_inq_var_byid (ADIOS_GROUP *, int)
-    cdef void adios_free_varinfo(ADIOS_VARINFO *)
-    cdef int64_t adios_read_var_byid (ADIOS_GROUP *, int,
-                             uint64_t *, uint64_t *,
-                             void *)
-
-    cdef char * adios_errmsg()
-    cdef int adios_errno
-
-
-## ==========
-## ADIOS Enum
-## ==========
-
-class DATATYPE(object):
+        ADIOS_DATATYPES type  
+        int        ndim       
+        uint64_t * dims       
+        int        nsteps     
+        void     * value      
+        int      * nblocks    
+        int        sum_nblocks
+
+    cdef int adios_read_init_method (ADIOS_READ_METHOD method, 
+                                     MPI_Comm comm, 
+                                     char * parameters)
+    cdef int adios_read_finalize_method(ADIOS_READ_METHOD method)
+    cdef ADIOS_FILE * adios_read_open (const char * fname, 
+                                       ADIOS_READ_METHOD method, 
+                                       MPI_Comm comm, 
+                                       ADIOS_LOCKMODE lock_mode,
+                                       float timeout_sec)
+    cdef ADIOS_FILE * adios_read_open_file (const char * fname, 
+                                            ADIOS_READ_METHOD method, 
+                                            MPI_Comm comm)
+    cdef int adios_read_close (ADIOS_FILE *fp)
+    cdef int adios_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
+    cdef void adios_release_step (ADIOS_FILE *fp)
+    cdef ADIOS_VARINFO * adios_inq_var (ADIOS_FILE *fp, const char * varname)
+    cdef ADIOS_VARINFO * adios_inq_var_byid (ADIOS_FILE *fp, int varid)
+    cdef void adios_free_varinfo (ADIOS_VARINFO *cp)
+    cdef int adios_schedule_read (const ADIOS_FILE * fp,
+                                  const ADIOS_SELECTION * sel,
+                                  const char * varname,
+                                  int from_steps,
+                                  int nsteps,
+                                  void * data)
+    cdef int adios_schedule_read_byid (const ADIOS_FILE * fp, 
+                                       const ADIOS_SELECTION * sel,
+                                       int varid,
+                                       int from_steps,
+                                       int nsteps,
+                                       void * data)
+    cdef int adios_perform_reads (const ADIOS_FILE *fp, int blocking)
+
+
+## ====================
+## ADIOS Enum (public)
+## ====================
+
+class DATATYPE:
     unknown = -1
     byte = 0
     short = 1
@@ -194,30 +239,30 @@ class DATATYPE(object):
     complex = 10
     double_complex = 11
 
-class FLAG(object):
+class FLAG:
     UNKNOWN = 0
     YES = 1
     NO = 2
     
-class BUFFER_ALLOC_WHEN(object):
+class BUFFER_ALLOC_WHEN:
     UNKNOWN = 0
     NOW = 1
     LATER = 2
     
-## ==========
+## ====================
 ## ADIOS Write API
-## ==========
+## ====================
 
-cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
-    return adios_init(config, comm.ob_mpi)
+cpdef init(char * config, MPI_Comm comm = MPI_COMM_WORLD):
+    return adios_init(config, comm)
 
 cpdef int64_t open(char * group_name,
                    char * name,
                    char * mode,
-                   MPI.Comm comm = MPI.COMM_WORLD):
+                   MPI_Comm comm = MPI_COMM_WORLD):
     cdef int64_t fd
     cdef int result
-    result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)
+    result = adios_open(&fd, group_name, name, mode, comm)
     return fd
 
 cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):
@@ -255,11 +300,11 @@ cpdef int close(int64_t fd_p):
 cpdef finalize(int mype = 0):
     return adios_finalize(mype)
 
-## ==========
+## ====================
 ## ADIOS No-XML API
-## ==========
-cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
-    return adios_init_noxml(comm.ob_mpi)
+## ====================
+cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):
+    return adios_init_noxml(comm)
 
 cpdef int allocate_buffer(int when,
                           uint64_t buffer_size):
@@ -313,11 +358,11 @@ cpdef int select_method (int64_t group,
                                 base_path)
 
 
-## ==========
-## ADIOS Read API
-## ==========
+## ====================
+## ADIOS Read API (V2)
+## ====================
 
-cpdef type adios2nptype(ADIOS_DATATYPES t):
+cdef type adios2nptype(ADIOS_DATATYPES t):
     cdef type ntype = None
     if t == adios_byte:
         ntype = np.int8
@@ -350,185 +395,95 @@ cpdef type adios2nptype(ADIOS_DATATYPES t):
 
     return ntype
 
-"""
-cpdef int np2adiostype(np.dtype t):
-    cdef int atype = -1
-    if t.type == np.float64:
-        atype = DATATYPE.double
-    else:
-        atype = -1
-
-    return atype
-"""
-
-cdef printAdiosFile(ADIOS_FILE * f):
+cdef printfile(ADIOS_FILE * f):
     print '%15s : %lu' % ('fh', f.fh)
-    print '%15s : %d' % ('groups_count', f.groups_count)
-    print '%15s : %d' % ('vars_count', f.vars_count)
-    print '%15s : %d' % ('attrs_count', f.attrs_count)      
-    print '%15s : %d' % ('tidx_start', f.tidx_start)       
-    print '%15s : %d' % ('ntimesteps', f.ntimesteps)       
-    print '%15s : %d' % ('version', f.version)          
+    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)       
+    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)
-    print '%15s : %d' % ('endianness', f.endianness)
-    print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
-
-cdef printAdiosGroup(ADIOS_GROUP * g):
-    print '%15s : %lu' % ('gh', g.gh)
-    print '%15s : %d' % ('grpid', g.grpid)
-    print '%15s : %d' % ('vars_count', g.vars_count)
-    print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
-    print '%15s : %d' % ('attrs_count', g.attrs_count)      
-    print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
-    print '%15s : %lu' % ('fp', <unsigned long> g.fp)
-
-cdef printAdiosVariable(ADIOS_VARINFO * v):
-    print '%15s : %d' % ('grpid', v.grpid)
+
+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)])
-    print '%15s : %d' % ('timedim', v.timedim)
+    print '%15s : %d' % ('nsteps', v.nsteps)
 
-cdef adios2scalar(ADIOS_DATATYPES t, void * val):
-    if t == adios_byte :
-        return (<char *> val)[0]
-    elif t == adios_short:
-        return (<short *> val)[0]
-    elif t == adios_integer:
-        return (<int *> val)[0]
-    elif t == adios_long:
-        return (<long *> val)[0]
-    elif t == adios_unsigned_byte:
-        return (<unsigned char *> val)[0]
-    elif t == adios_unsigned_short:
-        return (<unsigned short *> val)[0]
-    elif t == adios_unsigned_integer:
-        return (<unsigned int *> val)[0]
-    elif t == adios_unsigned_long:
-        return (<unsigned long *> val)[0]
-    elif t == adios_real:
-        return (<float *> val)[0]
-    elif t == adios_double:
-        return (<double *> val)[0]
-    elif t == adios_long_double:
-        return (<long double *> val)[0]
-    else:
-        return None
+## ====================
+## ADIOS Class Definitions for Read
+## ====================
 
-## ==========
-## ADIOS Class Definition
-## ==========
-    
-cdef class AdiosFile:
+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)
+
+
+cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+    return adios_read_finalize_method (method)
+
+cdef class file:
     """ Private Memeber """
     cpdef ADIOS_FILE * fp
 
     """ Public Memeber """
     cpdef public bytes name
-    cpdef public int groups_count
-    cpdef public int vars_count
-    cpdef public int attrs_count
-    cpdef public int tidx_start
-    cpdef public int ntimesteps
+    cpdef public int nvars
+    cpdef public int nattrs
+    cpdef public int current_step
+    cpdef public int last_step
+    cpdef public int endianness
     cpdef public int version
     cpdef public int file_size
-    cpdef public int endianness
-    
-    cpdef public dict group
     
-    def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+    cpdef public dict var
+    cpdef public dict attr
+
+    def __init__(self, char * fname,
+                 ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+                 MPI_Comm comm = MPI_COMM_WORLD):
         self.fp = NULL
-        self.group = {}
-        
-        self.fp = adios_fopen(fname, comm.ob_mpi)
+        self.var = {}
+        self.attr = {}
+
+        self.fp = adios_read_open_file(fname, method, comm)
         assert self.fp != NULL, 'Not an open file'
 
-        self.name         = fname.split('/')[-1]  ## basename
-        self.groups_count = self.fp.groups_count
-        self.vars_count   = self.fp.vars_count  
-        self.attrs_count  = self.fp.attrs_count 
-        self.tidx_start   = self.fp.tidx_start  
-        self.ntimesteps   = self.fp.ntimesteps  
-        self.version      = self.fp.version     
-        self.file_size    = self.fp.file_size   
-        self.endianness   = self.fp.endianness  
+        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
+        self.endianness = self.fp.endianness  
+        self.version = self.fp.version     
+        self.file_size = self.fp.file_size   
     
-        cdef AdiosGroup g
-        for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
-            g = AdiosGroup(self, grpname)
-            self.group[grpname] = g
+        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()
+            self.close()
             
     cpdef close(self):
         assert self.fp != NULL, 'Not an open file'
-        for g in self.group.values():
-            g.close()
-        adios_fclose(self.fp)
+        adios_read_close(self.fp)
         self.fp = NULL
         
     cpdef printself(self):
         assert self.fp != NULL, 'Not an open file'
         print '=== AdiosFile ==='
         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
-        printAdiosFile(self.fp)
-
+        printfile(self.fp)
 
-cdef class AdiosGroup:
+cdef class var:
     """ Private Memeber """
-    cdef AdiosFile file
-    cdef ADIOS_GROUP * gp
-
-    """ Public Memeber """
-    cpdef public bytes name
-    cpdef public int grpid
-    cpdef public int vars_count
-    cpdef public int attrs_count
-    cpdef public int timestep
-    cpdef public int lasttimestep
-    
-    cpdef public dict var
-    
-    def __init__(self, AdiosFile file, char * name):
-        self.file = file
-        self.var = {}
-        
-        self.gp = adios_gopen(self.file.fp, name)
-        assert self.gp != NULL, 'Not an open group'
-
-        self.name         = name
-        self.grpid        = self.gp.grpid        
-        self.vars_count   = self.gp.vars_count   
-        self.attrs_count  = self.gp.attrs_count  
-        self.timestep     = self.gp.timestep     
-        self.lasttimestep = self.gp.lasttimestep 
-        
-        cdef AdiosVariable v
-        for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
-            v = AdiosVariable(self, varname)
-            self.var[varname] = v
-
-    def __del__(self):
-        self.close()
-
-    cpdef close(self):
-        assert self.gp != NULL, 'Not an open file'
-        for v in self.var.values():
-            v.close()
-        adios_gclose(self.gp)
-        self.gp = NULL
-        
-    cpdef printself(self):
-        assert self.gp != NULL, 'Not an open file'
-        print '=== AdiosGroup ==='
-        print '%15s : %lu' % ('gp', <unsigned long> self.gp)
-        printAdiosGroup(self.gp)
-        
-cdef class AdiosVariable:
-    """ Private Memeber """
-    cdef AdiosGroup group
+    cdef file file
     cdef ADIOS_VARINFO * vp
 
     """ Public Memeber """
@@ -537,36 +492,34 @@ cdef class AdiosVariable:
     cpdef public type type
     cpdef public int ndim
     cpdef public tuple dims
-    cpdef public int timedim
-    cpdef public int characteristics_count
-    
-    def __init__(self, AdiosGroup group, char * name):
-        self.group = group
+    cpdef public int nsteps
+
+    def __init__(self, file file, char * name):
+        self.file = file
         self.vp = NULL
 
-        self.vp = adios_inq_var(self.group.gp, name)
-        assert self.group.gp != NULL, 'Not an open group'
+        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'
 
-        self.name                  = name
-        self.varid                 = self.vp.varid                
-        self.type                  = adios2nptype(self.vp.type)
-        self.ndim                  = self.vp.ndim                 
-        self.timedim               = self.vp.timedim              
-        self.characteristics_count = self.vp.characteristics_count
-        
+        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)])
+        self.nsteps = self.vp.nsteps
         
     def __del__(self):
         self.close()
 
     cpdef close(self):
-        assert self.vp != NULL, 'Not an open file'
+        assert self.vp != NULL, 'Not an open var'
         adios_free_varinfo(self.vp)
         self.vp = NULL
-        
-    cpdef read(self, tuple offset = (), tuple count = ()):
-        cdef type ntype = adios2nptype(self.vp.type)
-        assert ntype is not None, 'Data type is not supported yet'
+
+    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'
         
         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
@@ -586,25 +539,48 @@ cdef class AdiosVariable:
 
         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.'
+        assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
 
-        cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
-        cdef int64_t nbytes = adios_read_var_byid(
-            self.group.gp, 
-            self.vp.varid, 
-            <uint64_t *> npoffset.data, 
-            <uint64_t *> npcount.data, 
-            <void *> var.data
-            )
+        shape = list(npcount)
+        if (nsteps > 1):
+            shape.insert(0, nsteps)
+        cdef np.ndarray var = np.zeros(shape, dtype=self.type)
 
-        if nbytes < 0:
-            print "[WARNING] bytes read :", nbytes
+        cdef ADIOS_SELECTION * sel
+        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)
 
         return var
 
     """ Print self """
     cpdef printself(self):
-        assert self.vp != NULL, 'Not an open file'
+        assert self.vp != NULL, 'Not an open variable'
         print '=== AdiosVariable ==='
         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
-        printAdiosVariable(self.vp)
+        print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
+        printvar(self.vp)
+
+## ====================
+## ADIOS Global functions
+## ====================
+
+def readvar(fname, varname):
+    f = file(fname)
+    if not f.var.has_key(varname):
+        print "No valid variable"
+        return
+
+    v = f.var[varname]
+    return v.read(from_steps=0, nsteps=v.nsteps)
+
+def bpls(fname):
+    f = file(fname)
+    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.cpp b/wrappers/numpy/adios_mpi.cpp
similarity index 51%
copy from wrappers/numpy/adios.cpp
copy to wrappers/numpy/adios_mpi.cpp
index 40270c0..8bece82 100644
--- a/wrappers/numpy/adios.cpp
+++ b/wrappers/numpy/adios_mpi.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.19.1 on Tue Jul 16 14:56:11 2013 */
+/* Generated by Cython 0.20.1 on Tue May 27 13:00:55 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -19,6 +19,7 @@
 #elif PY_VERSION_HEX < 0x02040000
     #error Cython requires Python 2.4+.
 #else
+#define CYTHON_ABI "0_20_1"
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -53,6 +54,9 @@
 #define CYTHON_COMPILING_IN_PYPY 0
 #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
+#if CYTHON_COMPILING_IN_PYPY
+#define Py_OptimizeFlag 0
+#endif
 #if PY_VERSION_HEX < 0x02050000
   typedef int Py_ssize_t;
   #define PY_SSIZE_T_MAX INT_MAX
@@ -60,7 +64,7 @@
   #define PY_FORMAT_SIZE_T ""
   #define CYTHON_FORMAT_SSIZE_T ""
   #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
-  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
+  #define 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), \
@@ -112,13 +116,15 @@
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
 #endif
-#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
+#if PY_VERSION_HEX < 0x02060000
   #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
 #endif
 #if PY_MAJOR_VERSION >= 3
@@ -131,19 +137,44 @@
 #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
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
+  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
 #else
   #define CYTHON_PEP393_ENABLED 0
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
-  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
+  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+#endif
+#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)
+#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))
+#endif
+#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)
+#else
+  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
@@ -176,7 +207,7 @@
 #else
   #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \
                                          PyString_Check(obj) || PyUnicode_Check(obj))
-  #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type)
+  #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)
@@ -201,11 +232,12 @@
   #define PyInt_AsSsize_t              PyLong_AsSsize_t
   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define PyNumber_Int                 PyNumber_Long
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
-#if PY_VERSION_HEX < 0x03020000
+#if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
@@ -264,7 +296,7 @@
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
     #define CYTHON_RESTRICT __restrict__
-  #elif defined(_MSC_VER)
+  #elif defined(_MSC_VER) && _MSC_VER >= 1400
     #define CYTHON_RESTRICT __restrict
   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     #define CYTHON_RESTRICT restrict
@@ -306,8 +338,8 @@ static CYTHON_INLINE float __PYX_NAN() {
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__adios
-#define __PYX_HAVE_API__adios
+#define __PYX_HAVE__adios_mpi
+#define __PYX_HAVE_API__adios_mpi
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -317,6 +349,7 @@ static CYTHON_INLINE float __PYX_NAN() {
 #include "stdint.h"
 #include "adios_types.h"
 #include "adios.h"
+#include "adios_selection.h"
 #include "adios_read.h"
 #ifdef _OPENMP
 #include <omp.h>
@@ -347,8 +380,20 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
 #define __PYX_DEFAULT_STRING_ENCODING ""
 #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
 #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (    \
+    (sizeof(type) < sizeof(Py_ssize_t))  ||             \
+    (sizeof(type) > sizeof(Py_ssize_t) &&               \
+          likely(v < (type)PY_SSIZE_T_MAX ||            \
+                 v == (type)PY_SSIZE_T_MAX)  &&         \
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||       \
+                                v == (type)PY_SSIZE_T_MIN)))  ||  \
+    (sizeof(type) == sizeof(Py_ssize_t) &&              \
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||        \
+                               v == (type)PY_SSIZE_T_MAX)))  )
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*);
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#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*);
@@ -359,9 +404,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
     #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
 #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)
 #if PY_MAJOR_VERSION < 3
@@ -383,7 +430,6 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
-static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
 #if CYTHON_COMPILING_IN_CPYTHON
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
@@ -392,7 +438,7 @@ static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
 static int __Pyx_sys_getdefaultencoding_not_ascii;
-static int __Pyx_init_sys_getdefaultencoding_params() {
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
     PyObject* sys = NULL;
     PyObject* default_encoding = NULL;
     PyObject* ascii_chars_u = NULL;
@@ -417,7 +463,7 @@ static int __Pyx_init_sys_getdefaultencoding_params() {
         if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
             PyErr_Format(
                 PyExc_ValueError,
-                "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.",
+                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
                 default_encoding_c);
             goto bad;
         }
@@ -441,7 +487,7 @@ bad:
 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
 static char* __PYX_DEFAULT_STRING_ENCODING;
-static int __Pyx_init_sys_getdefaultencoding_params() {
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
     PyObject* sys = NULL;
     PyObject* default_encoding = NULL;
     char* default_encoding_c;
@@ -511,13 +557,13 @@ static const char *__pyx_filename;
 
 
 static const char *__pyx_f[] = {
-  "adios.pyx",
-  "numpy.pxd",
+  "adios_mpi.pyx",
+  "__init__.pxd",
   "type.pxd",
   "MPI.pxd",
 };
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -526,7 +572,7 @@ static const char *__pyx_f[] = {
  */
 typedef npy_int8 __pyx_t_5numpy_int8_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -535,7 +581,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t;
  */
 typedef npy_int16 __pyx_t_5numpy_int16_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -544,7 +590,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t;
  */
 typedef npy_int32 __pyx_t_5numpy_int32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -553,7 +599,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t;
  */
 typedef npy_int64 __pyx_t_5numpy_int64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -562,7 +608,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t;
  */
 typedef npy_uint8 __pyx_t_5numpy_uint8_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -571,7 +617,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t;
  */
 typedef npy_uint16 __pyx_t_5numpy_uint16_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -580,7 +626,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t;
  */
 typedef npy_uint32 __pyx_t_5numpy_uint32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -589,7 +635,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t;
  */
 typedef npy_uint64 __pyx_t_5numpy_uint64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -598,7 +644,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t;
  */
 typedef npy_float32 __pyx_t_5numpy_float32_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -607,7 +653,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t;
  */
 typedef npy_float64 __pyx_t_5numpy_float64_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -616,7 +662,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t;
  */
 typedef npy_long __pyx_t_5numpy_int_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -625,7 +671,7 @@ typedef npy_long __pyx_t_5numpy_int_t;
  */
 typedef npy_longlong __pyx_t_5numpy_long_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -634,7 +680,7 @@ typedef npy_longlong __pyx_t_5numpy_long_t;
  */
 typedef npy_longlong __pyx_t_5numpy_longlong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -643,7 +689,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t;
  */
 typedef npy_ulong __pyx_t_5numpy_uint_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -652,7 +698,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -661,7 +707,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
  */
 typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -670,7 +716,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
  */
 typedef npy_intp __pyx_t_5numpy_intp_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -679,7 +725,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t;
  */
 typedef npy_uintp __pyx_t_5numpy_uintp_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -688,7 +734,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t;
  */
 typedef npy_double __pyx_t_5numpy_float_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -697,7 +743,7 @@ typedef npy_double __pyx_t_5numpy_float_t;
  */
 typedef npy_double __pyx_t_5numpy_double_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -727,28 +773,27 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
 
 /*--- Type declarations ---*/
-struct PyMPIErrhandlerObject;
+struct PyMPIStatusObject;
+struct PyMPIDatatypeObject;
+struct PyMPIRequestObject;
+struct PyMPIPrequestObject;
+struct PyMPIGrequestObject;
+struct PyMPIOpObject;
 struct PyMPIGroupObject;
+struct PyMPIInfoObject;
+struct PyMPIErrhandlerObject;
 struct PyMPICommObject;
-struct PyMPIIntercommObject;
 struct PyMPIIntracommObject;
+struct PyMPICartcommObject;
+struct PyMPIGraphcommObject;
 struct PyMPIDistgraphcommObject;
-struct __pyx_obj_5adios_AdiosFile;
-struct PyMPIRequestObject;
-struct PyMPIGrequestObject;
+struct PyMPIIntercommObject;
 struct PyMPIWinObject;
-struct PyMPIDatatypeObject;
-struct __pyx_obj_5adios_AdiosVariable;
 struct PyMPIFileObject;
-struct PyMPIGraphcommObject;
-struct PyMPIPrequestObject;
-struct PyMPIInfoObject;
-struct __pyx_obj_5adios_AdiosGroup;
-struct PyMPICartcommObject;
-struct PyMPIStatusObject;
-struct PyMPIOpObject;
+struct __pyx_obj_9adios_mpi_file;
+struct __pyx_obj_9adios_mpi_var;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -757,7 +802,7 @@ struct PyMPIOpObject;
  */
 typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -766,7 +811,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
  */
 typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -775,7 +820,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
  */
 typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
 
-/* "numpy.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             # <<<<<<<<<<<<<<
@@ -783,90 +828,200 @@ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
  * cdef inline object PyArray_MultiIterNew1(a):
  */
 typedef npy_cdouble __pyx_t_5numpy_complex_t;
-struct __pyx_opt_args_5adios_init;
-struct __pyx_opt_args_5adios_open;
-struct __pyx_opt_args_5adios_finalize;
-struct __pyx_opt_args_5adios_init_noxml;
-struct __pyx_opt_args_5adios_13AdiosVariable_read;
+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_read_init;
+struct __pyx_opt_args_9adios_mpi_read_finalize;
+struct __pyx_opt_args_9adios_mpi_3var_read;
 
-/* "adios.pyx":211
- * ## ==========
+/* "adios_mpi.pyx":254
+ * ## ====================
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     return adios_init(config, comm.ob_mpi)
  * 
  */
-struct __pyx_opt_args_5adios_init {
+struct __pyx_opt_args_9adios_mpi_init {
   int __pyx_n;
   struct PyMPICommObject *comm;
 };
 
-/* "adios.pyx":214
+/* "adios_mpi.pyx":257
  *     return adios_init(config, comm.ob_mpi)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
  *                    char * name,
  *                    char * mode,
  */
-struct __pyx_opt_args_5adios_open {
+struct __pyx_opt_args_9adios_mpi_open {
   int __pyx_n;
   struct PyMPICommObject *comm;
 };
 
-/* "adios.pyx":255
+/* "adios_mpi.pyx":298
  *     return adios_close(fd_p)
  * 
  * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
  *     return adios_finalize(mype)
  * 
  */
-struct __pyx_opt_args_5adios_finalize {
+struct __pyx_opt_args_9adios_mpi_finalize {
   int __pyx_n;
   int mype;
 };
 
-/* "adios.pyx":261
+/* "adios_mpi.pyx":304
  * ## ADIOS No-XML API
- * ## ==========
+ * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     return adios_init_noxml(comm.ob_mpi)
  * 
  */
-struct __pyx_opt_args_5adios_init_noxml {
+struct __pyx_opt_args_9adios_mpi_init_noxml {
+  int __pyx_n;
+  struct PyMPICommObject *comm;
+};
+
+/* "adios_mpi.pyx":420
+ * ## ====================
+ * 
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI.Comm comm = MPI.COMM_WORLD,
+ *                 char * parameters = ""):
+ */
+struct __pyx_opt_args_9adios_mpi_read_init {
   int __pyx_n;
+  ADIOS_READ_METHOD method;
   struct PyMPICommObject *comm;
+  char *parameters;
 };
 
-/* "adios.pyx":567
+/* "adios_mpi.pyx":426
+ * 
+ * 
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
+ * 
+ */
+struct __pyx_opt_args_9adios_mpi_read_finalize {
+  int __pyx_n;
+  ADIOS_READ_METHOD method;
+};
+
+/* "adios_mpi.pyx":518
  *         self.vp = NULL
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+ *     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'
  */
-struct __pyx_opt_args_5adios_13AdiosVariable_read {
+struct __pyx_opt_args_9adios_mpi_3var_read {
   int __pyx_n;
   PyObject *offset;
   PyObject *count;
+  PyObject *from_steps;
+  PyObject *nsteps;
 };
 
-/* "mpi4py/MPI.pxd":106
- *     cdef int      flags
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":49
+ *     ctypedef MPI_Offset Offset "MPI_Offset"
  * 
- * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
- *     type   PyMPIErrhandler_Type,
- *     object PyMPIErrhandlerObject,
+ * ctypedef public api class Status [             # <<<<<<<<<<<<<<
+ *     type   PyMPIStatus_Type,
+ *     object PyMPIStatusObject,
  */
-struct PyMPIErrhandlerObject {
+struct PyMPIStatusObject {
   PyObject_HEAD
-  MPI_Errhandler ob_mpi;
+  MPI_Status ob_mpi;
   int flags;
 };
-typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
+typedef struct PyMPIStatusObject PyMPIStatusObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":56
+ *     cdef int        flags
+ * 
+ * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
+ *     type   PyMPIDatatype_Type,
+ *     object PyMPIDatatypeObject,
+ */
+struct PyMPIDatatypeObject {
+  PyObject_HEAD
+  MPI_Datatype ob_mpi;
+  int flags;
+};
+typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":63
+ *     cdef int          flags
+ * 
+ * ctypedef public api class Request [             # <<<<<<<<<<<<<<
+ *     type   PyMPIRequest_Type,
+ *     object PyMPIRequestObject,
+ */
+struct PyMPIRequestObject {
+  PyObject_HEAD
+  MPI_Request ob_mpi;
+  int flags;
+  PyObject *ob_buf;
+};
+typedef struct PyMPIRequestObject PyMPIRequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":71
+ *     cdef object      ob_buf
+ * 
+ * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIPrequest_Type,
+ *     object PyMPIPrequestObject,
+ */
+struct PyMPIPrequestObject {
+  struct PyMPIRequestObject __pyx_base;
+};
+typedef struct PyMPIPrequestObject PyMPIPrequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":77
+ *     pass
+ * 
+ * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIGrequest_Type,
+ *     object PyMPIGrequestObject,
+ */
+struct PyMPIGrequestObject {
+  struct PyMPIRequestObject __pyx_base;
+  MPI_Request ob_grequest;
+};
+typedef struct PyMPIGrequestObject PyMPIGrequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":83
+ *     cdef MPI_Request ob_grequest
+ * 
+ * ctypedef public api class Op [             # <<<<<<<<<<<<<<
+ *     type   PyMPIOp_Type,
+ *     object PyMPIOpObject,
+ */
+struct PyMPIOpObject {
+  PyObject_HEAD
+  MPI_Op ob_mpi;
+  int flags;
+  PyObject *(*ob_func)(PyObject *, PyObject *);
+  int ob_usrid;
+};
+typedef struct PyMPIOpObject PyMPIOpObject;
 
-/* "mpi4py/MPI.pxd":92
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":92
  *     cdef int    ob_usrid
  * 
  * ctypedef public api class Group [             # <<<<<<<<<<<<<<
@@ -882,7 +1037,39 @@ typedef struct PyMPIGroupObject PyMPIGroupObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;
 
-/* "mpi4py/MPI.pxd":113
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":99
+ *     cdef int       flags
+ * 
+ * ctypedef public api class Info [             # <<<<<<<<<<<<<<
+ *     type   PyMPIInfo_Type,
+ *     object PyMPIInfoObject,
+ */
+struct PyMPIInfoObject {
+  PyObject_HEAD
+  MPI_Info ob_mpi;
+  int flags;
+};
+typedef struct PyMPIInfoObject PyMPIInfoObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":106
+ *     cdef int      flags
+ * 
+ * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
+ *     type   PyMPIErrhandler_Type,
+ *     object PyMPIErrhandlerObject,
+ */
+struct PyMPIErrhandlerObject {
+  PyObject_HEAD
+  MPI_Errhandler ob_mpi;
+  int flags;
+};
+typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
+
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":113
  *     cdef int            flags
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -898,21 +1085,7 @@ typedef struct PyMPICommObject PyMPICommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;
 
-/* "mpi4py/MPI.pxd":144
- *     pass
- * 
- * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIIntercomm_Type,
- *     object PyMPIIntercommObject,
- */
-struct PyMPIIntercommObject {
-  struct PyMPICommObject __pyx_base;
-};
-typedef struct PyMPIIntercommObject PyMPIIntercommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
-
-/* "mpi4py/MPI.pxd":120
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":120
  *     cdef int      flags
  * 
  * ctypedef public api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
@@ -926,77 +1099,63 @@ typedef struct PyMPIIntracommObject PyMPIIntracommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;
 
-/* "mpi4py/MPI.pxd":138
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":126
  *     pass
  * 
- * ctypedef public api class Distgraphcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIDistgraphcomm_Type,
- *     object PyMPIDistgraphcommObject,
+ * ctypedef public api class Cartcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPICartcomm_Type,
+ *     object PyMPICartcommObject,
  */
-struct PyMPIDistgraphcommObject {
+struct PyMPICartcommObject {
   struct PyMPIIntracommObject __pyx_base;
 };
-typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
+typedef struct PyMPICartcommObject PyMPICartcommObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
 
-/* "adios.pyx":423
- * ## ==========
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":132
+ *     pass
  * 
- * cdef class AdiosFile:             # <<<<<<<<<<<<<<
- *     """ Private Memeber """
- *     cpdef ADIOS_FILE * fp
+ * ctypedef public api class Graphcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIGraphcomm_Type,
+ *     object PyMPIGraphcommObject,
  */
-struct __pyx_obj_5adios_AdiosFile {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtab;
-  ADIOS_FILE *fp;
-  PyObject *name;
-  int groups_count;
-  int vars_count;
-  int attrs_count;
-  int tidx_start;
-  int ntimesteps;
-  int version;
-  int file_size;
-  int endianness;
-  PyObject *group;
+struct PyMPIGraphcommObject {
+  struct PyMPIIntracommObject __pyx_base;
 };
+typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
 
-/* "mpi4py/MPI.pxd":63
- *     cdef int          flags
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":138
+ *     pass
  * 
- * ctypedef public api class Request [             # <<<<<<<<<<<<<<
- *     type   PyMPIRequest_Type,
- *     object PyMPIRequestObject,
+ * ctypedef public api class Distgraphcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIDistgraphcomm_Type,
+ *     object PyMPIDistgraphcommObject,
  */
-struct PyMPIRequestObject {
-  PyObject_HEAD
-  MPI_Request ob_mpi;
-  int flags;
-  PyObject *ob_buf;
+struct PyMPIDistgraphcommObject {
+  struct PyMPIIntracommObject __pyx_base;
 };
-typedef struct PyMPIRequestObject PyMPIRequestObject;
+typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
 
-/* "mpi4py/MPI.pxd":77
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":144
  *     pass
  * 
- * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
- *     type   PyMPIGrequest_Type,
- *     object PyMPIGrequestObject,
+ * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIIntercomm_Type,
+ *     object PyMPIIntercommObject,
  */
-struct PyMPIGrequestObject {
-  struct PyMPIRequestObject __pyx_base;
-  MPI_Request ob_grequest;
+struct PyMPIIntercommObject {
+  struct PyMPICommObject __pyx_base;
 };
-typedef struct PyMPIGrequestObject PyMPIGrequestObject;
+typedef struct PyMPIIntercommObject PyMPIIntercommObject;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
 
-/* "mpi4py/MPI.pxd":150
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":150
  *     pass
  * 
  * ctypedef public api class Win [             # <<<<<<<<<<<<<<
@@ -1012,219 +1171,97 @@ typedef struct PyMPIWinObject PyMPIWinObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;
 
-/* "mpi4py/MPI.pxd":56
- *     cdef int        flags
+/* "/Users/jyc/Library/Python/2.7/lib/python/site-packages/mpi4py/include/mpi4py/MPI.pxd":157
+ *     cdef int     flags
  * 
- * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
- *     type   PyMPIDatatype_Type,
- *     object PyMPIDatatypeObject,
+ * ctypedef public api class File [             # <<<<<<<<<<<<<<
+ *     type   PyMPIFile_Type,
+ *     object PyMPIFileObject,
  */
-struct PyMPIDatatypeObject {
+struct PyMPIFileObject {
   PyObject_HEAD
-  MPI_Datatype ob_mpi;
-  int flags;
-};
-typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
-
-/* "adios.pyx":529
- *         printAdiosGroup(self.gp)
- * 
- * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
- *     """ Private Memeber """
- *     cdef AdiosGroup group
- */
-struct __pyx_obj_5adios_AdiosVariable {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtab;
-  struct __pyx_obj_5adios_AdiosGroup *group;
-  ADIOS_VARINFO *vp;
-  PyObject *name;
-  int varid;
-  PyObject *type;
-  int ndim;
-  PyObject *dims;
-  int timedim;
-  int characteristics_count;
-};
-
-
-/* "mpi4py/MPI.pxd":157
- *     cdef int     flags
- * 
- * ctypedef public api class File [             # <<<<<<<<<<<<<<
- *     type   PyMPIFile_Type,
- *     object PyMPIFileObject,
- */
-struct PyMPIFileObject {
-  PyObject_HEAD
-  MPI_File ob_mpi;
+  MPI_File ob_mpi;
   int flags;
 };
 typedef struct PyMPIFileObject PyMPIFileObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;
 
-/* "mpi4py/MPI.pxd":132
- *     pass
- * 
- * ctypedef public api class Graphcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPIGraphcomm_Type,
- *     object PyMPIGraphcommObject,
- */
-struct PyMPIGraphcommObject {
-  struct PyMPIIntracommObject __pyx_base;
-};
-typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
-
-/* "mpi4py/MPI.pxd":71
- *     cdef object      ob_buf
- * 
- * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
- *     type   PyMPIPrequest_Type,
- *     object PyMPIPrequestObject,
- */
-struct PyMPIPrequestObject {
-  struct PyMPIRequestObject __pyx_base;
-};
-typedef struct PyMPIPrequestObject PyMPIPrequestObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
-
-/* "mpi4py/MPI.pxd":99
- *     cdef int       flags
- * 
- * ctypedef public api class Info [             # <<<<<<<<<<<<<<
- *     type   PyMPIInfo_Type,
- *     object PyMPIInfoObject,
- */
-struct PyMPIInfoObject {
-  PyObject_HEAD
-  MPI_Info ob_mpi;
-  int flags;
-};
-typedef struct PyMPIInfoObject PyMPIInfoObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
-
-/* "adios.pyx":479
+/* "adios_mpi.pyx":429
+ *     return adios_read_finalize_method (method)
  * 
- * 
- * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
+ * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
- *     cdef AdiosFile file
+ *     cpdef ADIOS_FILE * fp
  */
-struct __pyx_obj_5adios_AdiosGroup {
+struct __pyx_obj_9adios_mpi_file {
   PyObject_HEAD
-  struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtab;
-  struct __pyx_obj_5adios_AdiosFile *file;
-  ADIOS_GROUP *gp;
+  struct __pyx_vtabstruct_9adios_mpi_file *__pyx_vtab;
+  ADIOS_FILE *fp;
   PyObject *name;
-  int grpid;
-  int vars_count;
-  int attrs_count;
-  int timestep;
-  int lasttimestep;
+  int nvars;
+  int nattrs;
+  int current_step;
+  int last_step;
+  int endianness;
+  int version;
+  int file_size;
   PyObject *var;
+  PyObject *attr;
 };
 
 
-/* "mpi4py/MPI.pxd":126
- *     pass
- * 
- * ctypedef public api class Cartcomm(Intracomm) [             # <<<<<<<<<<<<<<
- *     type   PyMPICartcomm_Type,
- *     object PyMPICartcommObject,
- */
-struct PyMPICartcommObject {
-  struct PyMPIIntracommObject __pyx_base;
-};
-typedef struct PyMPICartcommObject PyMPICartcommObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
-
-/* "mpi4py/MPI.pxd":49
- *     ctypedef MPI_Offset Offset "MPI_Offset"
- * 
- * ctypedef public api class Status [             # <<<<<<<<<<<<<<
- *     type   PyMPIStatus_Type,
- *     object PyMPIStatusObject,
- */
-struct PyMPIStatusObject {
-  PyObject_HEAD
-  MPI_Status ob_mpi;
-  int flags;
-};
-typedef struct PyMPIStatusObject PyMPIStatusObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
-
-/* "mpi4py/MPI.pxd":83
- *     cdef MPI_Request ob_grequest
+/* "adios_mpi.pyx":482
+ *         printfile(self.fp)
  * 
- * ctypedef public api class Op [             # <<<<<<<<<<<<<<
- *     type   PyMPIOp_Type,
- *     object PyMPIOpObject,
+ * cdef class var:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cdef file file
  */
-struct PyMPIOpObject {
+struct __pyx_obj_9adios_mpi_var {
   PyObject_HEAD
-  MPI_Op ob_mpi;
-  int flags;
-  PyObject *(*ob_func)(PyObject *, PyObject *);
-  int ob_usrid;
+  struct __pyx_vtabstruct_9adios_mpi_var *__pyx_vtab;
+  struct __pyx_obj_9adios_mpi_file *file;
+  ADIOS_VARINFO *vp;
+  PyObject *name;
+  int varid;
+  PyObject *type;
+  int ndim;
+  PyObject *dims;
+  int nsteps;
 };
-typedef struct PyMPIOpObject PyMPIOpObject;
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
-
-
-/* "adios.pyx":479
- * 
- * 
- * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
- *     """ Private Memeber """
- *     cdef AdiosFile file
- */
 
-struct __pyx_vtabstruct_5adios_AdiosGroup {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
-};
-static struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtabptr_5adios_AdiosGroup;
 
 
-/* "adios.pyx":423
- * ## ==========
+/* "adios_mpi.pyx":429
+ *     return adios_read_finalize_method (method)
  * 
- * cdef class AdiosFile:             # <<<<<<<<<<<<<<
+ * cdef class file:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
  *     cpdef ADIOS_FILE * fp
  */
 
-struct __pyx_vtabstruct_5adios_AdiosFile {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
+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);
 };
-static struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtabptr_5adios_AdiosFile;
+static struct __pyx_vtabstruct_9adios_mpi_file *__pyx_vtabptr_9adios_mpi_file;
 
 
-/* "adios.pyx":529
- *         printAdiosGroup(self.gp)
+/* "adios_mpi.pyx":482
+ *         printfile(self.fp)
  * 
- * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
+ * cdef class var:             # <<<<<<<<<<<<<<
  *     """ Private Memeber """
- *     cdef AdiosGroup group
+ *     cdef file file
  */
 
-struct __pyx_vtabstruct_5adios_AdiosVariable {
-  PyObject *(*close)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
-  PyObject *(*read)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args);
-  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_9adios_mpi_var {
+  PyObject *(*close)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch);
+  PyObject *(*read)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_3var_read *__pyx_optional_args);
+  PyObject *(*printself)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtabptr_5adios_AdiosVariable;
+static struct __pyx_vtabstruct_9adios_mpi_var *__pyx_vtabptr_9adios_mpi_var;
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -1276,6 +1313,14 @@ static struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtabptr_5adios_AdiosV
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
 #endif /* CYTHON_REFNANNY */
+#define __Pyx_XDECREF_SET(r, v) do {                            \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_XDECREF(tmp);                              \
+    } while (0)
+#define __Pyx_DECREF_SET(r, v) do {                             \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_DECREF(tmp);                               \
+    } while (0)
 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
@@ -1305,18 +1350,25 @@ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
 
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact); /*proto*/
 
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+#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 void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
-                                  int lineno, const char *filename); /*proto*/
+                                  int lineno, const char *filename,
+                                  int full_traceback); /*proto*/
 
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
@@ -1334,20 +1386,21 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
-#define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
-#define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+#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) : \
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
+               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
-#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
-    (((size) <= sizeof(Py_ssize_t)) ? \
-    __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \
-    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
@@ -1355,37 +1408,89 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
 #if PY_MAJOR_VERSION >= 3
-static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/
+static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
+    PyObject *value;
+    value = PyDict_GetItemWithError(d, key);
+    if (unlikely(!value)) {
+        if (!PyErr_Occurred()) {
+            PyObject* args = PyTuple_Pack(1, key);
+            if (likely(args))
+                PyErr_SetObject(PyExc_KeyError, args);
+            Py_XDECREF(args);
+        }
+        return NULL;
+    }
+    Py_INCREF(value);
+    return value;
+}
 #else
-#define __Pyx_PyDict_Values(d) PyDict_Values(d)
+    #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
 #endif
 
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
+static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
 
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+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 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 CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
 
-static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
 
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
+static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** value1, PyObject** value2,
+                                             int is_tuple, int has_known_size, int decref_tuple);
+
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_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 int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
+static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
 
-static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/
+static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
+                                           PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/
+static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
+                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/
 
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
-                                   PyObject *qualname, PyObject *modname); /*proto*/
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
-static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject *);
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
-static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject *);
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
+
+static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
+
+static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *);
+
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
 
 static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
@@ -1393,10 +1498,14 @@ static PyObject* __pyx_print = 0;
 static PyObject* __pyx_print_kwargs = 0;
 #endif
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value);
 
 static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
 
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value);
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -1409,7 +1518,7 @@ static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
     #define __Pyx_CREAL(z) ((z).real)
     #define __Pyx_CIMAG(z) ((z).imag)
 #endif
-#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
+#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX
     #define __Pyx_SET_CREAL(z,x) ((z).real(x))
     #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
 #else
@@ -1495,38 +1604,6 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do
     #endif
 #endif
 
-static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
-
-static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
-
-static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
-
-static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
-
-static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
-
-static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
-
-static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
-
-static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
-
-static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
-
-static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
-
-static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
-
-static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
-
-static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
-
-static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
-
-static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
-
-static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
-
 static int __Pyx_check_binary_version(void);
 
 #if !defined(__Pyx_PyIdentifier_FromString)
@@ -1611,436 +1688,434 @@ static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_File = 0;
 
 /* Module declarations from 'libc.stdint' */
 
-/* Module declarations from 'adios' */
-static PyTypeObject *__pyx_ptype_5adios_AdiosFile = 0;
-static PyTypeObject *__pyx_ptype_5adios_AdiosGroup = 0;
-static PyTypeObject *__pyx_ptype_5adios_AdiosVariable = 0;
-static PyObject *__pyx_f_5adios_init(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args); /*proto*/
-static int64_t __pyx_f_5adios_open(char *, char *, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args); /*proto*/
-static int64_t __pyx_f_5adios_set_group_size(int64_t, uint64_t, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_write(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_write_int(int64_t, char *, int, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_write_long(int64_t, char *, long, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_write_float(int64_t, char *, float, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_read(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_close(int64_t, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_5adios_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_finalize *__pyx_optional_args); /*proto*/
-static int __pyx_f_5adios_init_noxml(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init_noxml *__pyx_optional_args); /*proto*/
-static int __pyx_f_5adios_allocate_buffer(int, uint64_t, int __pyx_skip_dispatch); /*proto*/
-static int64_t __pyx_f_5adios_declare_group(char *, char *, int, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_define_var(int64_t, char *, char *, int, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_define_attribute(int64_t, char *, char *, int, char *, char *, int __pyx_skip_dispatch); /*proto*/
-static int __pyx_f_5adios_select_method(int64_t, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES, int __pyx_skip_dispatch); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *); /*proto*/
-static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *); /*proto*/
-#define __Pyx_MODULE_NAME "adios"
-int __pyx_module_is_main_adios = 0;
-
-/* Implementation of 'adios' */
-static PyObject *__pyx_builtin_object;
+/* Module declarations from 'adios_mpi' */
+static PyTypeObject *__pyx_ptype_9adios_mpi_file = 0;
+static PyTypeObject *__pyx_ptype_9adios_mpi_var = 0;
+static PyObject *__pyx_f_9adios_mpi_init(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_init *__pyx_optional_args); /*proto*/
+static int64_t __pyx_f_9adios_mpi_open(char *, char *, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_open *__pyx_optional_args); /*proto*/
+static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t, uint64_t, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_9adios_mpi_write(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_9adios_mpi_write_int(int64_t, char *, int, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_9adios_mpi_write_long(int64_t, char *, long, int __pyx_skip_dispatch); /*proto*/
+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_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 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 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*/
+#define __Pyx_MODULE_NAME "adios_mpi"
+int __pyx_module_is_main_adios_mpi = 0;
+
+/* Implementation of 'adios_mpi' */
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size); /* proto */
-static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
-static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val); /* proto */
-static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val); /* proto */
-static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val); /* proto */
-static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
-static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p); /* proto */
-static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype); /* proto */
-static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size); /* proto */
-static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats); /* proto */
-static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets); /* proto */
-static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var); /* proto */
-static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path); /* proto */
-static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t); /* proto */
-static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size); /* proto */
+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); /* proto */
+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_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_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 */
+static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_5nvars_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_6nattrs_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_12current_step_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_9last_step_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_10endianness_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_7version_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_9file_size_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_4file_3var___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_4file_3var_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_9adios_mpi_4file_3var_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self); /* proto */
+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 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 */
+static PyObject *__pyx_pf_9adios_mpi_3var_6read(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count, PyObject *__pyx_v_from_steps, PyObject *__pyx_v_nsteps); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_8printself(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_4name___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4name_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4name_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_3var_5varid_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_4type___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4type_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4type_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4ndim_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_3var_4dims___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self); /* proto */
+static int __pyx_pf_9adios_mpi_3var_4dims_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+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 int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
-static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static char __pyx_k_3[] = "Only contiguous arrays are supported.";
-static char __pyx_k_4[] = "Reading ... ";
-static char __pyx_k_5[] = "(bytes)";
-static char __pyx_k_7[] = "%15s : %lu";
-static char __pyx_k_8[] = "%15s : %d";
-static char __pyx_k_9[] = "%15s : %s";
-static char __pyx_k_11[] = "Not an open file";
-static char __pyx_k_12[] = "/";
-static char __pyx_k_14[] = "=== AdiosFile ===";
-static char __pyx_k_15[] = "Not an open group";
-static char __pyx_k_16[] = "=== AdiosGroup ===";
-static char __pyx_k_17[] = "Data type is not supported yet";
-static char __pyx_k_19[] = "Offset dimension mismatch";
-static char __pyx_k_20[] = "Count dimension mismatch.";
-static char __pyx_k_21[] = "Count is larger than shape.";
-static char __pyx_k_22[] = "[WARNING] bytes read :";
-static char __pyx_k_23[] = "=== AdiosVariable ===";
-static char __pyx_k_24[] = "ndarray is not C contiguous";
-static char __pyx_k_26[] = "ndarray is not Fortran contiguous";
-static char __pyx_k_28[] = "Non-native byte order not supported";
-static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)";
-static char __pyx_k_31[] = "Format string allocated too short, see comment in numpy.pxd";
-static char __pyx_k_34[] = "Format string allocated too short.";
-static char __pyx_k_36[] = "\n ADIOS is freely available under the terms of the BSD license described\n in the COPYING file in the top level directory of this source distribution.\n\n Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.\n";
-static char __pyx_k_37[] = "mpi4py.MPI";
-static char __pyx_k_38[] = "*";
-static char __pyx_k__B[] = "B";
-static char __pyx_k__H[] = "H";
-static char __pyx_k__I[] = "I";
-static char __pyx_k__L[] = "L";
-static char __pyx_k__O[] = "O";
-static char __pyx_k__Q[] = "Q";
-static char __pyx_k__b[] = "b";
-static char __pyx_k__d[] = "d";
-static char __pyx_k__f[] = "f";
-static char __pyx_k__g[] = "g";
-static char __pyx_k__h[] = "h";
-static char __pyx_k__i[] = "i";
-static char __pyx_k__l[] = "l";
-static char __pyx_k__q[] = "q";
-static char __pyx_k__NO[] = "NO";
-static char __pyx_k__Zd[] = "Zd";
-static char __pyx_k__Zf[] = "Zf";
-static char __pyx_k__Zg[] = "Zg";
-static char __pyx_k__fh[] = "fh";
-static char __pyx_k__fp[] = "fp";
-static char __pyx_k__gh[] = "gh";
-static char __pyx_k__gp[] = "gp";
-static char __pyx_k__np[] = "np";
-static char __pyx_k__vp[] = "vp";
-static char __pyx_k__MPI[] = "MPI";
-static char __pyx_k__NOW[] = "NOW";
-static char __pyx_k__YES[] = "YES";
-static char __pyx_k__all[] = "all";
-static char __pyx_k__end[] = "end";
-static char __pyx_k__val[] = "val";
-static char __pyx_k__var[] = "var";
-static char __pyx_k__FLAG[] = "FLAG";
-static char __pyx_k__byte[] = "byte";
-static char __pyx_k__comm[] = "comm";
-static char __pyx_k__copy[] = "copy";
-static char __pyx_k__dims[] = "dims";
-static char __pyx_k__fd_p[] = "fd_p";
-static char __pyx_k__file[] = "file";
-static char __pyx_k__fill[] = "fill";
-static char __pyx_k__int8[] = "int8";
-static char __pyx_k__long[] = "long";
-static char __pyx_k__mode[] = "mode";
-static char __pyx_k__mype[] = "mype";
-static char __pyx_k__name[] = "name";
-static char __pyx_k__ndim[] = "ndim";
-static char __pyx_k__path[] = "path";
-static char __pyx_k__read[] = "read";
-static char __pyx_k__real[] = "real";
-static char __pyx_k__size[] = "size";
-static char __pyx_k__type[] = "type";
-static char __pyx_k__when[] = "when";
-static char __pyx_k__LATER[] = "LATER";
-static char __pyx_k__adios[] = "adios";
-static char __pyx_k__array[] = "array";
-static char __pyx_k__close[] = "close";
-static char __pyx_k__count[] = "count";
-static char __pyx_k__dtype[] = "dtype";
-static char __pyx_k__flags[] = "flags";
-static char __pyx_k__fname[] = "fname";
-static char __pyx_k__group[] = "group";
-static char __pyx_k__grpid[] = "grpid";
-static char __pyx_k__int16[] = "int16";
-static char __pyx_k__int32[] = "int32";
-static char __pyx_k__int64[] = "int64";
-static char __pyx_k__numpy[] = "numpy";
-static char __pyx_k__print[] = "print";
-static char __pyx_k__range[] = "range";
-static char __pyx_k__short[] = "short";
-static char __pyx_k__split[] = "split";
-static char __pyx_k__stats[] = "stats";
-static char __pyx_k__uint8[] = "uint8";
-static char __pyx_k__value[] = "value";
-static char __pyx_k__varid[] = "varid";
-static char __pyx_k__zeros[] = "zeros";
-static char __pyx_k__config[] = "config";
-static char __pyx_k__double[] = "double";
-static char __pyx_k__method[] = "method";
-static char __pyx_k__object[] = "object";
-static char __pyx_k__offset[] = "offset";
-static char __pyx_k__string[] = "string";
-static char __pyx_k__uint16[] = "uint16";
-static char __pyx_k__uint32[] = "uint32";
-static char __pyx_k__uint64[] = "uint64";
-static char __pyx_k__values[] = "values";
-static char __pyx_k__UNKNOWN[] = "UNKNOWN";
-static char __pyx_k__complex[] = "complex";
-static char __pyx_k__float32[] = "float32";
-static char __pyx_k__float64[] = "float64";
-static char __pyx_k__integer[] = "integer";
-static char __pyx_k__timedim[] = "timedim";
-static char __pyx_k__unknown[] = "unknown";
-static char __pyx_k__version[] = "version";
-static char __pyx_k__DATATYPE[] = "DATATYPE";
-static char __pyx_k____main__[] = "__main__";
-static char __pyx_k____test__[] = "__test__";
-static char __pyx_k__float128[] = "float128";
-static char __pyx_k__group_id[] = "group_id";
-static char __pyx_k__itemsize[] = "itemsize";
-static char __pyx_k____class__[] = "__class__";
-static char __pyx_k__base_path[] = "base_path";
-static char __pyx_k__complex64[] = "complex64";
-static char __pyx_k__data_size[] = "data_size";
-static char __pyx_k__file_size[] = "file_size";
-static char __pyx_k__printself[] = "printself";
-static char __pyx_k__COMM_WORLD[] = "COMM_WORLD";
-static char __pyx_k__ValueError[] = "ValueError";
-static char __pyx_k____import__[] = "__import__";
-static char __pyx_k____module__[] = "__module__";
-static char __pyx_k__complex128[] = "complex128";
-static char __pyx_k__contiguous[] = "contiguous";
-static char __pyx_k__dimensions[] = "dimensions";
-static char __pyx_k__endianness[] = "endianness";
-static char __pyx_k__group_name[] = "group_name";
-static char __pyx_k__ntimesteps[] = "ntimesteps";
-static char __pyx_k__parameters[] = "parameters";
-static char __pyx_k__tidx_start[] = "tidx_start";
-static char __pyx_k__time_index[] = "time_index";
-static char __pyx_k__vars_count[] = "vars_count";
-static char __pyx_k__attrs_count[] = "attrs_count";
-static char __pyx_k__buffer_size[] = "buffer_size";
-static char __pyx_k__long_double[] = "long_double";
-static char __pyx_k__RuntimeError[] = "RuntimeError";
-static char __pyx_k____qualname__[] = "__qualname__";
-static char __pyx_k__groups_count[] = "groups_count";
-static char __pyx_k__var_namelist[] = "var_namelist";
-static char __pyx_k____metaclass__[] = "__metaclass__";
-static char __pyx_k__attr_namelist[] = "attr_namelist";
-static char __pyx_k__local_offsets[] = "local_offsets";
-static char __pyx_k__unsigned_byte[] = "unsigned_byte";
-static char __pyx_k__unsigned_long[] = "unsigned_long";
-static char __pyx_k____pyx_vtable__[] = "__pyx_vtable__";
-static char __pyx_k__double_complex[] = "double_complex";
-static char __pyx_k__group_namelist[] = "group_namelist";
-static char __pyx_k__unsigned_short[] = "unsigned_short";
-static char __pyx_k__unsigned_integer[] = "unsigned_integer";
-static char __pyx_k__BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
-static char __pyx_k__global_dimensions[] = "global_dimensions";
-static PyObject *__pyx_kp_s_11;
-static PyObject *__pyx_kp_s_12;
-static PyObject *__pyx_kp_s_14;
-static PyObject *__pyx_kp_s_15;
-static PyObject *__pyx_kp_s_16;
-static PyObject *__pyx_kp_s_17;
-static PyObject *__pyx_kp_s_19;
-static PyObject *__pyx_kp_s_20;
-static PyObject *__pyx_kp_s_21;
-static PyObject *__pyx_kp_s_22;
-static PyObject *__pyx_kp_s_23;
-static PyObject *__pyx_kp_u_24;
-static PyObject *__pyx_kp_u_26;
-static PyObject *__pyx_kp_u_28;
-static PyObject *__pyx_kp_s_3;
-static PyObject *__pyx_kp_u_30;
-static PyObject *__pyx_kp_u_31;
-static PyObject *__pyx_kp_u_34;
-static PyObject *__pyx_n_s_37;
-static PyObject *__pyx_n_s_38;
-static PyObject *__pyx_kp_s_4;
-static PyObject *__pyx_kp_s_5;
-static PyObject *__pyx_kp_s_7;
-static PyObject *__pyx_kp_s_8;
-static PyObject *__pyx_kp_s_9;
-static PyObject *__pyx_n_s__BUFFER_ALLOC_WHEN;
-static PyObject *__pyx_n_s__COMM_WORLD;
-static PyObject *__pyx_n_s__DATATYPE;
-static PyObject *__pyx_n_s__FLAG;
-static PyObject *__pyx_n_s__LATER;
-static PyObject *__pyx_n_s__MPI;
-static PyObject *__pyx_n_s__NO;
-static PyObject *__pyx_n_s__NOW;
-static PyObject *__pyx_n_s__RuntimeError;
-static PyObject *__pyx_n_s__UNKNOWN;
-static PyObject *__pyx_n_s__ValueError;
-static PyObject *__pyx_n_s__YES;
-static PyObject *__pyx_n_s____class__;
-static PyObject *__pyx_n_s____import__;
-static PyObject *__pyx_n_s____main__;
-static PyObject *__pyx_n_s____metaclass__;
-static PyObject *__pyx_n_s____module__;
-static PyObject *__pyx_n_s____pyx_vtable__;
-static PyObject *__pyx_n_s____qualname__;
-static PyObject *__pyx_n_s____test__;
-static PyObject *__pyx_n_s__adios;
-static PyObject *__pyx_n_s__all;
-static PyObject *__pyx_n_s__array;
-static PyObject *__pyx_n_s__attr_namelist;
-static PyObject *__pyx_n_s__attrs_count;
-static PyObject *__pyx_n_s__base_path;
-static PyObject *__pyx_n_s__buffer_size;
-static PyObject *__pyx_n_s__byte;
-static PyObject *__pyx_n_s__close;
-static PyObject *__pyx_n_s__comm;
-static PyObject *__pyx_n_s__complex;
-static PyObject *__pyx_n_s__complex128;
-static PyObject *__pyx_n_s__complex64;
-static PyObject *__pyx_n_s__config;
-static PyObject *__pyx_n_s__contiguous;
-static PyObject *__pyx_n_s__copy;
-static PyObject *__pyx_n_s__count;
-static PyObject *__pyx_n_s__data_size;
-static PyObject *__pyx_n_s__dimensions;
-static PyObject *__pyx_n_s__dims;
-static PyObject *__pyx_n_s__double;
-static PyObject *__pyx_n_s__double_complex;
-static PyObject *__pyx_n_s__dtype;
-static PyObject *__pyx_n_s__end;
-static PyObject *__pyx_n_s__endianness;
-static PyObject *__pyx_n_s__fd_p;
-static PyObject *__pyx_n_s__fh;
-static PyObject *__pyx_n_s__file;
-static PyObject *__pyx_n_s__file_size;
-static PyObject *__pyx_n_s__fill;
-static PyObject *__pyx_n_s__flags;
-static PyObject *__pyx_n_s__float128;
-static PyObject *__pyx_n_s__float32;
-static PyObject *__pyx_n_s__float64;
-static PyObject *__pyx_n_s__fname;
-static PyObject *__pyx_n_s__fp;
-static PyObject *__pyx_n_s__gh;
-static PyObject *__pyx_n_s__global_dimensions;
-static PyObject *__pyx_n_s__gp;
-static PyObject *__pyx_n_s__group;
-static PyObject *__pyx_n_s__group_id;
-static PyObject *__pyx_n_s__group_name;
-static PyObject *__pyx_n_s__group_namelist;
-static PyObject *__pyx_n_s__groups_count;
-static PyObject *__pyx_n_s__grpid;
-static PyObject *__pyx_n_s__int16;
-static PyObject *__pyx_n_s__int32;
-static PyObject *__pyx_n_s__int64;
-static PyObject *__pyx_n_s__int8;
-static PyObject *__pyx_n_s__integer;
-static PyObject *__pyx_n_s__itemsize;
-static PyObject *__pyx_n_s__local_offsets;
-static PyObject *__pyx_n_s__long;
-static PyObject *__pyx_n_s__long_double;
-static PyObject *__pyx_n_s__method;
-static PyObject *__pyx_n_s__mode;
-static PyObject *__pyx_n_s__mype;
-static PyObject *__pyx_n_s__name;
-static PyObject *__pyx_n_s__ndim;
-static PyObject *__pyx_n_s__np;
-static PyObject *__pyx_n_s__ntimesteps;
-static PyObject *__pyx_n_s__numpy;
-static PyObject *__pyx_n_s__object;
-static PyObject *__pyx_n_s__offset;
-static PyObject *__pyx_n_s__parameters;
-static PyObject *__pyx_n_s__path;
-static PyObject *__pyx_n_s__print;
-static PyObject *__pyx_n_s__printself;
-static PyObject *__pyx_n_s__range;
-static PyObject *__pyx_n_s__read;
-static PyObject *__pyx_n_s__real;
-static PyObject *__pyx_n_s__short;
-static PyObject *__pyx_n_s__size;
-static PyObject *__pyx_n_s__split;
-static PyObject *__pyx_n_s__stats;
-static PyObject *__pyx_n_s__string;
-static PyObject *__pyx_n_s__tidx_start;
-static PyObject *__pyx_n_s__time_index;
-static PyObject *__pyx_n_s__timedim;
-static PyObject *__pyx_n_s__type;
-static PyObject *__pyx_n_s__uint16;
-static PyObject *__pyx_n_s__uint32;
-static PyObject *__pyx_n_s__uint64;
-static PyObject *__pyx_n_s__uint8;
-static PyObject *__pyx_n_s__unknown;
-static PyObject *__pyx_n_s__unsigned_byte;
-static PyObject *__pyx_n_s__unsigned_integer;
-static PyObject *__pyx_n_s__unsigned_long;
-static PyObject *__pyx_n_s__unsigned_short;
-static PyObject *__pyx_n_s__val;
-static PyObject *__pyx_n_s__value;
-static PyObject *__pyx_n_s__values;
-static PyObject *__pyx_n_s__var;
-static PyObject *__pyx_n_s__var_namelist;
-static PyObject *__pyx_n_s__varid;
-static PyObject *__pyx_n_s__vars_count;
-static PyObject *__pyx_n_s__version;
-static PyObject *__pyx_n_s__vp;
-static PyObject *__pyx_n_s__when;
-static PyObject *__pyx_n_s__zeros;
+static PyObject *__pyx_tp_new_9adios_mpi_file(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_9adios_mpi_var(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static char __pyx_k_B[] = "B";
+static char __pyx_k_H[] = "H";
+static char __pyx_k_I[] = "I";
+static char __pyx_k_L[] = "L";
+static char __pyx_k_O[] = "O";
+static char __pyx_k_Q[] = "Q";
+static char __pyx_k_b[] = "b";
+static char __pyx_k_d[] = "d";
+static char __pyx_k_f[] = "f";
+static char __pyx_k_g[] = "g";
+static char __pyx_k_h[] = "h";
+static char __pyx_k_i[] = "i";
+static char __pyx_k_k[] = "k";
+static char __pyx_k_l[] = "l";
+static char __pyx_k_q[] = "q";
+static char __pyx_k_v[] = "v";
+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_fh[] = "fh";
+static char __pyx_k_fp[] = "fp";
+static char __pyx_k_np[] = "np";
+static char __pyx_k_vp[] = "vp";
+static char __pyx_k_MPI[] = "MPI";
+static char __pyx_k_NOW[] = "NOW";
+static char __pyx_k_YES[] = "YES";
+static char __pyx_k__10[] = "/";
+static char __pyx_k__19[] = "*";
+static char __pyx_k_all[] = "all";
+static char __pyx_k_doc[] = "__doc__";
+static char __pyx_k_end[] = "end";
+static char __pyx_k_val[] = "val";
+static char __pyx_k_var[] = "var";
+static char __pyx_k_FLAG[] = "FLAG";
+static char __pyx_k_bpls[] = "bpls";
+static char __pyx_k_byte[] = "byte";
+static char __pyx_k_comm[] = "comm";
+static char __pyx_k_copy[] = "copy";
+static char __pyx_k_dims[] = "dims";
+static char __pyx_k_fd_p[] = "fd_p";
+static char __pyx_k_file[] = "file";
+static char __pyx_k_fill[] = "fill";
+static char __pyx_k_int8[] = "int8";
+static char __pyx_k_long[] = "long";
+static char __pyx_k_main[] = "__main__";
+static char __pyx_k_mode[] = "mode";
+static char __pyx_k_mype[] = "mype";
+static char __pyx_k_name[] = "name";
+static char __pyx_k_ndim[] = "ndim";
+static char __pyx_k_path[] = "path";
+static char __pyx_k_read[] = "read";
+static char __pyx_k_real[] = "real";
+static char __pyx_k_size[] = "size";
+static char __pyx_k_test[] = "__test__";
+static char __pyx_k_type[] = "type";
+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_LATER[] = "LATER";
+static char __pyx_k_array[] = "array";
+static char __pyx_k_attrs[] = "attrs";
+static char __pyx_k_bytes[] = "(bytes)";
+static char __pyx_k_close[] = "close";
+static char __pyx_k_count[] = "count";
+static char __pyx_k_dtype[] = "dtype";
+static char __pyx_k_flags[] = "flags";
+static char __pyx_k_fname[] = "fname";
+static char __pyx_k_group[] = "group";
+static char __pyx_k_int16[] = "int16";
+static char __pyx_k_int32[] = "int32";
+static char __pyx_k_int64[] = "int64";
+static char __pyx_k_numpy[] = "numpy";
+static char __pyx_k_nvars[] = "nvars";
+static char __pyx_k_print[] = "print";
+static char __pyx_k_range[] = "range";
+static char __pyx_k_short[] = "short";
+static char __pyx_k_split[] = "split";
+static char __pyx_k_stats[] = "stats";
+static char __pyx_k_uint8[] = "uint8";
+static char __pyx_k_value[] = "value";
+static char __pyx_k_varid[] = "varid";
+static char __pyx_k_zeros[] = "zeros";
+static char __pyx_k_15s_lu[] = "%15s : %lu";
+static char __pyx_k_config[] = "config";
+static char __pyx_k_double[] = "double";
+static char __pyx_k_import[] = "__import__";
+static char __pyx_k_method[] = "method";
+static char __pyx_k_module[] = "__module__";
+static char __pyx_k_nattrs[] = "nattrs";
+static char __pyx_k_nsteps[] = "nsteps";
+static char __pyx_k_offset[] = "offset";
+static char __pyx_k_string[] = "string";
+static char __pyx_k_uint16[] = "uint16";
+static char __pyx_k_uint32[] = "uint32";
+static char __pyx_k_uint64[] = "uint64";
+static char __pyx_k_Reading[] = "Reading ... ";
+static char __pyx_k_UNKNOWN[] = "UNKNOWN";
+static char __pyx_k_complex[] = "complex";
+static char __pyx_k_float32[] = "float32";
+static char __pyx_k_float64[] = "float64";
+static char __pyx_k_integer[] = "integer";
+static char __pyx_k_prepare[] = "__prepare__";
+static char __pyx_k_readvar[] = "readvar";
+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_float128[] = "float128";
+static char __pyx_k_group_id[] = "group_id";
+static char __pyx_k_itemsize[] = "itemsize";
+static char __pyx_k_iterkeys[] = "iterkeys";
+static char __pyx_k_qualname[] = "__qualname__";
+static char __pyx_k_AdiosFile[] = "=== AdiosFile ===";
+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_data_size[] = "data_size";
+static char __pyx_k_file_size[] = "file_size";
+static char __pyx_k_last_step[] = "last_step";
+static char __pyx_k_metaclass[] = "__metaclass__";
+static char __pyx_k_printself[] = "printself";
+static char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
+static char __pyx_k_ValueError[] = "ValueError";
+static char __pyx_k_complex128[] = "complex128";
+static char __pyx_k_contiguous[] = "contiguous";
+static char __pyx_k_dimensions[] = "dimensions";
+static char __pyx_k_endianness[] = "endianness";
+static char __pyx_k_from_steps[] = "from_steps";
+static char __pyx_k_group_name[] = "group_name";
+static char __pyx_k_mpi4py_MPI[] = "mpi4py.MPI";
+static char __pyx_k_parameters[] = "parameters";
+static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+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_RuntimeError[] = "RuntimeError";
+static char __pyx_k_current_step[] = "current_step";
+static char __pyx_k_var_namelist[] = "var_namelist";
+static char __pyx_k_AdiosVariable[] = "=== AdiosVariable ===";
+static char __pyx_k_attr_namelist[] = "attr_namelist";
+static char __pyx_k_local_offsets[] = "local_offsets";
+static char __pyx_k_unsigned_byte[] = "unsigned_byte";
+static char __pyx_k_unsigned_long[] = "unsigned_long";
+static char __pyx_k_double_complex[] = "double_complex";
+static char __pyx_k_unsigned_short[] = "unsigned_short";
+static char __pyx_k_Not_a_valid_var[] = "Not a valid var";
+static char __pyx_k_Not_an_open_var[] = "Not an open var";
+static char __pyx_k_Not_an_open_file[] = "Not an open file";
+static char __pyx_k_unsigned_integer[] = "unsigned_integer";
+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_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_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";
+static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd";
+static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported";
+static char __pyx_k_Only_contiguous_arrays_are_suppo[] = "Only contiguous arrays are supported.";
+static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short.";
+static PyObject *__pyx_kp_s_15s_d;
+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_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_DATATYPE;
+static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
+static PyObject *__pyx_n_s_FLAG;
+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_LATER;
+static PyObject *__pyx_n_s_MPI;
+static PyObject *__pyx_n_s_NO;
+static PyObject *__pyx_n_s_NOW;
+static PyObject *__pyx_kp_s_No_valid_variable;
+static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
+static PyObject *__pyx_kp_s_Not_a_valid_var;
+static PyObject *__pyx_kp_s_Not_an_open_file;
+static PyObject *__pyx_kp_s_Not_an_open_var;
+static PyObject *__pyx_kp_s_Not_an_open_variable;
+static PyObject *__pyx_kp_s_Offset_dimension_mismatch;
+static PyObject *__pyx_kp_s_Only_contiguous_arrays_are_suppo;
+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_Users_jyc_project_adios_devel_w;
+static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_n_s_YES;
+static PyObject *__pyx_kp_s__10;
+static PyObject *__pyx_n_s__19;
+static PyObject *__pyx_n_s_adios_mpi;
+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_bpls;
+static PyObject *__pyx_n_s_buffer_size;
+static PyObject *__pyx_n_s_byte;
+static PyObject *__pyx_kp_s_bytes;
+static PyObject *__pyx_n_s_close;
+static PyObject *__pyx_n_s_comm;
+static PyObject *__pyx_n_s_complex;
+static PyObject *__pyx_n_s_complex128;
+static PyObject *__pyx_n_s_complex64;
+static PyObject *__pyx_n_s_config;
+static PyObject *__pyx_n_s_contiguous;
+static PyObject *__pyx_n_s_copy;
+static PyObject *__pyx_n_s_count;
+static PyObject *__pyx_n_s_current_step;
+static PyObject *__pyx_n_s_data_size;
+static PyObject *__pyx_n_s_dimensions;
+static PyObject *__pyx_n_s_dims;
+static PyObject *__pyx_n_s_doc;
+static PyObject *__pyx_n_s_double;
+static PyObject *__pyx_n_s_double_complex;
+static PyObject *__pyx_n_s_dtype;
+static PyObject *__pyx_n_s_end;
+static PyObject *__pyx_n_s_endianness;
+static PyObject *__pyx_n_s_f;
+static PyObject *__pyx_n_s_fd_p;
+static PyObject *__pyx_n_s_fh;
+static PyObject *__pyx_n_s_file;
+static PyObject *__pyx_n_s_file_size;
+static PyObject *__pyx_n_s_fill;
+static PyObject *__pyx_n_s_flags;
+static PyObject *__pyx_n_s_float128;
+static PyObject *__pyx_n_s_float32;
+static PyObject *__pyx_n_s_float64;
+static PyObject *__pyx_n_s_fname;
+static PyObject *__pyx_n_s_fp;
+static PyObject *__pyx_n_s_from_steps;
+static PyObject *__pyx_n_s_global_dimensions;
+static PyObject *__pyx_n_s_group;
+static PyObject *__pyx_n_s_group_id;
+static PyObject *__pyx_n_s_group_name;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_int16;
+static PyObject *__pyx_n_s_int32;
+static PyObject *__pyx_n_s_int64;
+static PyObject *__pyx_n_s_int8;
+static PyObject *__pyx_n_s_integer;
+static PyObject *__pyx_n_s_itemsize;
+static PyObject *__pyx_n_s_iterkeys;
+static PyObject *__pyx_n_s_k;
+static PyObject *__pyx_n_s_last_step;
+static PyObject *__pyx_n_s_local_offsets;
+static PyObject *__pyx_n_s_long;
+static PyObject *__pyx_n_s_long_double;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_metaclass;
+static PyObject *__pyx_n_s_method;
+static PyObject *__pyx_n_s_mode;
+static PyObject *__pyx_n_s_module;
+static PyObject *__pyx_n_s_mpi4py_MPI;
+static PyObject *__pyx_n_s_mype;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_nattrs;
+static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous;
+static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou;
+static PyObject *__pyx_n_s_ndim;
+static PyObject *__pyx_n_s_np;
+static PyObject *__pyx_n_s_nsteps;
+static PyObject *__pyx_n_s_numpy;
+static PyObject *__pyx_n_s_nvars;
+static PyObject *__pyx_n_s_offset;
+static PyObject *__pyx_n_s_parameters;
+static PyObject *__pyx_n_s_path;
+static PyObject *__pyx_n_s_prepare;
+static PyObject *__pyx_n_s_print;
+static PyObject *__pyx_n_s_printself;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_qualname;
+static PyObject *__pyx_n_s_range;
+static PyObject *__pyx_n_s_read;
+static PyObject *__pyx_n_s_readvar;
+static PyObject *__pyx_n_s_real;
+static PyObject *__pyx_n_s_short;
+static PyObject *__pyx_n_s_size;
+static PyObject *__pyx_n_s_split;
+static PyObject *__pyx_n_s_stats;
+static PyObject *__pyx_n_s_string;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_n_s_time_index;
+static PyObject *__pyx_n_s_time_steps;
+static PyObject *__pyx_n_s_type;
+static PyObject *__pyx_n_s_uint16;
+static PyObject *__pyx_n_s_uint32;
+static PyObject *__pyx_n_s_uint64;
+static PyObject *__pyx_n_s_uint8;
+static PyObject *__pyx_n_s_unknown;
+static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd;
+static PyObject *__pyx_n_s_unsigned_byte;
+static PyObject *__pyx_n_s_unsigned_integer;
+static PyObject *__pyx_n_s_unsigned_long;
+static PyObject *__pyx_n_s_unsigned_short;
+static PyObject *__pyx_n_s_v;
+static PyObject *__pyx_n_s_val;
+static PyObject *__pyx_n_s_value;
+static PyObject *__pyx_n_s_var;
+static PyObject *__pyx_n_s_var_namelist;
+static PyObject *__pyx_n_s_varid;
+static PyObject *__pyx_n_s_varname;
+static PyObject *__pyx_n_s_vars;
+static PyObject *__pyx_n_s_version;
+static PyObject *__pyx_n_s_vp;
+static PyObject *__pyx_n_s_when;
+static PyObject *__pyx_n_s_zeros;
 static PyObject *__pyx_int_0;
 static PyObject *__pyx_int_1;
 static PyObject *__pyx_int_2;
@@ -2049,38 +2124,45 @@ static PyObject *__pyx_int_5;
 static PyObject *__pyx_int_6;
 static PyObject *__pyx_int_7;
 static PyObject *__pyx_int_9;
-static PyObject *__pyx_int_neg_1;
 static PyObject *__pyx_int_10;
 static PyObject *__pyx_int_11;
-static PyObject *__pyx_int_15;
 static PyObject *__pyx_int_50;
 static PyObject *__pyx_int_51;
 static PyObject *__pyx_int_52;
 static PyObject *__pyx_int_54;
-static struct PyMPICommObject *__pyx_k_1;
-static struct PyMPICommObject *__pyx_k_2;
-static struct PyMPICommObject *__pyx_k_6;
-static struct PyMPICommObject *__pyx_k_10;
-static PyObject *__pyx_k_tuple_13;
-static PyObject *__pyx_k_tuple_18;
-static PyObject *__pyx_k_tuple_25;
-static PyObject *__pyx_k_tuple_27;
-static PyObject *__pyx_k_tuple_29;
-static PyObject *__pyx_k_tuple_32;
-static PyObject *__pyx_k_tuple_33;
-static PyObject *__pyx_k_tuple_35;
-
-/* "adios.pyx":211
- * ## ==========
+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 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__21;
+static PyObject *__pyx_codeobj__23;
+
+/* "adios_mpi.pyx":254
+ * ## ====================
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     return adios_init(config, comm.ob_mpi)
  * 
  */
 
-static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_1;
+static PyObject *__pyx_pw_9adios_mpi_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_init(char *__pyx_v_config, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_init *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k_;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2094,7 +2176,7 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
     }
   }
 
-  /* "adios.pyx":212
+  /* "adios_mpi.pyx":255
  * 
  * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
  *     return adios_init(config, comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -2102,17 +2184,24 @@ 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 = PyInt_FromLong(adios_init(__pyx_v_config, __pyx_v_comm->ob_mpi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "adios_mpi.pyx":254
+ * ## ====================
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2121,8 +2210,8 @@ static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __p
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_config;
   struct PyMPICommObject *__pyx_v_comm = 0;
   int __pyx_lineno = 0;
@@ -2132,9 +2221,9 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__config,&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_config,&__pyx_n_s_comm,0};
     PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)__pyx_k_1;
+    values[1] = (PyObject *)__pyx_k_;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -2147,16 +2236,16 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__config)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_config)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2166,19 +2255,21 @@ 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 = 211; __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 = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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 = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_init(__pyx_self, __pyx_v_config, __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 = 254; __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 */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2187,19 +2278,11 @@ static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_arg
   return __pyx_r;
 }
 
-/* "adios.pyx":211
- * ## ==========
- * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_9adios_mpi_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  struct __pyx_opt_args_5adios_init __pyx_t_2;
+  struct __pyx_opt_args_9adios_mpi_init __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -2207,17 +2290,16 @@ 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 = 211; __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 = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2225,7 +2307,7 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
   return __pyx_r;
 }
 
-/* "adios.pyx":214
+/* "adios_mpi.pyx":257
  *     return adios_init(config, comm.ob_mpi)
  * 
  * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
@@ -2233,9 +2315,9 @@ static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *
  *                    char * mode,
  */
 
-static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_2;
+static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int64_t __pyx_f_9adios_mpi_open(char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_open *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k__2;
   int64_t __pyx_v_fd;
   CYTHON_UNUSED int __pyx_v_result;
   int64_t __pyx_r;
@@ -2247,7 +2329,7 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
     }
   }
 
-  /* "adios.pyx":220
+  /* "adios_mpi.pyx":263
  *     cdef int64_t fd
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -2256,7 +2338,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->ob_mpi);
 
-  /* "adios.pyx":221
+  /* "adios_mpi.pyx":264
  *     cdef int result
  *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)
  *     return fd             # <<<<<<<<<<<<<<
@@ -2266,15 +2348,23 @@ static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name,
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":257
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_group_name;
   char *__pyx_v_name;
   char *__pyx_v_mode;
@@ -2286,9 +2376,9 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("open (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_name,&__pyx_n_s__name,&__pyx_n_s__mode,&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group_name,&__pyx_n_s_name,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
     PyObject* values[4] = {0,0,0,0};
-    values[3] = (PyObject *)__pyx_k_2;
+    values[3] = (PyObject *)__pyx_k__2;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -2303,26 +2393,26 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_name)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[3] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2334,21 +2424,23 @@ 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 = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_mode = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_mode) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_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_comm = ((struct PyMPICommObject *)values[3]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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 = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_2open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
+  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;}
+  __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 */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2357,19 +2449,11 @@ static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_arg
   return __pyx_r;
 }
 
-/* "adios.pyx":214
- *     return adios_init(config, comm.ob_mpi)
- * 
- * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
- *                    char * name,
- *                    char * mode,
- */
-
-static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_9adios_mpi_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int64_t __pyx_t_1;
-  struct __pyx_opt_args_5adios_open __pyx_t_2;
+  struct __pyx_opt_args_9adios_mpi_open __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -2378,18 +2462,17 @@ static PyObject *__pyx_pf_5adios_2open(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_open(__pyx_v_group_name, __pyx_v_name, __pyx_v_mode, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_to_py_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2397,7 +2480,7 @@ static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char
   return __pyx_r;
 }
 
-/* "adios.pyx":223
+/* "adios_mpi.pyx":266
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -2405,15 +2488,15 @@ static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char
  *     cdef int result
  */
 
-static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
   uint64_t __pyx_v_total_size;
   CYTHON_UNUSED int __pyx_v_result;
   int64_t __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size", 0);
 
-  /* "adios.pyx":226
+  /* "adios_mpi.pyx":269
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -2422,7 +2505,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":227
+  /* "adios_mpi.pyx":270
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -2432,15 +2515,23 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":266
+ *     return fd
+ * 
+ * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
+ *     cdef uint64_t total_size
+ *     cdef int result
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   uint64_t __pyx_v_data_size;
   int __pyx_lineno = 0;
@@ -2450,7 +2541,7 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__data_size,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_data_size,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2464,16 +2555,16 @@ static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data_size)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2481,31 +2572,25 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_data_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_4set_group_size(__pyx_self, __pyx_v_fd_p, __pyx_v_data_size);
+  __pyx_r = __pyx_pf_9adios_mpi_4set_group_size(__pyx_self, __pyx_v_fd_p, __pyx_v_data_size);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":223
- *     return fd
- * 
- * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
- *     cdef uint64_t total_size
- *     cdef int result
- */
-
-static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size) {
+static PyObject *__pyx_pf_9adios_mpi_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2514,17 +2599,16 @@ 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_to_py_int64_t(__pyx_f_5adios_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2532,7 +2616,7 @@ static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":229
+/* "adios_mpi.pyx":272
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -2540,8 +2624,8 @@ static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_s
  *     if val.flags.contiguous:
  */
 
-static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
   PyArrayObject *__pyx_v_val_ = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -2555,23 +2639,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":231
+  /* "adios_mpi.pyx":274
  * cpdef int write (int64_t fd_p, char * name, np.ndarray val):
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *         val_ = val
  *     else:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":232
+    /* "adios_mpi.pyx":275
  *     cdef np.ndarray val_
  *     if val.flags.contiguous:
  *         val_ = val             # <<<<<<<<<<<<<<
@@ -2584,41 +2668,38 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
   }
   /*else*/ {
 
-    /* "adios.pyx":234
+    /* "adios_mpi.pyx":277
  *         val_ = val
  *     else:
  *         val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_INCREF(((PyObject *)__pyx_v_val));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_val));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_val));
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    __pyx_t_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__copy), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_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;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_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;}
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_5);
     __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":236
+  /* "adios_mpi.pyx":279
  *         val_ = np.array(val, copy=True)
  * 
  *     return adios_write (fd_p, name, <void *> val_.data)             # <<<<<<<<<<<<<<
@@ -2628,14 +2709,21 @@ 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;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* "adios_mpi.pyx":272
+ *     return total_size
+ * 
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_WriteUnraisable("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_WriteUnraisable("adios_mpi.write", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_val_);
@@ -2644,8 +2732,8 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArra
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   char *__pyx_v_name;
   PyArrayObject *__pyx_v_val = 0;
@@ -2656,7 +2744,7 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2671,21 +2759,21 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2694,20 +2782,22 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_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_val = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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 = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_6write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  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;}
+  __pyx_r = __pyx_pf_9adios_mpi_6write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2716,15 +2806,7 @@ static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_ar
   return __pyx_r;
 }
 
-/* "adios.pyx":229
- *     return total_size
- * 
- * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
- *     cdef np.ndarray val_
- *     if val.flags.contiguous:
- */
-
-static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
+static PyObject *__pyx_pf_9adios_mpi_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2733,17 +2815,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2751,7 +2832,7 @@ static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":238
+/* "adios_mpi.pyx":281
  *     return adios_write (fd_p, name, <void *> val_.data)
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
@@ -2759,13 +2840,13 @@ static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int6
  * 
  */
 
-static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_int", 0);
 
-  /* "adios.pyx":239
+  /* "adios_mpi.pyx":282
  * 
  * cpdef int write_int (int64_t fd_p, char * name, int val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2775,15 +2856,23 @@ 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;
 
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+  /* "adios_mpi.pyx":281
+ *     return adios_write (fd_p, name, <void *> val_.data)
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   char *__pyx_v_name;
   int __pyx_v_val;
@@ -2794,7 +2883,7 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_int (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2809,21 +2898,21 @@ static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2832,32 +2921,26 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_8write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __pyx_r = __pyx_pf_9adios_mpi_8write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":238
- *     return adios_write (fd_p, name, <void *> val_.data)
- * 
- * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val) {
+static PyObject *__pyx_pf_9adios_mpi_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2866,17 +2949,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2884,7 +2966,7 @@ static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":241
+/* "adios_mpi.pyx":284
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
@@ -2892,13 +2974,13 @@ static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self,
  * 
  */
 
-static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_long", 0);
 
-  /* "adios.pyx":242
+  /* "adios_mpi.pyx":285
  * 
  * cpdef int write_long (int64_t fd_p, char * name, long val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -2908,15 +2990,23 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":284
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   char *__pyx_v_name;
   long __pyx_v_val;
@@ -2927,7 +3017,7 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_long (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -2942,21 +3032,21 @@ static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2965,32 +3055,26 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __Pyx_PyInt_AsLong(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_10write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __pyx_r = __pyx_pf_9adios_mpi_10write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":241
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val) {
+static PyObject *__pyx_pf_9adios_mpi_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -2999,17 +3083,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3017,7 +3100,7 @@ static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":244
+/* "adios_mpi.pyx":287
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
@@ -3025,13 +3108,13 @@ static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self
  * 
  */
 
-static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_float", 0);
 
-  /* "adios.pyx":245
+  /* "adios_mpi.pyx":288
  * 
  * cpdef int write_float (int64_t fd_p, char * name, float val):
  *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
@@ -3041,15 +3124,23 @@ 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;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":287
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   char *__pyx_v_name;
   float __pyx_v_val;
@@ -3060,7 +3151,7 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write_float (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3075,21 +3166,21 @@ static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3098,32 +3189,26 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_12write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __pyx_r = __pyx_pf_9adios_mpi_12write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":244
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
- *     return adios_write (fd_p, name, &val)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val) {
+static PyObject *__pyx_pf_9adios_mpi_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3132,17 +3217,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3150,7 +3234,7 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios.pyx":247
+/* "adios_mpi.pyx":290
  *     return adios_write (fd_p, name, &val)
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -3158,8 +3242,8 @@ static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_sel
  *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
  */
 
-static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3172,7 +3256,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":248
+  /* "adios_mpi.pyx":291
  * 
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -3180,75 +3264,84 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_3)) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_3));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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_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_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_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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":249
+  /* "adios_mpi.pyx":292
  * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print "Reading ... ", val.itemsize * val.size, "(bytes)"             # <<<<<<<<<<<<<<
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_4));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_kp_s_4));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4));
+  __Pyx_INCREF(__pyx_kp_s_Reading);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_s_Reading);
+  __Pyx_GIVEREF(__pyx_kp_s_Reading);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
-  __Pyx_INCREF(((PyObject *)__pyx_kp_s_5));
-  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_kp_s_5));
-  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5));
+  __Pyx_INCREF(__pyx_kp_s_bytes);
+  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, ((PyObject *)__pyx_t_1), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (__Pyx_Print(0, __pyx_t_1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":250
+  /* "adios_mpi.pyx":293
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)             # <<<<<<<<<<<<<<
  * 
  * cpdef int close(int64_t fd_p):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyInt_from_py_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = adios_read(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val->data), __pyx_t_5);
   goto __pyx_L0;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* "adios_mpi.pyx":290
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_WriteUnraisable("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_WriteUnraisable("adios_mpi.read", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -3256,8 +3349,8 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArray
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_fd_p;
   char *__pyx_v_name;
   PyArrayObject *__pyx_v_val = 0;
@@ -3268,7 +3361,7 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("read (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd_p,&__pyx_n_s_name,&__pyx_n_s_val,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3283,21 +3376,21 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fd_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3306,20 +3399,22 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_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_val = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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 = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_14read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  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;}
+  __pyx_r = __pyx_pf_9adios_mpi_14read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3328,15 +3423,7 @@ static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_ar
   return __pyx_r;
 }
 
-/* "adios.pyx":247
- *     return adios_write (fd_p, name, &val)
- * 
- * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
- *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
- *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
- */
-
-static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
+static PyObject *__pyx_pf_9adios_mpi_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3345,17 +3432,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3363,7 +3449,7 @@ static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":252
+/* "adios_mpi.pyx":295
  *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -3371,13 +3457,13 @@ static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int6
  * 
  */
 
-static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
-static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
+static int __pyx_f_9adios_mpi_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios.pyx":253
+  /* "adios_mpi.pyx":296
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
@@ -3387,15 +3473,23 @@ static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_sk
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":295
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ * 
+ * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
+ *     return adios_close(fd_p)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
-static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p) {
+static PyObject *__pyx_pw_9adios_mpi_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p) {
   int64_t __pyx_v_fd_p;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -3404,28 +3498,22 @@ 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_from_py_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_16close(__pyx_self, ((int64_t)__pyx_v_fd_p));
+  __pyx_r = __pyx_pf_9adios_mpi_16close(__pyx_self, ((int64_t)__pyx_v_fd_p));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":252
- *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
- * 
- * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
- *     return adios_close(fd_p)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p) {
+static PyObject *__pyx_pf_9adios_mpi_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3434,17 +3522,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3452,7 +3539,7 @@ static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int
   return __pyx_r;
 }
 
-/* "adios.pyx":255
+/* "adios_mpi.pyx":298
  *     return adios_close(fd_p)
  * 
  * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -3460,8 +3547,8 @@ static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int
  * 
  */
 
-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 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) {
   int __pyx_v_mype = ((int)0);
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3476,25 +3563,32 @@ static PyObject *__pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
 
-  /* "adios.pyx":256
+  /* "adios_mpi.pyx":299
  * 
  * cpdef finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
  * 
- * ## ==========
+ * ## ====================
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(adios_finalize(__pyx_v_mype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "adios_mpi.pyx":298
+ *     return adios_close(fd_p)
+ * 
+ * cpdef 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_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3503,8 +3597,8 @@ static PyObject *__pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch,
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_mype;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -3513,7 +3607,7 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("finalize (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mype,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mype,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3527,12 +3621,12 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mype);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mype);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3542,37 +3636,31 @@ static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__py
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __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;}
     } else {
       __pyx_v_mype = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_18finalize(__pyx_self, __pyx_v_mype);
+  __pyx_r = __pyx_pf_9adios_mpi_18finalize(__pyx_self, __pyx_v_mype);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":255
- *     return adios_close(fd_p)
- * 
- * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
- *     return adios_finalize(mype)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype) {
+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;
-  struct __pyx_opt_args_5adios_finalize __pyx_t_2;
+  struct __pyx_opt_args_9adios_mpi_finalize __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -3580,17 +3668,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 = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3598,17 +3685,17 @@ static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":261
+/* "adios_mpi.pyx":304
  * ## ADIOS No-XML API
- * ## ==========
+ * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     return adios_init_noxml(comm.ob_mpi)
  * 
  */
 
-static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init_noxml *__pyx_optional_args) {
-  struct PyMPICommObject *__pyx_v_comm = __pyx_k_6;
+static PyObject *__pyx_pw_9adios_mpi_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_init_noxml *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k__3;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init_noxml", 0);
@@ -3618,8 +3705,8 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
     }
   }
 
-  /* "adios.pyx":262
- * ## ==========
+  /* "adios_mpi.pyx":305
+ * ## ====================
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
  *     return adios_init_noxml(comm.ob_mpi)             # <<<<<<<<<<<<<<
  * 
@@ -3628,15 +3715,23 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
   __pyx_r = adios_init_noxml(__pyx_v_comm->ob_mpi);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":304
+ * ## ADIOS No-XML API
+ * ## ====================
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyMPICommObject *__pyx_v_comm = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -3645,9 +3740,9 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("init_noxml (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)__pyx_k_6;
+    values[0] = (PyObject *)__pyx_k__3;
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -3660,12 +3755,12 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3678,14 +3773,16 @@ static PyObject *__pyx_pw_5adios_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 = 261; __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 = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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 = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_20init_noxml(__pyx_self, __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 = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_9adios_mpi_20init_noxml(__pyx_self, __pyx_v_comm);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3694,19 +3791,11 @@ static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__
   return __pyx_r;
 }
 
-/* "adios.pyx":261
- * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- */
-
-static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_9adios_mpi_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  struct __pyx_opt_args_5adios_init_noxml __pyx_t_2;
+  struct __pyx_opt_args_9adios_mpi_init_noxml __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -3715,18 +3804,17 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
-  __pyx_t_1 = __pyx_f_5adios_init_noxml(0, &__pyx_t_2); 
-  __pyx_t_3 = PyInt_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3734,7 +3822,7 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":264
+/* "adios_mpi.pyx":307
  *     return adios_init_noxml(comm.ob_mpi)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -3742,31 +3830,39 @@ static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self
  *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
  */
 
-static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buffer_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buffer_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
 
-  /* "adios.pyx":267
+  /* "adios_mpi.pyx":309
+ * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
- *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
- *                                  buffer_size)             # <<<<<<<<<<<<<<
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
+ *                                  buffer_size)
  * 
- * cpdef int64_t declare_group(char * name,
  */
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":307
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
+ *                           uint64_t buffer_size):
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_when;
   uint64_t __pyx_v_buffer_size;
   int __pyx_lineno = 0;
@@ -3776,7 +3872,7 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__when,&__pyx_n_s__buffer_size,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_when,&__pyx_n_s_buffer_size,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3790,16 +3886,16 @@ static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_when)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer_size)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffer_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3807,31 +3903,25 @@ 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_AsInt(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_buffer_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_22allocate_buffer(__pyx_self, __pyx_v_when, __pyx_v_buffer_size);
+  __pyx_r = __pyx_pf_9adios_mpi_22allocate_buffer(__pyx_self, __pyx_v_when, __pyx_v_buffer_size);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":264
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
- *                           uint64_t buffer_size):
- *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
- */
-
-static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size) {
+static PyObject *__pyx_pf_9adios_mpi_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -3840,17 +3930,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -3858,7 +3947,7 @@ static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios.pyx":269
+/* "adios_mpi.pyx":312
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
@@ -3866,14 +3955,14 @@ static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx
  *                             int stats):
  */
 
-static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats, CYTHON_UNUSED int __pyx_skip_dispatch) {
+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) {
   int64_t __pyx_v_id;
   int64_t __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group", 0);
 
-  /* "adios.pyx":272
+  /* "adios_mpi.pyx":315
  *                             char * time_index,
  *                             int stats):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
@@ -3882,16 +3971,16 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
  */
   __pyx_v_id = 0;
 
-  /* "adios.pyx":276
+  /* "adios_mpi.pyx":316
+ *                             int stats):
+ *     cdef int64_t id = 0
+ *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
  *                          name,
  *                          time_index,
- *                          <ADIOS_FLAG> stats)             # <<<<<<<<<<<<<<
- *     return id
- * 
  */
   adios_declare_group((&__pyx_v_id), __pyx_v_name, __pyx_v_time_index, ((ADIOS_FLAG)__pyx_v_stats));
 
-  /* "adios.pyx":277
+  /* "adios_mpi.pyx":320
  *                          time_index,
  *                          <ADIOS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -3901,15 +3990,23 @@ static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_ti
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":312
+ *                                  buffer_size)
+ * 
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index,
+ *                             int stats):
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   char *__pyx_v_name;
   char *__pyx_v_time_index;
   int __pyx_v_stats;
@@ -3920,7 +4017,7 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__name,&__pyx_n_s__time_index,&__pyx_n_s__stats,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_time_index,&__pyx_n_s_stats,0};
     PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -3935,21 +4032,21 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        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--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stats)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 2); {__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, "declare_group") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __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 = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -3958,32 +4055,26 @@ static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_time_index = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_time_index) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_stats = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 269; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
-  __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_24declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
+  __pyx_r = __pyx_pf_9adios_mpi_24declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":269
- *                                  buffer_size)
- * 
- * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
- *                             char * time_index,
- *                             int stats):
- */
-
-static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats) {
+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;
@@ -3992,17 +4083,16 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("declare_group", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_f_5adios_declare_group(__pyx_v_name, __pyx_v_time_index, __pyx_v_stats, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -4010,7 +4100,7 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":279
+/* "adios_mpi.pyx":322
  *     return id
  * 
  * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -4018,31 +4108,39 @@ static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_s
  *                      char * path,
  */
 
-static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets, CYTHON_UNUSED int __pyx_skip_dispatch) {
+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) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var", 0);
 
-  /* "adios.pyx":291
- *                             dimensions,
- *                             global_dimensions,
- *                             local_offsets)             # <<<<<<<<<<<<<<
- * 
- * cpdef int define_attribute (int64_t group,
+  /* "adios_mpi.pyx":329
+ *                      char * global_dimensions,
+ *                      char * local_offsets):
+ *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
+ *                             name, path,
+ *                             <ADIOS_DATATYPES> type,
  */
   __pyx_r = adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":322
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_group_id;
   char *__pyx_v_name;
   char *__pyx_v_path;
@@ -4057,7 +4155,7 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_var (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_id,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__dimensions,&__pyx_n_s__global_dimensions,&__pyx_n_s__local_offsets,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group_id,&__pyx_n_s_name,&__pyx_n_s_path,&__pyx_n_s_type,&__pyx_n_s_dimensions,&__pyx_n_s_global_dimensions,&__pyx_n_s_local_offsets,0};
     PyObject* values[7] = {0,0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4076,41 +4174,41 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_id)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
-        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimensions)) != 0)) kw_args--;
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dimensions)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
-        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__global_dimensions)) != 0)) kw_args--;
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_global_dimensions)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  6:
-        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__local_offsets)) != 0)) kw_args--;
+        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_local_offsets)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -4123,36 +4221,30 @@ static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
       values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
     }
-    __pyx_v_group_id = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_dimensions = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_global_dimensions = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_global_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_local_offsets = __Pyx_PyObject_AsString(values[6]); if (unlikely((!__pyx_v_local_offsets) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 279; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
-  __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_26define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
+  __pyx_r = __pyx_pf_9adios_mpi_26define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":279
- *     return id
- * 
- * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
- *                      char * name,
- *                      char * path,
- */
-
-static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets) {
+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;
@@ -4161,17 +4253,16 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("define_var", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -4179,7 +4270,7 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":293
+/* "adios_mpi.pyx":336
  *                             local_offsets)
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -4187,31 +4278,39 @@ static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self
  *                             char * path,
  */
 
-static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9adios_mpi_define_attribute(int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var, CYTHON_UNUSED int __pyx_skip_dispatch) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios.pyx":304
- *                                    <ADIOS_DATATYPES> type,
- *                                    value,
- *                                    var)             # <<<<<<<<<<<<<<
- * 
- * cpdef int select_method (int64_t group,
+  /* "adios_mpi.pyx":342
+ *                             char * value,
+ *                             char * var):
+ *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
+ *                                    name,
+ *                                    path,
  */
   __pyx_r = adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_value, __pyx_v_var);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":336
+ *                             local_offsets)
+ * 
+ * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
+ *                             char * name,
+ *                             char * path,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_group;
   char *__pyx_v_name;
   char *__pyx_v_path;
@@ -4225,7 +4324,7 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attribute (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__value,&__pyx_n_s__var,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_name,&__pyx_n_s_path,&__pyx_n_s_type,&__pyx_n_s_value,&__pyx_n_s_var,0};
     PyObject* values[6] = {0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4243,36 +4342,36 @@ static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
-        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
-        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__var)) != 0)) kw_args--;
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4284,35 +4383,29 @@ 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_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_value = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_value) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_var = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_var) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_28define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var);
+  __pyx_r = __pyx_pf_9adios_mpi_28define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":293
- *                             local_offsets)
- * 
- * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
- *                             char * name,
- *                             char * path,
- */
-
-static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var) {
+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) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -4321,17 +4414,16 @@ 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 = PyInt_FromLong(__pyx_f_5adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -4339,7 +4431,7 @@ static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":306
+/* "adios_mpi.pyx":349
  *                                    var)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -4347,31 +4439,39 @@ static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__py
  *                          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 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) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method", 0);
 
-  /* "adios.pyx":313
+  /* "adios_mpi.pyx":353
+ *                          char * parameters,
+ *                          char * base_path):
+ *     return adios_select_method (group,             # <<<<<<<<<<<<<<
  *                                 method,
  *                                 parameters,
- *                                 base_path)             # <<<<<<<<<<<<<<
- * 
- * 
  */
   __pyx_r = adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
   goto __pyx_L0;
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":349
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters,
+ */
+
+  /* function exit code */
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9adios_mpi_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int64_t __pyx_v_group;
   char *__pyx_v_method;
   char *__pyx_v_parameters;
@@ -4383,7 +4483,7 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("select_method (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__method,&__pyx_n_s__parameters,&__pyx_n_s__base_path,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_method,&__pyx_n_s_parameters,&__pyx_n_s_base_path,0};
     PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -4399,26 +4499,26 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__method)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__parameters)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base_path)) != 0)) kw_args--;
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_base_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -4428,33 +4528,27 @@ static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_group = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_method = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_method) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_base_path = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_base_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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 = 306; __pyx_clineno = __LINE__; goto __pyx_L3_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_L3_error:;
-  __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_30select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
+  __pyx_r = __pyx_pf_9adios_mpi_30select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":306
- *                                    var)
- * 
- * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
- *                          char * method,
- *                          char * parameters,
- */
-
-static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path) {
+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;
@@ -4463,17 +4557,16 @@ static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("select_method", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -4481,16 +4574,15 @@ static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":320
- * ## ==========
+/* "adios_mpi.pyx":363
+ * ## ====================
  * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
  *     cdef type ntype = None
  *     if t == adios_byte:
  */
 
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
-static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_UNUSED int __pyx_skip_dispatch) {
+static PyObject *__pyx_f_9adios_mpi_adios2nptype(ADIOS_DATATYPES __pyx_v_t) {
   PyObject *__pyx_v_ntype = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4501,9 +4593,9 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("adios2nptype", 0);
 
-  /* "adios.pyx":321
+  /* "adios_mpi.pyx":364
  * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):
+ * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None             # <<<<<<<<<<<<<<
  *     if t == adios_byte:
  *         ntype = np.int8
@@ -4511,7 +4603,7 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyObject*)Py_None);
 
-  /* "adios.pyx":346
+  /* "adios_mpi.pyx":389
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4520,8 +4612,8 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
   switch (__pyx_v_t) {
 
-    /* "adios.pyx":322
- * cpdef type adios2nptype(ADIOS_DATATYPES t):
+    /* "adios_mpi.pyx":365
+ * cdef type adios2nptype(ADIOS_DATATYPES t):
  *     cdef type ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
  *         ntype = np.int8
@@ -4529,25 +4621,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_byte:
 
-    /* "adios.pyx":323
+    /* "adios_mpi.pyx":366
  *     cdef type ntype = None
  *     if t == adios_byte:
  *         ntype = np.int8             # <<<<<<<<<<<<<<
  *     elif t == adios_short:
  *         ntype = np.int16
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
     break;
 
-    /* "adios.pyx":324
+    /* "adios_mpi.pyx":367
  *     if t == adios_byte:
  *         ntype = np.int8
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -4556,25 +4647,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_short:
 
-    /* "adios.pyx":325
+    /* "adios_mpi.pyx":368
  *         ntype = np.int8
  *     elif t == adios_short:
  *         ntype = np.int16             # <<<<<<<<<<<<<<
  *     elif t == adios_integer:
  *         ntype = np.int32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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;}
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
     break;
 
-    /* "adios.pyx":326
+    /* "adios_mpi.pyx":369
  *     elif t == adios_short:
  *         ntype = np.int16
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -4583,25 +4673,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_integer:
 
-    /* "adios.pyx":327
+    /* "adios_mpi.pyx":370
  *         ntype = np.int16
  *     elif t == adios_integer:
  *         ntype = np.int32             # <<<<<<<<<<<<<<
  *     elif t == adios_long:
  *         ntype = np.int64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__int32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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.pyx":328
+    /* "adios_mpi.pyx":371
  *     elif t == adios_integer:
  *         ntype = np.int32
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -4610,25 +4699,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_long:
 
-    /* "adios.pyx":329
+    /* "adios_mpi.pyx":372
  *         ntype = np.int32
  *     elif t == adios_long:
  *         ntype = np.int64             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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.pyx":330
+    /* "adios_mpi.pyx":373
  *     elif t == adios_long:
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -4637,25 +4725,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_byte:
 
-    /* "adios.pyx":331
+    /* "adios_mpi.pyx":374
  *         ntype = np.int64
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__uint8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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.pyx":332
+    /* "adios_mpi.pyx":375
  *     elif t == adios_unsigned_byte:
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -4664,25 +4751,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_short:
 
-    /* "adios.pyx":333
+    /* "adios_mpi.pyx":376
  *         ntype = np.uint8
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__uint16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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.pyx":334
+    /* "adios_mpi.pyx":377
  *     elif t == adios_unsigned_short:
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -4691,25 +4777,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_integer:
 
-    /* "adios.pyx":335
+    /* "adios_mpi.pyx":378
  *         ntype = np.uint16
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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.pyx":336
+    /* "adios_mpi.pyx":379
  *     elif t == adios_unsigned_integer:
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -4718,25 +4803,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_unsigned_long:
 
-    /* "adios.pyx":337
+    /* "adios_mpi.pyx":380
  *         ntype = np.uint32
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64             # <<<<<<<<<<<<<<
  *     elif t == adios_real:
  *         ntype = np.float32
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__uint64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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.pyx":338
+    /* "adios_mpi.pyx":381
  *     elif t == adios_unsigned_long:
  *         ntype = np.uint64
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -4745,25 +4829,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_real:
 
-    /* "adios.pyx":339
+    /* "adios_mpi.pyx":382
  *         ntype = np.uint64
  *     elif t == adios_real:
  *         ntype = np.float32             # <<<<<<<<<<<<<<
  *     elif t == adios_double:
  *         ntype = np.float64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__float32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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.pyx":340
+    /* "adios_mpi.pyx":383
  *     elif t == adios_real:
  *         ntype = np.float32
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -4772,25 +4855,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_double:
 
-    /* "adios.pyx":341
+    /* "adios_mpi.pyx":384
  *         ntype = np.float32
  *     elif t == adios_double:
  *         ntype = np.float64             # <<<<<<<<<<<<<<
  *     elif t == adios_long_double:
  *         ntype = np.float128
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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.pyx":342
+    /* "adios_mpi.pyx":385
  *     elif t == adios_double:
  *         ntype = np.float64
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -4799,25 +4881,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_long_double:
 
-    /* "adios.pyx":343
+    /* "adios_mpi.pyx":386
  *         ntype = np.float64
  *     elif t == adios_long_double:
  *         ntype = np.float128             # <<<<<<<<<<<<<<
  *     elif t == adios_complex:
  *         ntype = np.complex64
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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.pyx":344
+    /* "adios_mpi.pyx":387
  *     elif t == adios_long_double:
  *         ntype = np.float128
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -4826,25 +4907,24 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_complex:
 
-    /* "adios.pyx":345
+    /* "adios_mpi.pyx":388
  *         ntype = np.float128
  *     elif t == adios_complex:
  *         ntype = np.complex64             # <<<<<<<<<<<<<<
  *     elif t == adios_double_complex:
  *         ntype = np.complex128
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__complex64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    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.pyx":346
+    /* "adios_mpi.pyx":389
  *     elif t == adios_complex:
  *         ntype = np.complex64
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -4853,26 +4933,25 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  */
     case adios_double_complex:
 
-    /* "adios.pyx":347
+    /* "adios_mpi.pyx":390
  *         ntype = np.complex64
  *     elif t == adios_double_complex:
  *         ntype = np.complex128             # <<<<<<<<<<<<<<
  *     else:
  *         ntype = None
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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__complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __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 = 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 type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    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;
     default:
 
-    /* "adios.pyx":349
+    /* "adios_mpi.pyx":392
  *         ntype = np.complex128
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -4880,29 +4959,35 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
  *     return ntype
  */
     __Pyx_INCREF(Py_None);
-    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
-    __pyx_v_ntype = ((PyObject*)Py_None);
+    __Pyx_DECREF_SET(__pyx_v_ntype, ((PyObject*)Py_None));
     break;
   }
 
-  /* "adios.pyx":351
+  /* "adios_mpi.pyx":394
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
  * 
- * """
+ * cdef printfile(ADIOS_FILE * f):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   __Pyx_INCREF(((PyObject *)__pyx_v_ntype));
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "adios_mpi.pyx":363
+ * ## ====================
+ * 
+ * cdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ *     cdef type ntype = None
+ *     if t == adios_byte:
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_ntype);
@@ -4911,74 +4996,15 @@ static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_U
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
-static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t) {
-  ADIOS_DATATYPES __pyx_v_t;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("adios2nptype (wrapper)", 0);
-  assert(__pyx_arg_t); {
-    __pyx_v_t = ((ADIOS_DATATYPES)PyInt_AsLong(__pyx_arg_t)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_5adios_32adios2nptype(__pyx_self, ((ADIOS_DATATYPES)__pyx_v_t));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":320
- * ## ==========
- * 
- * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
- *     cdef type ntype = None
- *     if t == adios_byte:
- */
-
-static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("adios2nptype", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_t, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":364
- * """
+/* "adios_mpi.pyx":396
+ *     return ntype
  * 
- * cdef printAdiosFile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
+ * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)
+ *     print '%15s : %d' % ('nvars', f.nvars)
  */
 
-static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *__pyx_v_f) {
+static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4989,463 +5015,292 @@ static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosFile", 0);
+  __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios.pyx":365
+  /* "adios_mpi.pyx":397
  * 
- * cdef printAdiosFile(ADIOS_FILE * f):
+ * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)
+ *     print '%15s : %d' % ('nvars', f.nvars)
+ *     print '%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)])
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fh));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fh));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fh));
+  __Pyx_INCREF(__pyx_n_s_fh);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fh);
+  __Pyx_GIVEREF(__pyx_n_s_fh);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":366
- * cdef printAdiosFile(ADIOS_FILE * f):
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":398
+ * cdef printfile(ADIOS_FILE * f):
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ *     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 = PyInt_FromLong(__pyx_v_f->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__groups_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__groups_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__groups_count));
+  __Pyx_INCREF(__pyx_n_s_nvars);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nvars);
+  __Pyx_GIVEREF(__pyx_n_s_nvars);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":367
+  /* "adios_mpi.pyx":399
  *     print '%15s : %lu' % ('fh', f.fh)
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ *     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 = PyInt_FromLong(__pyx_v_f->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+    __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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__vars_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_INCREF(__pyx_n_s_var_namelist);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_var_namelist);
+  __Pyx_GIVEREF(__pyx_n_s_var_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":368
- *     print '%15s : %d' % ('groups_count', f.groups_count)
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":400
+ *     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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
+  __Pyx_INCREF(__pyx_n_s_nattrs);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nattrs);
+  __Pyx_GIVEREF(__pyx_n_s_nattrs);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":369
- *     print '%15s : %d' % ('vars_count', f.vars_count)
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":401
+ *     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 = PyInt_FromLong(__pyx_v_f->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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;}
+    __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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__tidx_start));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__tidx_start));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__tidx_start));
+  __Pyx_INCREF(__pyx_n_s_attr_namelist);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_attr_namelist);
+  __Pyx_GIVEREF(__pyx_n_s_attr_namelist);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":370
- *     print '%15s : %d' % ('attrs_count', f.attrs_count)
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('version', f.version)
- *     print '%15s : %lu' % ('file_size', f.file_size)
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":402
+ *     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 = PyInt_FromLong(__pyx_v_f->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__ntimesteps));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ntimesteps));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ntimesteps));
+  __Pyx_INCREF(__pyx_n_s_current_step);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_current_step);
+  __Pyx_GIVEREF(__pyx_n_s_current_step);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":371
- *     print '%15s : %d' % ('tidx_start', f.tidx_start)
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('file_size', f.file_size)
+  __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 = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":403
+ *     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 = PyInt_FromLong(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__version));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__version));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__version));
+  __Pyx_INCREF(__pyx_n_s_last_step);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_last_step);
+  __Pyx_GIVEREF(__pyx_n_s_last_step);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":372
- *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
- *     print '%15s : %d' % ('version', f.version)
- *     print '%15s : %lu' % ('file_size', f.file_size)             # <<<<<<<<<<<<<<
+  __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 = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":404
+ *     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 : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
+ *     print '%15s : %d' % ('version', f.version)
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__file_size));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__file_size));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__file_size));
+  __Pyx_INCREF(__pyx_n_s_path);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_path);
+  __Pyx_GIVEREF(__pyx_n_s_path);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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 = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":373
+  /* "adios_mpi.pyx":405
+ *     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)
- *     print '%15s : %d' % ('endianness', f.endianness)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
- * 
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__endianness));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__endianness));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__endianness));
+  __Pyx_INCREF(__pyx_n_s_endianness);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_endianness);
+  __Pyx_GIVEREF(__pyx_n_s_endianness);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":374
- *     print '%15s : %lu' % ('file_size', f.file_size)
- *     print '%15s : %d' % ('endianness', f.endianness)
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])             # <<<<<<<<<<<<<<
- * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_t_3 = __pyx_v_f->groups_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__group_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__group_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__group_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":376
- *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
- * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)
- */
-
-static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *__pyx_v_g) {
-  int __pyx_v_i;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosGroup", 0);
+  __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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":377
+  /* "adios_mpi.pyx":406
+ *     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)
  * 
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- *     print '%15s : %lu' % ('gh', g.gh)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)
  */
-  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_g->gh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__gh));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gh));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gh));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":378
- * cdef printAdiosGroup(ADIOS_GROUP * g):
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":379
- *     print '%15s : %lu' % ('gh', g.gh)
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__vars_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_INCREF(__pyx_n_s_version);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_version);
+  __Pyx_GIVEREF(__pyx_n_s_version);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":380
- *     print '%15s : %d' % ('grpid', g.grpid)
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_v_g->vars_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__var_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__var_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__var_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":381
- *     print '%15s : %d' % ('vars_count', g.vars_count)
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)             # <<<<<<<<<<<<<<
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":382
- *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])             # <<<<<<<<<<<<<<
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+  /* "adios_mpi.pyx":407
+ *     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 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __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 = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_v_g->attrs_count;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__attr_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attr_namelist));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attr_namelist));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_INCREF(__pyx_n_s_file_size);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_file_size);
+  __Pyx_GIVEREF(__pyx_n_s_file_size);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":383
- *     print '%15s : %d' % ('attrs_count', g.attrs_count)
- *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":396
+ *     return ntype
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
+ * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('fh', f.fh)
+ *     print '%15s : %d' % ('nvars', f.nvars)
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_g->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosGroup", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.printfile", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -5453,15 +5308,15 @@ static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *__pyx_v_g) {
   return __pyx_r;
 }
 
-/* "adios.pyx":385
- *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+/* "adios_mpi.pyx":409
+ *     print '%15s : %lu' % ('file_size', f.file_size)
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('grpid', v.grpid)
+ * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
  *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
  */
 
-static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
+static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -5472,160 +5327,146 @@ static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printAdiosVariable", 0);
+  __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios.pyx":386
+  /* "adios_mpi.pyx":410
  * 
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
- *     print '%15s : %d' % ('grpid', v.grpid)             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('varid', v.varid)
- *     print '%15s : %s' % ('type', adios2nptype(v.type))
- */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":387
- * cdef printAdiosVariable(ADIOS_VARINFO * v):
- *     print '%15s : %d' % ('grpid', v.grpid)
+ * 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 = PyInt_FromLong(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__varid));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__varid));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__varid));
+  __Pyx_INCREF(__pyx_n_s_varid);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_varid);
+  __Pyx_GIVEREF(__pyx_n_s_varid);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-
-  /* "adios.pyx":388
- *     print '%15s : %d' % ('grpid', v.grpid)
+  __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 = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":411
+ * 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, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __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 = 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 = 388; __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(((PyObject *)__pyx_n_s__type));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__type));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__type));
+  __Pyx_INCREF(__pyx_n_s_type);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_type);
+  __Pyx_GIVEREF(__pyx_n_s_type);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":389
+  /* "adios_mpi.pyx":412
  *     print '%15s : %d' % ('varid', v.varid)
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)             # <<<<<<<<<<<<<<
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
- *     print '%15s : %d' % ('timedim', v.timedim)
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__ndim));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ndim));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndim));
+  __Pyx_INCREF(__pyx_n_s_ndim);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ndim);
+  __Pyx_GIVEREF(__pyx_n_s_ndim);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":390
+  /* "adios_mpi.pyx":413
  *     print '%15s : %s' % ('type', adios2nptype(v.type))
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])             # <<<<<<<<<<<<<<
- *     print '%15s : %d' % ('timedim', v.timedim)
+ *     print '%15s : %d' % ('nsteps', v.nsteps)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_v->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    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;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__dims));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__dims));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__dims));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_INCREF(__pyx_n_s_dims);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_dims);
+  __Pyx_GIVEREF(__pyx_n_s_dims);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":391
+  /* "adios_mpi.pyx":414
  *     print '%15s : %d' % ('ndim', v.ndim)
  *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
- *     print '%15s : %d' % ('timedim', v.timedim)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('nsteps', v.nsteps)             # <<<<<<<<<<<<<<
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
+ * ## ====================
  */
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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(((PyObject *)__pyx_n_s__timedim));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__timedim));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__timedim));
+  __Pyx_INCREF(__pyx_n_s_nsteps);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_nsteps);
+  __Pyx_GIVEREF(__pyx_n_s_nsteps);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":409
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ * 
+ * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ */
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.printAdiosVariable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.printvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -5633,342 +5474,92 @@ static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
   return __pyx_r;
 }
 
-/* "adios.pyx":393
- *     print '%15s : %d' % ('timedim', v.timedim)
+/* "adios_mpi.pyx":420
+ * ## ====================
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):             # <<<<<<<<<<<<<<
- *     if t == adios_byte :
- *         return (<char *> val)[0]
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI.Comm comm = MPI.COMM_WORLD,
+ *                 char * parameters = ""):
  */
 
-static PyObject *__pyx_f_5adios_adios2scalar(ADIOS_DATATYPES __pyx_v_t, void *__pyx_v_val) {
+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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("adios2scalar", 0);
-
-  /* "adios.pyx":414
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
- *         return (<long double *> val)[0]
- *     else:
- */
-  switch (__pyx_v_t) {
+  __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":394
+  /* "adios_mpi.pyx":423
+ *                 MPI.Comm comm = MPI.COMM_WORLD,
+ *                 char * parameters = ""):
+ *     return adios_read_init_method (method, comm.ob_mpi, parameters)             # <<<<<<<<<<<<<<
+ * 
  * 
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
- *     if t == adios_byte :             # <<<<<<<<<<<<<<
- *         return (<char *> val)[0]
- *     elif t == adios_short:
- */
-    case adios_byte:
-
-    /* "adios.pyx":395
- * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
- *     if t == adios_byte :
- *         return (<char *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_short:
- *         return (<short *> val)[0]
  */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
+  __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;
 
-    /* "adios.pyx":396
- *     if t == adios_byte :
- *         return (<char *> val)[0]
- *     elif t == adios_short:             # <<<<<<<<<<<<<<
- *         return (<short *> val)[0]
- *     elif t == adios_integer:
+  /* "adios_mpi.pyx":420
+ * ## ====================
+ * 
+ * cpdef read_init(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,             # <<<<<<<<<<<<<<
+ *                 MPI.Comm comm = MPI.COMM_WORLD,
+ *                 char * parameters = ""):
  */
-    case adios_short:
 
-    /* "adios.pyx":397
- *         return (<char *> val)[0]
- *     elif t == adios_short:
- *         return (<short *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_integer:
- *         return (<int *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":398
- *     elif t == adios_short:
- *         return (<short *> val)[0]
- *     elif t == adios_integer:             # <<<<<<<<<<<<<<
- *         return (<int *> val)[0]
- *     elif t == adios_long:
- */
-    case adios_integer:
-
-    /* "adios.pyx":399
- *         return (<short *> val)[0]
- *     elif t == adios_integer:
- *         return (<int *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_long:
- *         return (<long *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":400
- *     elif t == adios_integer:
- *         return (<int *> val)[0]
- *     elif t == adios_long:             # <<<<<<<<<<<<<<
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:
- */
-    case adios_long:
-
-    /* "adios.pyx":401
- *         return (<int *> val)[0]
- *     elif t == adios_long:
- *         return (<long *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":402
- *     elif t == adios_long:
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:
- */
-    case adios_unsigned_byte:
-
-    /* "adios.pyx":403
- *         return (<long *> val)[0]
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((unsigned char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":404
- *     elif t == adios_unsigned_byte:
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:
- */
-    case adios_unsigned_short:
-
-    /* "adios.pyx":405
- *         return (<unsigned char *> val)[0]
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyInt_FromLong((((unsigned short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":406
- *     elif t == adios_unsigned_short:
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:
- */
-    case adios_unsigned_integer:
-
-    /* "adios.pyx":407
- *         return (<unsigned short *> val)[0]
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":408
- *     elif t == adios_unsigned_integer:
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:
- */
-    case adios_unsigned_long:
-
-    /* "adios.pyx":409
- *         return (<unsigned int *> val)[0]
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_real:
- *         return (<float *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":410
- *     elif t == adios_unsigned_long:
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:             # <<<<<<<<<<<<<<
- *         return (<float *> val)[0]
- *     elif t == adios_double:
- */
-    case adios_real:
-
-    /* "adios.pyx":411
- *         return (<unsigned long *> val)[0]
- *     elif t == adios_real:
- *         return (<float *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((float *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":412
- *     elif t == adios_real:
- *         return (<float *> val)[0]
- *     elif t == adios_double:             # <<<<<<<<<<<<<<
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:
- */
-    case adios_double:
-
-    /* "adios.pyx":413
- *         return (<float *> val)[0]
- *     elif t == adios_double:
- *         return (<double *> val)[0]             # <<<<<<<<<<<<<<
- *     elif t == adios_long_double:
- *         return (<long double *> val)[0]
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-
-    /* "adios.pyx":414
- *     elif t == adios_double:
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
- *         return (<long double *> val)[0]
- *     else:
- */
-    case adios_long_double:
-
-    /* "adios.pyx":415
- *         return (<double *> val)[0]
- *     elif t == adios_long_double:
- *         return (<long double *> val)[0]             # <<<<<<<<<<<<<<
- *     else:
- *         return None
- */
-    __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = PyFloat_FromDouble((((long double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_r = __pyx_t_1;
-    __pyx_t_1 = 0;
-    goto __pyx_L0;
-    break;
-    default:
-
-    /* "adios.pyx":417
- *         return (<long double *> val)[0]
- *     else:
- *         return None             # <<<<<<<<<<<<<<
- * 
- * ## ==========
- */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-    break;
-  }
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.adios2scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  char *__pyx_v_fname;
+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;
   struct PyMPICommObject *__pyx_v_comm = 0;
+  char *__pyx_v_parameters;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  int __pyx_r;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("read_init (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fname,&__pyx_n_s__comm,0};
-    PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)__pyx_k_10;
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__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)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -5977,326 +5568,609 @@ static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fname)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[0] = value; kw_args--; }
+        }
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[1] = value; kw_args--; }
         }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parameters);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else {
       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;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_fname = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_fname) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    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;}
+    } else {
+      __pyx_v_method = __pyx_k__4;
+    }
     __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;}
+    } else {
+      __pyx_v_parameters = ((char *)__pyx_k__6);
+    }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return -1;
+  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 = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_9AdiosFile___init__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), __pyx_v_fname, __pyx_v_comm);
+  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);
+
+  /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __pyx_r = -1;
+  __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":440
- *     cpdef public dict group
- * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.fp = NULL
- *         self.group = {}
- */
-
-static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm) {
-  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_g = 0;
-  PyObject *__pyx_v_grpname = NULL;
-  int __pyx_v_i;
-  int __pyx_r;
+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) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  uint64_t __pyx_t_4;
-  int __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
+  struct __pyx_opt_args_9adios_mpi_read_init __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__init__", 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.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;
+  goto __pyx_L0;
 
-  /* "adios.pyx":441
- * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
- *         self.fp = NULL             # <<<<<<<<<<<<<<
- *         self.group = {}
- * 
- */
-  __pyx_v_self->fp = NULL;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "adios.pyx":442
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
- *         self.fp = NULL
- *         self.group = {}             # <<<<<<<<<<<<<<
+/* "adios_mpi.pyx":426
  * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)
- */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "adios.pyx":444
- *         self.group = {}
  * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
  * 
  */
-  __pyx_v_self->fp = adios_fopen(__pyx_v_fname, __pyx_v_comm->ob_mpi);
 
-  /* "adios.pyx":445
- * 
- *         self.fp = adios_fopen(fname, comm.ob_mpi)
- *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- * 
- *         self.name         = fname.split('/')[-1]  ## basename
- */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+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;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  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;
+    }
   }
-  #endif
 
-  /* "adios.pyx":447
- *         assert self.fp != NULL, 'Not an open file'
+  /* "adios_mpi.pyx":427
  * 
- *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+ *     return adios_read_finalize_method (method)             # <<<<<<<<<<<<<<
+ * 
+ * cdef class file:
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_t_1), __pyx_n_s__split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_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_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GIVEREF(__pyx_t_2);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "adios.pyx":448
- * 
- *         self.name         = fname.split('/')[-1]  ## basename
- *         self.groups_count = self.fp.groups_count             # <<<<<<<<<<<<<<
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count
- */
-  __pyx_t_3 = __pyx_v_self->fp->groups_count;
-  __pyx_v_self->groups_count = __pyx_t_3;
-
-  /* "adios.pyx":449
- *         self.name         = fname.split('/')[-1]  ## basename
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count             # <<<<<<<<<<<<<<
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start
- */
-  __pyx_t_3 = __pyx_v_self->fp->vars_count;
-  __pyx_v_self->vars_count = __pyx_t_3;
-
-  /* "adios.pyx":450
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count             # <<<<<<<<<<<<<<
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps
- */
-  __pyx_t_3 = __pyx_v_self->fp->attrs_count;
-  __pyx_v_self->attrs_count = __pyx_t_3;
-
-  /* "adios.pyx":451
- *         self.vars_count   = self.fp.vars_count
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start             # <<<<<<<<<<<<<<
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version
- */
-  __pyx_t_3 = __pyx_v_self->fp->tidx_start;
-  __pyx_v_self->tidx_start = __pyx_t_3;
-
-  /* "adios.pyx":452
- *         self.attrs_count  = self.fp.attrs_count
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps             # <<<<<<<<<<<<<<
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size
- */
-  __pyx_t_3 = __pyx_v_self->fp->ntimesteps;
-  __pyx_v_self->ntimesteps = __pyx_t_3;
-
-  /* "adios.pyx":453
- *         self.tidx_start   = self.fp.tidx_start
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version             # <<<<<<<<<<<<<<
- *         self.file_size    = self.fp.file_size
- *         self.endianness   = self.fp.endianness
+  /* "adios_mpi.pyx":426
+ * 
+ * 
+ * cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):             # <<<<<<<<<<<<<<
+ *     return adios_read_finalize_method (method)
+ * 
  */
-  __pyx_t_3 = __pyx_v_self->fp->version;
-  __pyx_v_self->version = __pyx_t_3;
 
-  /* "adios.pyx":454
- *         self.ntimesteps   = self.fp.ntimesteps
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size             # <<<<<<<<<<<<<<
- *         self.endianness   = self.fp.endianness
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_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;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("read_finalize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          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;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    if (values[0]) {
+      __pyx_v_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;}
+    } else {
+      __pyx_v_method = __pyx_k__7;
+    }
+  }
+  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_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);
+
+  /* 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) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_9adios_mpi_read_finalize __pyx_t_2;
+  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;
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":446
+ *     cpdef public dict attr
  * 
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI.Comm comm = MPI.COMM_WORLD):
  */
-  __pyx_t_4 = __pyx_v_self->fp->file_size;
-  __pyx_v_self->file_size = __pyx_t_4;
 
-  /* "adios.pyx":455
- *         self.version      = self.fp.version
- *         self.file_size    = self.fp.file_size
- *         self.endianness   = self.fp.endianness             # <<<<<<<<<<<<<<
+/* 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;
+  struct PyMPICommObject *__pyx_v_comm = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_method,&__pyx_n_s_comm,0};
+    PyObject* values[3] = {0,0,0};
+    values[2] = (PyObject *)__pyx_k__8;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fname)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[2] = 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;}
+      }
+    } else {
+      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_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;}
+    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;}
+    } else {
+      __pyx_v_method = __pyx_k__9;
+    }
+    __pyx_v_comm = ((struct PyMPICommObject *)values[2]);
+  }
+  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_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);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  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) {
+  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_5;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "adios_mpi.pyx":449
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI.Comm comm = MPI.COMM_WORLD):
+ *         self.fp = NULL             # <<<<<<<<<<<<<<
+ *         self.var = {}
+ *         self.attr = {}
+ */
+  __pyx_v_self->fp = NULL;
+
+  /* "adios_mpi.pyx":450
+ *                  MPI.Comm comm = MPI.COMM_WORLD):
+ *         self.fp = NULL
+ *         self.var = {}             # <<<<<<<<<<<<<<
+ *         self.attr = {}
+ * 
+ */
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":451
+ *         self.fp = NULL
+ *         self.var = {}
+ *         self.attr = {}             # <<<<<<<<<<<<<<
+ * 
+ *         self.fp = adios_read_open_file(fname, method, comm.ob_mpi)
+ */
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":453
+ *         self.attr = {}
+ * 
+ *         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);
+
+  /* "adios_mpi.pyx":454
+ * 
+ *         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
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  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;}
+    }
+  }
+  #endif
+
+  /* "adios_mpi.pyx":456
+ *         assert self.fp != NULL, 'Not an open file'
  * 
- *         cdef AdiosGroup g
+ *         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_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_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_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_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":457
+ * 
+ *         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;
+
+  /* "adios_mpi.pyx":458
+ *         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;
+
+  /* "adios_mpi.pyx":459
+ *         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;
+
+  /* "adios_mpi.pyx":460
+ *         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;
+
+  /* "adios_mpi.pyx":461
+ *         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;
 
-  /* "adios.pyx":458
+  /* "adios_mpi.pyx":462
+ *         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;
+
+  /* "adios_mpi.pyx":463
+ *         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;
+
+  /* "adios_mpi.pyx":465
+ *         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)
  * 
- *         cdef AdiosGroup g
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:             # <<<<<<<<<<<<<<
- *             g = AdiosGroup(self, grpname)
- *             self.group[grpname] = g
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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->groups_count;
+  __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->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    __pyx_t_1 = __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 = ((PyObject *)__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 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;
   for (;;) {
     if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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;}
     #else
-    __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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;}
     #endif
-    __Pyx_XDECREF(__pyx_v_grpname);
-    __pyx_v_grpname = __pyx_t_2;
+    __Pyx_XDECREF_SET(__pyx_v_varname, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":459
- *         cdef AdiosGroup g
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
- *             g = AdiosGroup(self, grpname)             # <<<<<<<<<<<<<<
- *             self.group[grpname] = g
+    /* "adios_mpi.pyx":466
+ * 
+ *         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 = 459; __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 = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_grpname);
-    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_grpname);
-    __Pyx_GIVEREF(__pyx_v_grpname);
-    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosGroup)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_INCREF(__pyx_v_varname);
+    PyTuple_SET_ITEM(__pyx_t_2, 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(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __Pyx_XDECREF(((PyObject *)__pyx_v_g));
-    __pyx_v_g = ((struct __pyx_obj_5adios_AdiosGroup *)__pyx_t_7);
-    __pyx_t_7 = 0;
-
-    /* "adios.pyx":460
- *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
- *             g = AdiosGroup(self, grpname)
- *             self.group[grpname] = g             # <<<<<<<<<<<<<<
- * 
- *     def __del__(self):
- */
-    if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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 = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    if (PyDict_SetItem(((PyObject *)__pyx_v_self->group), __pyx_v_grpname, ((PyObject *)__pyx_v_g)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    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;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios_mpi.pyx":446
+ *     cpdef public dict attr
+ * 
+ *     def __init__(self, char * fname,             # <<<<<<<<<<<<<<
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI.Comm comm = MPI.COMM_WORLD):
+ */
+
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_g);
-  __Pyx_XDECREF(__pyx_v_grpname);
+  __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":468
+ *             self.var[varname] = var(self, varname)
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *             self.close()
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9adios_mpi_4file_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_2__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_2__del__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":462
- *             self.group[grpname] = g
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6305,22 +6179,31 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_Adi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":463
+  /* "adios_mpi.pyx":469
  * 
  *     def __del__(self):
- *         self.close()             # <<<<<<<<<<<<<<
+ *             self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios_mpi.pyx":468
+ *             self.var[varname] = var(self, varname)
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *             self.close()
+ * 
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6328,24 +6211,20 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_Adi
   return __pyx_r;
 }
 
-/* "adios.pyx":465
- *         self.close()
+/* "adios_mpi.pyx":471
+ *             self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
  *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
+ *         adios_read_close(self.fp)
  */
 
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_v_g = NULL;
+static PyObject *__pyx_pw_9adios_mpi_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -6354,11 +6233,11 @@ static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -6368,141 +6247,76 @@ static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":466
+  /* "adios_mpi.pyx":472
  * 
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         for g in self.group.values():
- *             g.close()
+ *         adios_read_close(self.fp)
+ *         self.fp = NULL
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":467
+  /* "adios_mpi.pyx":473
  *     cpdef close(self):
  *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():             # <<<<<<<<<<<<<<
- *             g.close()
- *         adios_fclose(self.fp)
- */
-  if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->group); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
-    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
-    __pyx_t_4 = NULL;
-  } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else {
-      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
-      if (unlikely(!__pyx_t_1)) {
-        if (PyErr_Occurred()) {
-          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_1);
-    }
-    __Pyx_XDECREF(__pyx_v_g);
-    __pyx_v_g = __pyx_t_1;
-    __pyx_t_1 = 0;
-
-    /* "adios.pyx":468
- *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
- *             g.close()             # <<<<<<<<<<<<<<
- *         adios_fclose(self.fp)
- *         self.fp = NULL
- */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "adios.pyx":469
- *         for g in self.group.values():
- *             g.close()
- *         adios_fclose(self.fp)             # <<<<<<<<<<<<<<
+ *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
  *         self.fp = NULL
  * 
  */
-  adios_fclose(__pyx_v_self->fp);
+  adios_read_close(__pyx_v_self->fp);
 
-  /* "adios.pyx":470
- *             g.close()
- *         adios_fclose(self.fp)
+  /* "adios_mpi.pyx":474
+ *         assert self.fp != NULL, 'Not an open file'
+ *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
  * 
  *     cpdef printself(self):
  */
   __pyx_v_self->fp = NULL;
 
+  /* "adios_mpi.pyx":471
+ *             self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         adios_read_close(self.fp)
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_g);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9adios_mpi_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4close(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4close(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":465
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
- *         for g in self.group.values():
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_4close(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6511,17 +6325,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6529,7 +6342,7 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
   return __pyx_r;
 }
 
-/* "adios.pyx":472
+/* "adios_mpi.pyx":476
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -6537,8 +6350,8 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_Adios
  *         print '=== AdiosFile ==='
  */
 
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_4file_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6551,11 +6364,11 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -6565,7 +6378,7 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":473
+  /* "adios_mpi.pyx":477
  * 
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -6573,61 +6386,72 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":474
+  /* "adios_mpi.pyx":478
  *     cpdef printself(self):
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='             # <<<<<<<<<<<<<<
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
- *         printAdiosFile(self.fp)
+ *         printfile(self.fp)
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PrintOne(0, __pyx_kp_s_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "adios.pyx":475
+  /* "adios_mpi.pyx":479
  *         assert self.fp != NULL, 'Not an open file'
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)             # <<<<<<<<<<<<<<
- *         printAdiosFile(self.fp)
+ *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
+  __Pyx_INCREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
+  __Pyx_GIVEREF(__pyx_n_s_fp);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":476
+  /* "adios_mpi.pyx":480
  *         print '=== AdiosFile ==='
  *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
- *         printAdiosFile(self.fp)             # <<<<<<<<<<<<<<
- * 
+ *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
+ * cdef class var:
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosFile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios_mpi.pyx":476
+ *         self.fp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6636,25 +6460,19 @@ static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_Adi
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+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_5adios_9AdiosFile_6printself(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __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;
 }
 
-/* "adios.pyx":472
- *         self.fp = NULL
- * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.fp != NULL, 'Not an open file'
- *         print '=== AdiosFile ==='
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+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;
@@ -6663,17 +6481,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_A
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6681,35 +6498,37 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_A
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":434
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int nvars
+ *     cpdef public int nattrs
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_4name_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4name___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":428
- * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int groups_count
- *     cpdef public int vars_count
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_4name___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  __Pyx_INCREF(__pyx_v_self->name);
+  __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -6717,34 +6536,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adio
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4name_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_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_4name_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.file.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -6752,51 +6578,56 @@ static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_Adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_9adios_mpi_4file_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_4name_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4name_4__del__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static int __pyx_pf_9adios_mpi_4file_4name_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":435
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int nvars             # <<<<<<<<<<<<<<
+ *     cpdef public int nattrs
+ *     cpdef public int current_step
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_5nvars_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_5nvars_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_5nvars___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":429
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int groups_count             # <<<<<<<<<<<<<<
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6805,17 +6636,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.nvars.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6824,17 +6654,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_5nvars_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_5nvars_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_5nvars_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_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_5nvars_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6842,39 +6674,42 @@ static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->groups_count = __pyx_t_1;
+  __pyx_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_v_self->nvars = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.nvars.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":436
+ *     cpdef public bytes name
+ *     cpdef public int nvars
+ *     cpdef public int nattrs             # <<<<<<<<<<<<<<
+ *     cpdef public int current_step
+ *     cpdef public int last_step
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_6nattrs_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_6nattrs_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_6nattrs___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":430
- *     cpdef public bytes name
- *     cpdef public int groups_count
- *     cpdef public int vars_count             # <<<<<<<<<<<<<<
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6883,17 +6718,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.nattrs.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6902,17 +6736,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_6nattrs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_6nattrs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_6nattrs_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_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_6nattrs_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6920,39 +6756,42 @@ static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->vars_count = __pyx_t_1;
+  __pyx_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_v_self->nattrs = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.nattrs.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":437
+ *     cpdef public int nvars
+ *     cpdef public int nattrs
+ *     cpdef public int current_step             # <<<<<<<<<<<<<<
+ *     cpdef public int last_step
+ *     cpdef public int endianness
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_12current_step_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_12current_step_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_12current_step___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":431
- *     cpdef public int groups_count
- *     cpdef public int vars_count
- *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6961,17 +6800,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.current_step.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -6980,17 +6818,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_o
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_12current_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_12current_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_12current_step_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_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_12current_step_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6998,39 +6838,42 @@ static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5a
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->attrs_count = __pyx_t_1;
+  __pyx_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_v_self->current_step = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.current_step.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":438
+ *     cpdef public int nattrs
+ *     cpdef public int current_step
+ *     cpdef public int last_step             # <<<<<<<<<<<<<<
+ *     cpdef public int endianness
+ *     cpdef public int version
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_9last_step_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_9last_step_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9last_step___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":432
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start             # <<<<<<<<<<<<<<
- *     cpdef public int ntimesteps
- *     cpdef public int version
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7039,17 +6882,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.last_step.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7058,17 +6900,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_9last_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_9last_step_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9last_step_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_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_9last_step_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7076,39 +6920,42 @@ static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->tidx_start = __pyx_t_1;
+  __pyx_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_v_self->last_step = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.last_step.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":439
+ *     cpdef public int current_step
+ *     cpdef public int last_step
+ *     cpdef public int endianness             # <<<<<<<<<<<<<<
+ *     cpdef public int version
+ *     cpdef public int file_size
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_10endianness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_10endianness_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_10endianness___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":433
- *     cpdef public int attrs_count
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps             # <<<<<<<<<<<<<<
- *     cpdef public int version
- *     cpdef public int file_size
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7117,17 +6964,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.endianness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7136,17 +6982,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_10endianness_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_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_10endianness_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7154,39 +7002,42 @@ static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5ad
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->ntimesteps = __pyx_t_1;
+  __pyx_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_v_self->endianness = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.endianness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":440
+ *     cpdef public int last_step
+ *     cpdef public int endianness
+ *     cpdef public int version             # <<<<<<<<<<<<<<
+ *     cpdef public int file_size
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_7version_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_7version___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":434
- *     cpdef public int tidx_start
- *     cpdef public int ntimesteps
- *     cpdef public int version             # <<<<<<<<<<<<<<
- *     cpdef public int file_size
- *     cpdef public int endianness
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7195,17 +7046,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5a
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7214,17 +7064,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5a
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_7version_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_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_7version_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7232,39 +7084,42 @@ static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_v_self->version = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.version.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.version.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":441
+ *     cpdef public int endianness
+ *     cpdef public int version
+ *     cpdef public int file_size             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef public dict var
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_9file_size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_9file_size_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9file_size___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":435
- *     cpdef public int ntimesteps
- *     cpdef public int version
- *     cpdef public int file_size             # <<<<<<<<<<<<<<
- *     cpdef public int endianness
- * 
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7273,17 +7128,16 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.file_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.file_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7292,17 +7146,19 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_9file_size_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_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_9file_size_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7310,59 +7166,51 @@ static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adio
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_v_self->file_size = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.file_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.file.file_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":443
+ *     cpdef public int file_size
+ * 
+ *     cpdef public dict var             # <<<<<<<<<<<<<<
+ *     cpdef public dict attr
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_4file_3var_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_3var_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_3var___get__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":436
- *     cpdef public int version
- *     cpdef public int file_size
- *     cpdef public int endianness             # <<<<<<<<<<<<<<
- * 
- *     cpdef public dict group
- */
-
-static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_4file_3var___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 = PyInt_FromLong(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __Pyx_INCREF(__pyx_v_self->var);
+  __pyx_r = __pyx_v_self->var;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosFile.endianness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -7370,31 +7218,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_ob
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_3var_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_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_3var_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->endianness = __pyx_t_1;
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.endianness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.file.var.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -7402,34 +7260,65 @@ static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5ad
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_9adios_mpi_4file_3var_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_3var_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_4file_3var_4__del__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":438
- *     cpdef public int endianness
+static int __pyx_pf_9adios_mpi_4file_3var_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(__pyx_v_self->var);
+  __pyx_v_self->var = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":444
  * 
- *     cpdef public dict group             # <<<<<<<<<<<<<<
+ *     cpdef public dict var
+ *     cpdef public dict attr             # <<<<<<<<<<<<<<
  * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+ *     def __init__(self, char * fname,
  */
 
-static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_4file_4attr_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_4file_4attr_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4attr___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_4attr___get__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->group));
-  __pyx_r = ((PyObject *)__pyx_v_self->group);
+  __Pyx_INCREF(__pyx_v_self->attr);
+  __pyx_r = __pyx_v_self->attr;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -7437,34 +7326,41 @@ static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_4file_4attr_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_4attr_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4attr_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_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_4file_4attr_2__set__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosFile.group.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.file.attr.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -7472,35 +7368,46 @@ static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_Ad
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_9adios_mpi_4file_4attr_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_4file_4attr_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_4file_4attr_4__del__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+static int __pyx_pf_9adios_mpi_4file_4attr_4__del__(struct __pyx_obj_9adios_mpi_file *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = ((PyObject*)Py_None);
+  __Pyx_GOTREF(__pyx_v_self->attr);
+  __Pyx_DECREF(__pyx_v_self->attr);
+  __pyx_v_self->attr = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":495
+ *     cpdef public int nsteps
+ * 
+ *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
+ *         self.file = file
+ *         self.vp = NULL
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct __pyx_obj_5adios_AdiosFile *__pyx_v_file = 0;
+static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct __pyx_obj_9adios_mpi_file *__pyx_v_file = 0;
   char *__pyx_v_name;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -7509,7 +7416,7 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file,&__pyx_n_s_name,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -7523,16 +7430,16 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7540,19 +7447,21 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_file = ((struct __pyx_obj_5adios_AdiosFile *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __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;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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_5adios_AdiosFile, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup___init__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
+  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;}
+  __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 */
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = -1;
@@ -7561,17 +7470,7 @@ static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":494
- *     cpdef public dict var
- * 
- *     def __init__(self, AdiosFile file, char * name):             # <<<<<<<<<<<<<<
- *         self.file = file
- *         self.var = {}
- */
-
-static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name) {
-  struct __pyx_obj_5adios_AdiosVariable *__pyx_v_v = 0;
-  PyObject *__pyx_v_varname = NULL;
+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) {
   int __pyx_v_i;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -7579,18 +7478,16 @@ static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGr
   int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":495
+  /* "adios_mpi.pyx":496
  * 
- *     def __init__(self, AdiosFile file, char * name):
+ *     def __init__(self, file file, char * name):
  *         self.file = file             # <<<<<<<<<<<<<<
- *         self.var = {}
+ *         self.vp = NULL
  * 
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_file));
@@ -7599,211 +7496,185 @@ static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGr
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":496
- *     def __init__(self, AdiosFile file, char * name):
+  /* "adios_mpi.pyx":497
+ *     def __init__(self, file file, char * name):
  *         self.file = file
- *         self.var = {}             # <<<<<<<<<<<<<<
+ *         self.vp = NULL             # <<<<<<<<<<<<<<
  * 
- *         self.gp = adios_gopen(self.file.fp, name)
+ *         assert self.file.fp != NULL, 'Not an open file'
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":498
- *         self.var = {}
- * 
- *         self.gp = adios_gopen(self.file.fp, name)             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open group'
+  /* "adios_mpi.pyx":499
+ *         self.vp = NULL
  * 
+ *         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'
  */
-  __pyx_v_self->gp = adios_gopen(__pyx_v_self->file->fp, __pyx_v_name);
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  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;}
+    }
+  }
+  #endif
 
-  /* "adios.pyx":499
+  /* "adios_mpi.pyx":500
  * 
- *         self.gp = adios_gopen(self.file.fp, name)
- *         assert self.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
+ *         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'
+ * 
+ */
+  __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_v_name);
+
+  /* "adios_mpi.pyx":501
+ *         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'             # <<<<<<<<<<<<<<
  * 
- *         self.name         = name
+ *         self.name = name
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":501
- *         assert self.gp != NULL, 'Not an open group'
+  /* "adios_mpi.pyx":503
+ *         assert self.vp != NULL, 'Not a valid var'
  * 
- *         self.name         = name             # <<<<<<<<<<<<<<
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count
+ *         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 = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":502
+  /* "adios_mpi.pyx":504
  * 
- *         self.name         = name
- *         self.grpid        = self.gp.grpid             # <<<<<<<<<<<<<<
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count
- */
-  __pyx_t_2 = __pyx_v_self->gp->grpid;
-  __pyx_v_self->grpid = __pyx_t_2;
-
-  /* "adios.pyx":503
- *         self.name         = name
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count             # <<<<<<<<<<<<<<
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep
- */
-  __pyx_t_2 = __pyx_v_self->gp->vars_count;
-  __pyx_v_self->vars_count = __pyx_t_2;
-
-  /* "adios.pyx":504
- *         self.grpid        = self.gp.grpid
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count             # <<<<<<<<<<<<<<
- *         self.timestep     = self.gp.timestep
- *         self.lasttimestep = self.gp.lasttimestep
+ *         self.name = name
+ *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
+ *         self.type = adios2nptype(self.vp.type)
+ *         self.ndim = self.vp.ndim
  */
-  __pyx_t_2 = __pyx_v_self->gp->attrs_count;
-  __pyx_v_self->attrs_count = __pyx_t_2;
+  __pyx_t_2 = __pyx_v_self->vp->varid;
+  __pyx_v_self->varid = __pyx_t_2;
 
-  /* "adios.pyx":505
- *         self.vars_count   = self.gp.vars_count
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep             # <<<<<<<<<<<<<<
- *         self.lasttimestep = self.gp.lasttimestep
- * 
+  /* "adios_mpi.pyx":505
+ *         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_2 = __pyx_v_self->gp->timestep;
-  __pyx_v_self->timestep = __pyx_t_2;
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "adios.pyx":506
- *         self.attrs_count  = self.gp.attrs_count
- *         self.timestep     = self.gp.timestep
- *         self.lasttimestep = self.gp.lasttimestep             # <<<<<<<<<<<<<<
- * 
- *         cdef AdiosVariable v
+  /* "adios_mpi.pyx":506
+ *         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)])
+ *         self.nsteps = self.vp.nsteps
  */
-  __pyx_t_2 = __pyx_v_self->gp->lasttimestep;
-  __pyx_v_self->lasttimestep = __pyx_t_2;
+  __pyx_t_2 = __pyx_v_self->vp->ndim;
+  __pyx_v_self->ndim = __pyx_t_2;
 
-  /* "adios.pyx":509
+  /* "adios_mpi.pyx":507
+ *         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
  * 
- *         cdef AdiosVariable v
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:             # <<<<<<<<<<<<<<
- *             v = AdiosVariable(self, varname)
- *             self.var[varname] = v
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_v_self->vars_count;
+  __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_PyBytes_FromString((__pyx_v_self->gp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    __pyx_t_4 = __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_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;}
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_t_4 = ((PyObject *)__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  for (;;) {
-    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #endif
-    __Pyx_XDECREF(__pyx_v_varname);
-    __pyx_v_varname = __pyx_t_1;
-    __pyx_t_1 = 0;
+  __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_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_GIVEREF(__pyx_t_4);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-    /* "adios.pyx":510
- *         cdef AdiosVariable v
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
- *             v = AdiosVariable(self, varname)             # <<<<<<<<<<<<<<
- *             self.var[varname] = v
+  /* "adios_mpi.pyx":508
+ *         self.ndim = self.vp.ndim
+ *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
  * 
+ *     def __del__(self):
  */
-    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosVariable)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-    __Pyx_XDECREF(((PyObject *)__pyx_v_v));
-    __pyx_v_v = ((struct __pyx_obj_5adios_AdiosVariable *)__pyx_t_6);
-    __pyx_t_6 = 0;
-
-    /* "adios.pyx":511
- *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
- *             v = AdiosVariable(self, varname)
- *             self.var[varname] = v             # <<<<<<<<<<<<<<
+  __pyx_t_2 = __pyx_v_self->vp->nsteps;
+  __pyx_v_self->nsteps = __pyx_t_2;
+
+  /* "adios_mpi.pyx":495
+ *     cpdef public int nsteps
  * 
- *     def __del__(self):
+ *     def __init__(self, file file, char * name):             # <<<<<<<<<<<<<<
+ *         self.file = file
+ *         self.vp = NULL
  */
-    if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
-      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-    if (PyDict_SetItem(((PyObject *)__pyx_v_self->var), __pyx_v_varname, ((PyObject *)__pyx_v_v)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_v);
-  __Pyx_XDECREF(__pyx_v_varname);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":510
+ *         self.nsteps = self.vp.nsteps
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9adios_mpi_3var_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_2__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_2__del__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":513
- *             self.var[varname] = v
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7812,22 +7683,31 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_A
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":514
+  /* "adios_mpi.pyx":511
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "adios_mpi.pyx":510
+ *         self.nsteps = self.vp.nsteps
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -7835,24 +7715,20 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_A
   return __pyx_r;
 }
 
-/* "adios.pyx":516
+/* "adios_mpi.pyx":513
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)
  */
 
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_v_v = NULL;
+static PyObject *__pyx_pw_9adios_mpi_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, int __pyx_skip_dispatch) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -7861,11 +7737,11 @@ static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_Adios
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -7875,141 +7751,76 @@ static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_Adios
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":517
+  /* "adios_mpi.pyx":514
  * 
  *     cpdef close(self):
- *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         for v in self.var.values():
- *             v.close()
+ *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
+ *         adios_free_varinfo(self.vp)
+ *         self.vp = NULL
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":518
+  /* "adios_mpi.pyx":515
  *     cpdef close(self):
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():             # <<<<<<<<<<<<<<
- *             v.close()
- *         adios_gclose(self.gp)
- */
-  if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->var); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
-    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
-    __pyx_t_4 = NULL;
-  } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  for (;;) {
-    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
-      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      #endif
-    } else {
-      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
-      if (unlikely(!__pyx_t_1)) {
-        if (PyErr_Occurred()) {
-          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_1);
-    }
-    __Pyx_XDECREF(__pyx_v_v);
-    __pyx_v_v = __pyx_t_1;
-    __pyx_t_1 = 0;
-
-    /* "adios.pyx":519
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
- *             v.close()             # <<<<<<<<<<<<<<
- *         adios_gclose(self.gp)
- *         self.gp = NULL
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
+ *         self.vp = NULL
+ * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios.pyx":520
- *         for v in self.var.values():
- *             v.close()
- *         adios_gclose(self.gp)             # <<<<<<<<<<<<<<
- *         self.gp = NULL
+  /* "adios_mpi.pyx":516
+ *         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):
  */
-  adios_gclose(__pyx_v_self->gp);
+  __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":521
- *             v.close()
- *         adios_gclose(self.gp)
- *         self.gp = NULL             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":513
+ *         self.close()
  * 
- *     cpdef printself(self):
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open var'
+ *         adios_free_varinfo(self.vp)
  */
-  __pyx_v_self->gp = NULL;
 
+  /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_v);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9adios_mpi_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4close(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4close(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":516
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         for v in self.var.values():
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8018,17 +7829,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_Adi
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8036,293 +7846,660 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_Adi
   return __pyx_r;
 }
 
-/* "adios.pyx":523
- *         self.gp = NULL
+/* "adios_mpi.pyx":518
+ *         self.vp = NULL
  * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
+ *     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'
  */
 
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_10AdiosGroup_printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
+static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*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) {
+  PyObject *__pyx_v_offset = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_from_steps = ((PyObject *)__pyx_int_0);
+  PyObject *__pyx_v_nsteps = ((PyObject *)__pyx_int_1);
+  PyObject *__pyx_v_lshape = 0;
+  PyArrayObject *__pyx_v_npshape = 0;
+  PyArrayObject *__pyx_v_npoffset = 0;
+  PyArrayObject *__pyx_v_npcount = 0;
+  PyObject *__pyx_v_shape = NULL;
+  PyArrayObject *__pyx_v_var = 0;
+  ADIOS_SELECTION *__pyx_v_sel;
+  int __pyx_v_i;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_RefNannySetupContext("read", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_offset = __pyx_optional_args->offset;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_count = __pyx_optional_args->count;
+        if (__pyx_optional_args->__pyx_n > 2) {
+          __pyx_v_from_steps = __pyx_optional_args->from_steps;
+          if (__pyx_optional_args->__pyx_n > 3) {
+            __pyx_v_nsteps = __pyx_optional_args->nsteps;
+          }
+        }
+      }
+    }
+  }
   /* Check if called by wrapper */
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_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_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself)) {
+    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 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_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_r = __pyx_t_2;
-      __pyx_t_2 = 0;
+      __Pyx_INCREF(__pyx_v_offset);
+      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_offset);
+      __Pyx_GIVEREF(__pyx_v_offset);
+      __Pyx_INCREF(__pyx_v_count);
+      PyTuple_SET_ITEM(__pyx_t_2, 1, __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);
+      __Pyx_GIVEREF(__pyx_v_from_steps);
+      __Pyx_INCREF(__pyx_v_nsteps);
+      PyTuple_SET_ITEM(__pyx_t_2, 3, __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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L0;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":524
+  /* "adios_mpi.pyx":519
+ * 
+ *     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'
  * 
- *     cpdef printself(self):
- *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = (__pyx_v_self->type != ((PyObject*)Py_None));
+    if (unlikely(!(__pyx_t_4 != 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;}
+    }
   }
   #endif
 
-  /* "adios.pyx":525
- *     cpdef printself(self):
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='             # <<<<<<<<<<<<<<
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
- *         printAdiosGroup(self.gp)
+  /* "adios_mpi.pyx":520
+ *     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'             # <<<<<<<<<<<<<<
+ * 
+ *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #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;}
+    }
+  }
+  #endif
 
-  /* "adios.pyx":526
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)             # <<<<<<<<<<<<<<
- *         printAdiosGroup(self.gp)
+  /* "adios_mpi.pyx":522
+ *         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_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->gp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_INCREF(((PyObject *)__pyx_n_s__gp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __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_v_lshape = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios.pyx":527
- *         print '=== AdiosGroup ==='
- *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
- *         printAdiosGroup(self.gp)             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":523
+ * 
+ *         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 class AdiosVariable:
+ *         cdef np.ndarray npoffset
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosGroup(__pyx_v_self->gp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_v_lshape);
+  PyTuple_SET_ITEM(__pyx_t_2, 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_DECREF(__pyx_t_2); __pyx_t_2 = 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;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_6printself(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":523
- *         self.gp = NULL
+  /* "adios_mpi.pyx":526
  * 
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.gp != NULL, 'Not an open file'
- *         print '=== AdiosGroup ==='
+ *         cdef np.ndarray npoffset
+ *         if len(offset) == 0:             # <<<<<<<<<<<<<<
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)
  */
+  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_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) {
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios_mpi.pyx":527
+ *         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_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;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "adios_mpi.pyx":528
+ *         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_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_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
 
-/* "adios.pyx":485
+    /* "adios_mpi.pyx":530
+ *             npoffset.fill(0)
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
  * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int grpid
- *     cpdef public int vars_count
+ *         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_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);
+    __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_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_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;
+  }
+  __pyx_L5:;
+
+  /* "adios_mpi.pyx":533
+ * 
+ *         cdef np.ndarray npcount
+ *         if len(count) == 0:             # <<<<<<<<<<<<<<
+ *             npcount = npshape - npoffset
+ *         else:
  */
+  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_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) {
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
+    /* "adios_mpi.pyx":534
+ *         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;
+  }
+  /*else*/ {
+
+    /* "adios_mpi.pyx":536
+ *             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_INCREF(__pyx_v_count);
+    PyTuple_SET_ITEM(__pyx_t_7, 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_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_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_L6:;
+
+  /* "adios_mpi.pyx":538
+ *             npcount = np.array(count, dtype=np.int64)
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'             # <<<<<<<<<<<<<<
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
+ *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!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;}
+    }
+  }
+  #endif
+
+  /* "adios_mpi.pyx":539
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
+ *         assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
+ * 
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!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;}
+    }
+  }
+  #endif
+
+  /* "adios_mpi.pyx":540
+ *         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.'             # <<<<<<<<<<<<<<
+ * 
+ *         shape = list(npcount)
+ */
+  #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)) {
+      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;}
+    }
+  }
+  #endif
+
+  /* "adios_mpi.pyx":542
+ *         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_INCREF(((PyObject *)__pyx_v_npcount));
+  PyTuple_SET_ITEM(__pyx_t_8, 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;
+
+  /* "adios_mpi.pyx":543
+ * 
+ *         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) {
+
+    /* "adios_mpi.pyx":544
+ *         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_L7:;
+
+  /* "adios_mpi.pyx":545
+ *         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_INCREF(__pyx_v_shape);
+  PyTuple_SET_ITEM(__pyx_t_3, 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;
+
+  /* "adios_mpi.pyx":548
+ * 
+ *         cdef ADIOS_SELECTION * sel
+ *         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)
+ */
+  __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
+ *         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));
+
+  /* "adios_mpi.pyx":551
+ * 
+ *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
+ *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
+ * 
+ *         return var
+ */
+  adios_perform_reads(__pyx_v_self->file->fp, 1);
+
+  /* "adios_mpi.pyx":553
+ *         adios_perform_reads(self.file.fp, 1)
+ * 
+ *         return var             # <<<<<<<<<<<<<<
+ * 
+ *     """ Print self """
+ */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  __Pyx_INCREF(((PyObject *)__pyx_v_var));
+  __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* "adios_mpi.pyx":518
+ *         self.vp = NULL
+ * 
+ *     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'
+ */
+
+  /* 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_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("adios_mpi.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_lshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npoffset);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npcount);
+  __Pyx_XDECREF(__pyx_v_shape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_var);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
+static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_offset = 0;
+  PyObject *__pyx_v_count = 0;
+  PyObject *__pyx_v_from_steps = 0;
+  PyObject *__pyx_v_nsteps = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
-  int __pyx_r;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)Py_None);
-
-  __pyx_r = 0;
+  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_count,&__pyx_n_s_from_steps,&__pyx_n_s_nsteps,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[0] = ((PyObject*)__pyx_empty_tuple);
+    values[1] = ((PyObject*)__pyx_empty_tuple);
+    values[2] = ((PyObject *)__pyx_int_0);
+    values[3] = ((PyObject *)__pyx_int_1);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_offset);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_from_steps);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nsteps);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_offset = ((PyObject*)values[0]);
+    __pyx_v_count = ((PyObject*)values[1]);
+    __pyx_v_from_steps = values[2];
+    __pyx_v_nsteps = values[3];
+  }
+  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_L3_error:;
+  __Pyx_AddTraceback("adios_mpi.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  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;}
+  __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);
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":486
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int grpid             # <<<<<<<<<<<<<<
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_6read(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count, PyObject *__pyx_v_from_steps, PyObject *__pyx_v_nsteps) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_9adios_mpi_3var_read __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2.__pyx_n = 4;
+  __pyx_t_2.offset = __pyx_v_offset;
+  __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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8330,77 +8507,178 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5a
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "adios_mpi.pyx":556
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open variable'
+ *         print '=== AdiosVariable ==='
+ */
 
-static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_9adios_mpi_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->grpid = __pyx_t_1;
+  __Pyx_RefNannySetupContext("printself", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 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_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_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
 
-  __pyx_r = 0;
+  /* "adios_mpi.pyx":557
+ *     """ Print self """
+ *     cpdef printself(self):
+ *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
+ *         print '=== AdiosVariable ==='
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  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;}
+    }
+  }
+  #endif
+
+  /* "adios_mpi.pyx":558
+ *     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;}
+
+  /* "adios_mpi.pyx":559
+ *         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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_vp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_vp);
+  __Pyx_GIVEREF(__pyx_n_s_vp);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":560
+ *         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_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_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fp);
+  __Pyx_GIVEREF(__pyx_n_s_fp);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":561
+ *         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_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":556
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open variable'
+ *         print '=== AdiosVariable ==='
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios_mpi.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_8printself(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":487
- *     cpdef public bytes name
- *     cpdef public int grpid
- *     cpdef public int vars_count             # <<<<<<<<<<<<<<
- *     cpdef public int attrs_count
- *     cpdef public int timestep
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_8printself(struct __pyx_obj_9adios_mpi_var *__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_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8408,78 +8686,37 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->vars_count = __pyx_t_1;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "adios_mpi.pyx":488
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int varid
+ *     cpdef public type type
+ */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_3var_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_4name_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4name___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":488
- *     cpdef public int grpid
- *     cpdef public int vars_count
- *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
- *     cpdef public int timestep
- *     cpdef public int lasttimestep
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_4name___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __Pyx_INCREF(__pyx_v_self->name);
+  __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -8487,31 +8724,41 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_3var_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4name_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_3var_4name_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->attrs_count = __pyx_t_1;
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.var.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -8519,25 +8766,56 @@ static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_9adios_mpi_3var_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4name_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4name_4__del__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":489
- *     cpdef public int vars_count
- *     cpdef public int attrs_count
- *     cpdef public int timestep             # <<<<<<<<<<<<<<
- *     cpdef public int lasttimestep
- * 
+static int __pyx_pf_9adios_mpi_3var_4name_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":489
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int varid             # <<<<<<<<<<<<<<
+ *     cpdef public type type
+ *     cpdef public int ndim
  */
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_3var_5varid_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_5varid_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_5varid___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8546,17 +8824,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.varid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8565,17 +8842,19 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_3var_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_5varid_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_3var_5varid_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8583,39 +8862,150 @@ static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adi
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->timestep = __pyx_t_1;
+  __pyx_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_v_self->varid = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.varid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":490
+ *     cpdef public bytes name
+ *     cpdef public int varid
+ *     cpdef public type type             # <<<<<<<<<<<<<<
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_3var_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_4type_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4type___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":490
- *     cpdef public int attrs_count
- *     cpdef public int timestep
- *     cpdef public int lasttimestep             # <<<<<<<<<<<<<<
- * 
- *     cpdef public dict var
+static PyObject *__pyx_pf_9adios_mpi_3var_4type___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->type));
+  __pyx_r = ((PyObject *)__pyx_v_self->type);
+  goto __pyx_L0;
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_9adios_mpi_3var_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4type_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_9adios_mpi_3var_4type_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
+  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("__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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.var.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_9adios_mpi_3var_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4type_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4type_4__del__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_9adios_mpi_3var_4type_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)Py_None);
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":491
+ *     cpdef public int varid
+ *     cpdef public type type
+ *     cpdef public int ndim             # <<<<<<<<<<<<<<
+ *     cpdef public tuple dims
+ *     cpdef public int nsteps
  */
 
-static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+/* Python wrapper */
+static PyObject *__pyx_pw_9adios_mpi_3var_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_4ndim_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4ndim___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -8624,17 +9014,16 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->lasttimestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -8643,17 +9032,19 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __py
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_3var_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4ndim_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_3var_4ndim_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8661,48 +9052,51 @@ static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->lasttimestep = __pyx_t_1;
+  __pyx_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_v_self->ndim = __pyx_t_1;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.var.ndim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":492
+ *     cpdef public type type
+ *     cpdef public int ndim
+ *     cpdef public tuple dims             # <<<<<<<<<<<<<<
+ *     cpdef public int nsteps
+ * 
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_9adios_mpi_3var_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_4dims_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4dims___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":492
- *     cpdef public int lasttimestep
- * 
- *     cpdef public dict var             # <<<<<<<<<<<<<<
- * 
- *     def __init__(self, AdiosFile file, char * name):
- */
-
-static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_3var_4dims___get__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->var));
-  __pyx_r = ((PyObject *)__pyx_v_self->var);
+  __Pyx_INCREF(__pyx_v_self->dims);
+  __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
@@ -8710,34 +9104,41 @@ static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adi
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pw_9adios_mpi_3var_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4dims_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+static int __pyx_pf_9adios_mpi_3var_4dims_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
   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("__set__", 0);
-  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)__pyx_v_value);
+  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;}
+  __pyx_t_1 = __pyx_v_value;
+  __Pyx_INCREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
 
+  /* function exit code */
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosGroup.var.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios_mpi.var.dims.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -8745,44 +9146,138 @@ static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_Ad
 }
 
 /* Python wrapper */
-static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self) {
+static int __pyx_pw_9adios_mpi_3var_4dims_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_4dims_5__del__(PyObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9adios_mpi_3var_4dims_4__del__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+static int __pyx_pf_9adios_mpi_3var_4dims_4__del__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->var);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
-  __pyx_v_self->var = ((PyObject*)Py_None);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(__pyx_v_self->dims);
+  __pyx_v_self->dims = ((PyObject*)Py_None);
 
+  /* function exit code */
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":493
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ *     cpdef public int nsteps             # <<<<<<<<<<<<<<
+ * 
+ *     def __init__(self, file file, char * name):
+ */
+
 /* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group = 0;
-  char *__pyx_v_name;
+static PyObject *__pyx_pw_9adios_mpi_3var_6nsteps_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9adios_mpi_3var_6nsteps_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_6nsteps___get__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adios_mpi_var *__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_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_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.var.nsteps.__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_3var_6nsteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9adios_mpi_3var_6nsteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_9adios_mpi_3var_6nsteps_2__set__(struct __pyx_obj_9adios_mpi_var *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_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_v_self->nsteps = __pyx_t_1;
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios_mpi.var.nsteps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios_mpi.pyx":567
+ * ## ====================
+ * 
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     if not f.var.has_key(varname):
+ */
+
+/* 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) {
+  PyObject *__pyx_v_fname = 0;
+  PyObject *__pyx_v_varname = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("readvar (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_varname,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -8796,16 +9291,16 @@ static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fname)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        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;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8813,6835 +9308,5164 @@ static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyO
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_group = ((struct __pyx_obj_5adios_AdiosGroup *)values[0]);
-    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fname = values[0];
+    __pyx_v_varname = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_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_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("adios_mpi.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return -1;
+  return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_5adios_AdiosGroup, 1, "group", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable___init__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_group, __pyx_v_name);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = -1;
-  __pyx_L0:;
+  __pyx_r = __pyx_pf_9adios_mpi_36readvar(__pyx_self, __pyx_v_fname, __pyx_v_varname);
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":543
- *     cpdef public int characteristics_count
- * 
- *     def __init__(self, AdiosGroup group, char * name):             # <<<<<<<<<<<<<<
- *         self.group = group
- *         self.vp = NULL
- */
-
-static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name) {
-  int __pyx_v_i;
-  int __pyx_r;
+static PyObject *__pyx_pf_9adios_mpi_36readvar(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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__init__", 0);
+  __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios.pyx":544
- * 
- *     def __init__(self, AdiosGroup group, char * name):
- *         self.group = group             # <<<<<<<<<<<<<<
- *         self.vp = NULL
+  /* "adios_mpi.pyx":568
  * 
+ * def readvar(fname, varname):
+ *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"
  */
-  __Pyx_INCREF(((PyObject *)__pyx_v_group));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_group));
-  __Pyx_GOTREF(__pyx_v_self->group);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
-  __pyx_v_self->group = __pyx_v_group;
+  __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_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_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_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_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;}
+  __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_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.pyx":545
- *     def __init__(self, AdiosGroup group, char * name):
- *         self.group = group
- *         self.vp = NULL             # <<<<<<<<<<<<<<
- * 
- *         self.vp = adios_inq_var(self.group.gp, name)
+  /* "adios_mpi.pyx":569
+ * def readvar(fname, varname):
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     if not f.var.has_key(varname):             # <<<<<<<<<<<<<<
+ *         print "No valid variable"
+ *         return
  */
-  __pyx_v_self->vp = NULL;
+  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_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_6 = ((!(__pyx_t_5 != 0)) != 0);
+  if (__pyx_t_6) {
 
-  /* "adios.pyx":547
- *         self.vp = NULL
- * 
- *         self.vp = adios_inq_var(self.group.gp, name)             # <<<<<<<<<<<<<<
- *         assert self.group.gp != NULL, 'Not an open group'
+    /* "adios_mpi.pyx":570
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"             # <<<<<<<<<<<<<<
+ *         return
  * 
  */
-  __pyx_v_self->vp = adios_inq_var(__pyx_v_self->group->gp, __pyx_v_name);
+    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;}
 
-  /* "adios.pyx":548
+    /* "adios_mpi.pyx":571
+ *     if not f.var.has_key(varname):
+ *         print "No valid variable"
+ *         return             # <<<<<<<<<<<<<<
  * 
- *         self.vp = adios_inq_var(self.group.gp, name)
- *         assert self.group.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
- * 
- *         self.name                  = name
+ *     v = f.var[varname]
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->group->gp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
   }
-  #endif
 
-  /* "adios.pyx":550
- *         assert self.group.gp != NULL, 'Not an open group'
+  /* "adios_mpi.pyx":573
+ *         return
  * 
- *         self.name                  = name             # <<<<<<<<<<<<<<
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)
- */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "adios.pyx":551
+ *     v = f.var[varname]             # <<<<<<<<<<<<<<
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
- *         self.name                  = name
- *         self.varid                 = self.vp.varid             # <<<<<<<<<<<<<<
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim
- */
-  __pyx_t_2 = __pyx_v_self->vp->varid;
-  __pyx_v_self->varid = __pyx_t_2;
-
-  /* "adios.pyx":552
- *         self.name                  = name
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim
- */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "adios.pyx":553
- *         self.varid                 = self.vp.varid
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim             # <<<<<<<<<<<<<<
- *         self.timedim               = self.vp.timedim
- *         self.characteristics_count = self.vp.characteristics_count
  */
-  __pyx_t_2 = __pyx_v_self->vp->ndim;
-  __pyx_v_self->ndim = __pyx_t_2;
+  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_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_GOTREF(__pyx_t_4);
+  __pyx_v_v = __pyx_t_4;
+  __pyx_t_4 = 0;
 
-  /* "adios.pyx":554
- *         self.type                  = adios2nptype(self.vp.type)
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim             # <<<<<<<<<<<<<<
- *         self.characteristics_count = self.vp.characteristics_count
+  /* "adios_mpi.pyx":574
  * 
- */
-  __pyx_t_2 = __pyx_v_self->vp->timedim;
-  __pyx_v_self->timedim = __pyx_t_2;
-
-  /* "adios.pyx":555
- *         self.ndim                  = self.vp.ndim
- *         self.timedim               = self.vp.timedim
- *         self.characteristics_count = self.vp.characteristics_count             # <<<<<<<<<<<<<<
+ *     v = f.var[varname]
+ *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
  * 
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ * def bpls(fname):
  */
-  __pyx_t_2 = __pyx_v_self->vp->characteristics_count;
-  __pyx_v_self->characteristics_count = __pyx_t_2;
+  __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_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_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;}
+  __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;}
+  __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_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "adios.pyx":557
- *         self.characteristics_count = self.vp.characteristics_count
- * 
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":567
+ * ## ====================
  * 
- *     def __del__(self):
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     if not f.var.has_key(varname):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
-    __pyx_v_i = __pyx_t_3;
-    __pyx_t_4 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __pyx_t_4 = ((PyObject *)PyList_AsTuple(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
+  /* 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_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("adios_mpi.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_f);
+  __Pyx_XDECREF(__pyx_v_v);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "adios_mpi.pyx":576
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
+ * 
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     return {'nvars': f.nvars,
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+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) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_2__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("bpls (wrapper)", 0);
+  __pyx_r = __pyx_pf_9adios_mpi_38bpls(__pyx_self, ((PyObject *)__pyx_v_fname));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":559
- *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
- * 
- *     def __del__(self):             # <<<<<<<<<<<<<<
- *         self.close()
- * 
- */
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static PyObject *__pyx_pf_9adios_mpi_38bpls(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;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios.pyx":560
- * 
- *     def __del__(self):
- *         self.close()             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":577
  * 
- *     cpdef close(self):
+ * def bpls(fname):
+ *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
+ *     return {'nvars': f.nvars,
+ *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_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_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_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_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_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;}
+  __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_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;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "adios_mpi.pyx":578
+ * def bpls(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_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-/* "adios.pyx":562
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
+  /* "adios_mpi.pyx":579
+ *     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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("close", 0);
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_r = __pyx_t_2;
-      __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
-    }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  /* "adios_mpi.pyx":580
+ *     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_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_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_GOTREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
+  __pyx_t_1 = __pyx_t_3;
+  __pyx_t_3 = 0;
+  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;}
+    __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;}
   }
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":563
- * 
- *     cpdef close(self):
- *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         adios_free_varinfo(self.vp)
- *         self.vp = NULL
+  /* "adios_mpi.pyx":581
+ *             '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}
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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_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;}
   }
-  #endif
+  __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_GOTREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_t_3 = 0;
+  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;}
+    __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;}
+  }
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":564
- *     cpdef close(self):
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
- *         self.vp = NULL
+  /* "adios_mpi.pyx":582
+ *             '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}
  * 
  */
-  adios_free_varinfo(__pyx_v_self->vp);
+  __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_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_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_GOTREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+  __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;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":565
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
- *         self.vp = NULL             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":583
+ *             'attrs': tuple([ k for k in f.attr.iterkeys() ]),
+ *             'time_steps': (f.current_step, f.last_step),
+ *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):
  */
-  __pyx_v_self->vp = NULL;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __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_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;}
+  __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
+ *     return v.read(from_steps=0, nsteps=v.nsteps)
+ * 
+ * def bpls(fname):             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     return {'nvars': f.nvars,
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("adios_mpi.bpls", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_f);
+  __Pyx_XDECREF(__pyx_v_k);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "/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):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("close (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4close(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":562
- *         self.close()
- * 
- *     cpdef close(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         adios_free_varinfo(self.vp)
- */
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_copy_shape;
+  int __pyx_v_i;
+  int __pyx_v_ndim;
+  int __pyx_v_endian_detector;
+  int __pyx_v_little_endian;
+  int __pyx_v_t;
+  char *__pyx_v_f;
+  PyArray_Descr *__pyx_v_descr = 0;
+  int __pyx_v_offset;
+  int __pyx_v_hasfields;
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  char *__pyx_t_9;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("close", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+  __Pyx_RefNannySetupContext("__getbuffer__", 0);
+  if (__pyx_v_info != NULL) {
+    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(__pyx_v_info->obj);
+  }
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":567
- *         self.vp = NULL
+  /* "/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             # <<<<<<<<<<<<<<
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+ *             cdef int copy_shape, i, ndim
  */
-
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args) {
-  PyObject *__pyx_v_offset = ((PyObject*)__pyx_empty_tuple);
-  PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
-  PyObject *__pyx_v_ntype = 0;
-  PyObject *__pyx_v_lshape = 0;
-  PyArrayObject *__pyx_v_npshape = 0;
-  PyArrayObject *__pyx_v_npoffset = 0;
-  PyArrayObject *__pyx_v_npcount = 0;
-  PyArrayObject *__pyx_v_var = 0;
-  int64_t __pyx_v_nbytes;
-  int __pyx_v_i;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read", 0);
-  if (__pyx_optional_args) {
-    if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_offset = __pyx_optional_args->offset;
-      if (__pyx_optional_args->__pyx_n > 1) {
-        __pyx_v_count = __pyx_optional_args->count;
-      }
-    }
-  }
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__read); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_INCREF(((PyObject *)__pyx_v_offset));
-      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_offset));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
-      __Pyx_INCREF(((PyObject *)__pyx_v_count));
-      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_count));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
-    }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = ((__pyx_v_info == NULL) != 0);
+  if (__pyx_t_1) {
+    __pyx_r = 0;
+    goto __pyx_L0;
   }
 
-  /* "adios.pyx":568
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":203
  * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):
- *         cdef type ntype = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
- *         assert ntype is not None, 'Data type is not supported yet'
+ *             cdef int copy_shape, i, ndim
+ *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
+ *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_ntype = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_endian_detector = 1;
 
-  /* "adios.pyx":569
- *     cpdef read(self, tuple offset = (), tuple count = ()):
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
+  /* "/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)             # <<<<<<<<<<<<<<
  * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
+ *             ndim = PyArray_NDIM(self)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = (__pyx_v_ntype != ((PyObject*)Py_None));
-  if (unlikely(!(__pyx_t_4 != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_17));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
 
-  /* "adios.pyx":571
- *         assert ntype is not None, 'Data type is not supported yet'
+  /* "/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)
  * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
- *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
+ *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
  * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
-    __pyx_v_i = __pyx_t_6;
-    __pyx_t_3 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  }
-  __pyx_v_lshape = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
 
-  /* "adios.pyx":572
- * 
- *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
- *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)             # <<<<<<<<<<<<<<
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":208
+ *             ndim = PyArray_NDIM(self)
  * 
- *         cdef np.ndarray npoffset
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 copy_shape = 1
+ *             else:
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_lshape));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_lshape));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_lshape));
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_8);
-  __pyx_t_8 = 0;
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
 
-  /* "adios.pyx":575
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":209
  * 
- *         cdef np.ndarray npoffset
- *         if len(offset) == 0:             # <<<<<<<<<<<<<<
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)
- */
-  if (unlikely(((PyObject *)__pyx_v_offset) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_offset)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
-
-    /* "adios.pyx":576
- *         cdef np.ndarray npoffset
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()             # <<<<<<<<<<<<<<
- *             npoffset.fill(0)
- *         else:
- */
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s__copy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_2);
-    __pyx_t_2 = 0;
-
-    /* "adios.pyx":577
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)             # <<<<<<<<<<<<<<
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 copy_shape = 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 copy_shape = 0
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s__fill); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_18), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    goto __pyx_L5;
+    __pyx_v_copy_shape = 1;
+    goto __pyx_L4;
   }
   /*else*/ {
 
-    /* "adios.pyx":579
- *             npoffset.fill(0)
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
+    /* "/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             # <<<<<<<<<<<<<<
  * 
- *         cdef np.ndarray npcount
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
  */
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __Pyx_INCREF(((PyObject *)__pyx_v_offset));
-    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_offset));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
+    __pyx_v_copy_shape = 0;
   }
-  __pyx_L5:;
+  __pyx_L4:;
 
-  /* "adios.pyx":582
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":213
+ *                 copy_shape = 0
  * 
- *         cdef np.ndarray npcount
- *         if len(count) == 0:             # <<<<<<<<<<<<<<
- *             npcount = npshape - npoffset
- *         else:
+ *             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 (unlikely(((PyObject *)__pyx_v_count) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_count)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
+  if (__pyx_t_1) {
 
-    /* "adios.pyx":583
- *         cdef np.ndarray npcount
- *         if len(count) == 0:
- *             npcount = npshape - npoffset             # <<<<<<<<<<<<<<
- *         else:
- *             npcount = np.array(count, dtype=np.int64)
+    /* "/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_7 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_7);
-    __pyx_t_7 = 0;
-    goto __pyx_L6;
+    __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;
   }
-  /*else*/ {
+  if (__pyx_t_3) {
 
-    /* "adios.pyx":585
- *             npcount = npshape - npoffset
- *         else:
- *             npcount = np.array(count, dtype=np.int64)             # <<<<<<<<<<<<<<
+    /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_INCREF(((PyObject *)__pyx_v_count));
-    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_count));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
-    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
-    __pyx_t_3 = 0;
+    __pyx_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_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L6:;
 
-  /* "adios.pyx":587
- *             npcount = np.array(count, dtype=np.int64)
+  /* "/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")
  * 
- *         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.'
+ *             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")
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npoffset->nd) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_19));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
+  if (__pyx_t_3) {
 
-  /* "adios.pyx":588
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":218
  * 
- *         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.'
+ *             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")
  * 
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npcount->nd) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_20));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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;
   }
-  #endif
+  if (__pyx_t_2) {
 
-  /* "adios.pyx":589
- *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
- *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
- *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'             # <<<<<<<<<<<<<<
+    /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
+ *             info.buf = PyArray_DATA(self)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, ((PyObject *)__pyx_v_npcount), Py_GT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  if (unlikely(!__pyx_t_4)) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_21));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  #endif
 
-  /* "adios.pyx":591
- *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+  /* "/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")
  * 
- *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)             # <<<<<<<<<<<<<<
- *         cdef int64_t nbytes = adios_read_var_byid(
- *             self.group.gp,
+ *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
+ *             info.ndim = ndim
+ *             if copy_shape:
  */
-  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
-  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_npcount));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_v_ntype)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_var = ((PyArrayObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
 
-  /* "adios.pyx":597
- *             <uint64_t *> npoffset.data,
- *             <uint64_t *> npcount.data,
- *             <void *> var.data             # <<<<<<<<<<<<<<
- *             )
+  /* "/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             # <<<<<<<<<<<<<<
+ *             if copy_shape:
+ *                 # Allocate new buffer for strides and shape info.
  */
-  __pyx_v_nbytes = adios_read_var_byid(__pyx_v_self->group->gp, __pyx_v_self->vp->varid, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data), ((void *)__pyx_v_var->data));
+  __pyx_v_info->ndim = __pyx_v_ndim;
 
-  /* "adios.pyx":600
- *             )
- * 
- *         if nbytes < 0:             # <<<<<<<<<<<<<<
- *             print "[WARNING] bytes read :", nbytes
- * 
+  /* "/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_4 = ((__pyx_v_nbytes < 0) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_2 = (__pyx_v_copy_shape != 0);
+  if (__pyx_t_2) {
 
-    /* "adios.pyx":601
- * 
- *         if nbytes < 0:
- *             print "[WARNING] bytes read :", nbytes             # <<<<<<<<<<<<<<
- * 
- *         return var
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
  */
-    __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_nbytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
-    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_22));
-    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
-    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_1);
-    __pyx_t_1 = 0;
-    if (__Pyx_Print(0, ((PyObject *)__pyx_t_7), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-    goto __pyx_L7;
-  }
-  __pyx_L7:;
+    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
 
-  /* "adios.pyx":603
- *             print "[WARNING] bytes read :", nbytes
- * 
- *         return var             # <<<<<<<<<<<<<<
- * 
- *     """ Print self """
+    /* "/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             # <<<<<<<<<<<<<<
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_var));
-  __pyx_r = ((PyObject *)__pyx_v_var);
-  goto __pyx_L0;
+    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ntype);
-  __Pyx_XDECREF(__pyx_v_lshape);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npshape);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npoffset);
-  __Pyx_XDECREF((PyObject *)__pyx_v_npcount);
-  __Pyx_XDECREF((PyObject *)__pyx_v_var);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_offset = 0;
-  PyObject *__pyx_v_count = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("read (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__offset,&__pyx_n_s__count,0};
-    PyObject* values[2] = {0,0};
+      /* "/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]             # <<<<<<<<<<<<<<
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ */
+      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
 
-    /* "adios.pyx":567
- *         self.vp = NULL
- * 
- *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
- *         cdef type ntype = adios2nptype(self.vp.type)
- *         assert ntype is not None, 'Data type is not supported yet'
+      /* "/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]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
  */
-    values[0] = ((PyObject*)__pyx_empty_tuple);
-    values[1] = ((PyObject*)__pyx_empty_tuple);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
     }
-    __pyx_v_offset = ((PyObject*)values[0]);
-    __pyx_v_count = ((PyObject*)values[1]);
+    goto __pyx_L7;
   }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_6read(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_offset, __pyx_v_count);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  struct __pyx_opt_args_5adios_13AdiosVariable_read __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("read", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2.__pyx_n = 2;
-  __pyx_t_2.offset = __pyx_v_offset;
-  __pyx_t_2.count = __pyx_v_count;
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /*else*/ {
 
-/* "adios.pyx":606
- * 
- *     """ Print self """
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
  */
+    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
 
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_f_5adios_13AdiosVariable_printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  /* Check if called by wrapper */
-  if (unlikely(__pyx_skip_dispatch)) ;
-  /* Check if overridden in Python */
-  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself)) {
-      __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_r = __pyx_t_2;
-      __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L0;
-    }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  }
-
-  /* "adios.pyx":607
- *     """ Print self """
- *     cpdef printself(self):
- *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+    /* "/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)             # <<<<<<<<<<<<<<
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
-    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
   }
-  #endif
+  __pyx_L7:;
 
-  /* "adios.pyx":608
- *     cpdef printself(self):
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='             # <<<<<<<<<<<<<<
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
- *         printAdiosVariable(self.vp)
+  /* "/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             # <<<<<<<<<<<<<<
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
  */
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_23)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_info->suboffsets = NULL;
 
-  /* "adios.pyx":609
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)             # <<<<<<<<<<<<<<
- *         printAdiosVariable(self.vp)
+  /* "/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)             # <<<<<<<<<<<<<<
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
+ * 
  */
-  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__vp));
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vp));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vp));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
 
-  /* "adios.pyx":610
- *         print '=== AdiosVariable ==='
- *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
- *         printAdiosVariable(self.vp)             # <<<<<<<<<<<<<<
+  /* "/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)             # <<<<<<<<<<<<<<
+ * 
+ *             cdef int t
  */
-  __pyx_t_1 = __pyx_f_5adios_printAdiosVariable(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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             # <<<<<<<<<<<<<<
+ *             cdef dtype descr = self.descr
+ *             cdef list stack
+ */
+  __pyx_v_f = NULL;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_8printself(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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;
 
-/* "adios.pyx":606
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":244
+ *             cdef int offset
  * 
- *     """ Print self """
- *     cpdef printself(self):             # <<<<<<<<<<<<<<
- *         assert self.vp != NULL, 'Not an open file'
- *         print '=== AdiosVariable ==='
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ * 
+ *             if not hasfields and not copy_shape:
  */
+  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("printself", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "/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:             # <<<<<<<<<<<<<<
+ *                 # do not call releasebuffer
+ *                 info.obj = None
+ */
+  __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0);
+    __pyx_t_1 = __pyx_t_3;
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+  }
+  if (__pyx_t_1) {
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # need to call releasebuffer
+ */
+    __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(Py_None);
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = Py_None;
+    goto __pyx_L10;
+  }
+  /*else*/ {
 
-/* "adios.pyx":535
+    /* "/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             # <<<<<<<<<<<<<<
  * 
- *     """ Public Memeber """
- *     cpdef public bytes name             # <<<<<<<<<<<<<<
- *     cpdef public int varid
- *     cpdef public type type
+ *             if not hasfields:
  */
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+  }
+  __pyx_L10:;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
-  __pyx_r = ((PyObject *)__pyx_v_self->name);
-  goto __pyx_L0;
+  /* "/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:             # <<<<<<<<<<<<<<
+ *                 t = descr.type_num
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ */
+  __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_1) {
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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);
+    } else {
+      __pyx_t_2 = __pyx_t_1;
+    }
+    if (!__pyx_t_2) {
 
-static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+      /* "/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;
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+    }
+    if (__pyx_t_1) {
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+    /* "/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"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+    switch (__pyx_v_t) {
 
-static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->name);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
-  __pyx_v_self->name = ((PyObject*)Py_None);
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ */
+      case NPY_BYTE:
+      __pyx_v_f = __pyx_k_b;
+      break;
 
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ */
+      case NPY_UBYTE:
+      __pyx_v_f = __pyx_k_B;
+      break;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ */
+      case NPY_SHORT:
+      __pyx_v_f = __pyx_k_h;
+      break;
 
-/* "adios.pyx":536
- *     """ Public Memeber """
- *     cpdef public bytes name
- *     cpdef public int varid             # <<<<<<<<<<<<<<
- *     cpdef public type type
- *     cpdef public int ndim
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
  */
+      case NPY_USHORT:
+      __pyx_v_f = __pyx_k_H;
+      break;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ */
+      case NPY_INT:
+      __pyx_v_f = __pyx_k_i;
+      break;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.varid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ */
+      case NPY_UINT:
+      __pyx_v_f = __pyx_k_I;
+      break;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ */
+      case NPY_LONG:
+      __pyx_v_f = __pyx_k_l;
+      break;
 
-static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->varid = __pyx_t_1;
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ */
+      case NPY_ULONG:
+      __pyx_v_f = __pyx_k_L;
+      break;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.varid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ */
+      case NPY_LONGLONG:
+      __pyx_v_f = __pyx_k_q;
+      break;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ */
+      case NPY_ULONGLONG:
+      __pyx_v_f = __pyx_k_Q;
+      break;
 
-/* "adios.pyx":537
- *     cpdef public bytes name
- *     cpdef public int varid
- *     cpdef public type type             # <<<<<<<<<<<<<<
- *     cpdef public int ndim
- *     cpdef public tuple dims
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
  */
+      case NPY_FLOAT:
+      __pyx_v_f = __pyx_k_f;
+      break;
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->type));
-  __pyx_r = ((PyObject *)__pyx_v_self->type);
-  goto __pyx_L0;
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ */
+      case NPY_DOUBLE:
+      __pyx_v_f = __pyx_k_d;
+      break;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ */
+      case NPY_LONGDOUBLE:
+      __pyx_v_f = __pyx_k_g;
+      break;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ */
+      case NPY_CFLOAT:
+      __pyx_v_f = __pyx_k_Zf;
+      break;
 
-static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyType_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)__pyx_v_value);
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"
+ */
+      case NPY_CDOUBLE:
+      __pyx_v_f = __pyx_k_Zd;
+      break;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ */
+      case NPY_CLONGDOUBLE:
+      __pyx_v_f = __pyx_k_Zg;
+      break;
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+      /* "/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"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      case NPY_OBJECT:
+      __pyx_v_f = __pyx_k_O;
+      break;
+      default:
 
-static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->type);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
-  __pyx_v_self->type = ((PyObject*)Py_None);
+      /* "/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_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
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f             # <<<<<<<<<<<<<<
+ *                 return
+ *             else:
+ */
+    __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
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f
+ *                 return             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+  }
+  /*else*/ {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 info.format[0] = c'^' # Native data types, manual alignment
+ *                 offset = 0
+ */
+    __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
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
+ *                 offset = 0
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ */
+    (__pyx_v_info->format[0]) = '^';
+
+    /* "/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             # <<<<<<<<<<<<<<
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ *                                       info.format + _buffer_format_string_len,
+ */
+    __pyx_v_offset = 0;
+
+    /* "/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;
+
+    /* "/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             # <<<<<<<<<<<<<<
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ */
+    (__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
+ *         # experimental exception made for __getbuffer__ and __releasebuffer__
+ *         # -- the details of this may change.
+ *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
 
+  /* function exit code */
   __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+  }
+  goto __pyx_L2;
+  __pyx_L0:;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
+    __Pyx_GOTREF(Py_None);
+    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
+  }
+  __pyx_L2:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
+/* "/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):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
 /* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
+  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
+
+  /* function exit code */
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
 }
 
-/* "adios.pyx":538
- *     cpdef public int varid
- *     cpdef public type type
- *     cpdef public int ndim             # <<<<<<<<<<<<<<
- *     cpdef public tuple dims
- *     cpdef public int timedim
+static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
+  if (__pyx_t_1) {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)
+ */
+    free(__pyx_v_info->format);
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.strides)
+ *                 # info.shape was stored after info.strides in the same block
+ */
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
+
+    /* "/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)             # <<<<<<<<<<<<<<
+ *                 # info.shape was stored after info.strides in the same block
+ * 
+ */
+    free(__pyx_v_info->strides);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "/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):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 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
+ * 
+ * cdef inline object PyArray_MultiIterNew1(a):
+ *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->ndim = __pyx_t_1;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
 
-  __pyx_r = 0;
+  /* "/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)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":539
- *     cpdef public type type
- *     cpdef public int ndim
- *     cpdef public tuple dims             # <<<<<<<<<<<<<<
- *     cpdef public int timedim
- *     cpdef public int characteristics_count
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__", 0);
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_r = ((PyObject *)__pyx_v_self->dims);
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
+ */
 
-static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_INCREF(__pyx_v_value);
-  __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)__pyx_v_value);
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
 
-  __pyx_r = 0;
+  /* "/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)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.dims.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
 
-static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__del__", 0);
-  __Pyx_INCREF(Py_None);
-  __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(__pyx_v_self->dims);
-  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
-  __pyx_v_self->dims = ((PyObject*)Py_None);
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
+ */
 
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":540
- *     cpdef public int ndim
- *     cpdef public tuple dims
- *     cpdef public int timedim             # <<<<<<<<<<<<<<
- *     cpdef public int characteristics_count
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
  * 
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 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
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->timedim = __pyx_t_1;
-
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "adios.pyx":541
- *     cpdef public tuple dims
- *     cpdef public int timedim
- *     cpdef public int characteristics_count             # <<<<<<<<<<<<<<
+/* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
  * 
- *     def __init__(self, AdiosGroup group, char * name):
  */
 
-static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 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
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
+ */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->characteristics_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
+  /* "/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):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
+ * 
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->characteristics_count = __pyx_t_1;
-
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* Python wrapper */
-static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
-static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "numpy.pxd":194
- *         # experimental exception made for __getbuffer__ and __releasebuffer__
- *         # -- the details of this may change.
- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
- *             # This implementation of getbuffer is geared towards Cython
- *             # requirements, and does not yet fullfill the PEP.
+/* "/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:             # <<<<<<<<<<<<<<
+ *     # Recursive utility function used in __getbuffer__ to get format
+ *     # string. The new location in the format string is returned.
  */
 
-static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
-  int __pyx_v_copy_shape;
-  int __pyx_v_i;
-  int __pyx_v_ndim;
+static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
+  PyArray_Descr *__pyx_v_child = 0;
   int __pyx_v_endian_detector;
   int __pyx_v_little_endian;
-  int __pyx_v_t;
-  char *__pyx_v_f;
-  PyArray_Descr *__pyx_v_descr = 0;
-  int __pyx_v_offset;
-  int __pyx_v_hasfields;
-  int __pyx_r;
+  PyObject *__pyx_v_fields = 0;
+  PyObject *__pyx_v_childname = NULL;
+  PyObject *__pyx_v_new_offset = NULL;
+  PyObject *__pyx_v_t = NULL;
+  char *__pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   int __pyx_t_6;
   int __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
-  char *__pyx_t_9;
-  int __pyx_lineno = 0;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  long __pyx_t_10;
+  char *__pyx_t_11;
+  int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__getbuffer__", 0);
-  if (__pyx_v_info != NULL) {
-    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
-    __Pyx_GIVEREF(__pyx_v_info->obj);
-  }
+  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
 
-  /* "numpy.pxd":200
- *             # of flags
+  /* "/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             # <<<<<<<<<<<<<<
+ *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ *     cdef tuple fields
+ */
+  __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
+ *     cdef tuple i
+ *     cdef int endian_detector = 1
+ *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
+ *     cdef tuple fields
  * 
- *             if info == NULL: return             # <<<<<<<<<<<<<<
+ */
+  __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
+ *     cdef tuple fields
  * 
- *             cdef int copy_shape, i, ndim
+ *     for childname in descr.names:             # <<<<<<<<<<<<<<
+ *         fields = descr.fields[childname]
+ *         child, new_offset = fields
  */
-  __pyx_t_1 = ((__pyx_v_info == NULL) != 0);
-  if (__pyx_t_1) {
-    __pyx_r = 0;
-    goto __pyx_L0;
-    goto __pyx_L3;
+  if (unlikely(__pyx_v_descr->names == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  for (;;) {
+    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #else
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #endif
+    __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-  /* "numpy.pxd":203
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":795
  * 
- *             cdef int copy_shape, i, ndim
- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ *     for childname in descr.names:
+ *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
+ *         child, new_offset = fields
  * 
  */
-  __pyx_v_endian_detector = 1;
+    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3));
+    __pyx_t_3 = 0;
 
-  /* "numpy.pxd":204
- *             cdef int copy_shape, i, ndim
- *             cdef int endian_detector = 1
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
+    /* "/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             # <<<<<<<<<<<<<<
  * 
- *             ndim = PyArray_NDIM(self)
+ *         if (end - f) - <int>(new_offset - offset[0]) < 15:
  */
-  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+    if (likely(__pyx_v_fields != Py_None)) {
+      PyObject* sequence = __pyx_v_fields;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      Py_ssize_t size = Py_SIZE(sequence);
+      #else
+      Py_ssize_t size = PySequence_Size(sequence);
+      #endif
+      if (unlikely(size != 2)) {
+        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
+      #else
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      #endif
+    } else {
+      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3));
+    __pyx_t_3 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-  /* "numpy.pxd":206
- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":798
+ *         child, new_offset = fields
  * 
- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
+ *         if (end - f) - <int>(new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
  * 
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
  */
-  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
+    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0);
+    if (__pyx_t_6) {
 
-  /* "numpy.pxd":208
- *             ndim = PyArray_NDIM(self)
+      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
- *                 copy_shape = 1
- *             else:
+ *         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_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
-  if (__pyx_t_1) {
+      __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_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;}
+    }
 
-    /* "numpy.pxd":209
+    /* "/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 sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 copy_shape = 1             # <<<<<<<<<<<<<<
- *             else:
- *                 copy_shape = 0
+ *         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_v_copy_shape = 1;
-    goto __pyx_L4;
-  }
-  /*else*/ {
+    __pyx_t_6 = ((__pyx_v_child->byteorder == '>') != 0);
+    if (__pyx_t_6) {
+      __pyx_t_7 = (__pyx_v_little_endian != 0);
+    } else {
+      __pyx_t_7 = __pyx_t_6;
+    }
+    if (!__pyx_t_7) {
 
-    /* "numpy.pxd":211
- *                 copy_shape = 1
- *             else:
- *                 copy_shape = 0             # <<<<<<<<<<<<<<
+      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":802
  * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *         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_v_copy_shape = 0;
-  }
-  __pyx_L4:;
+      __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;
+    } else {
+      __pyx_t_6 = __pyx_t_7;
+    }
+    if (__pyx_t_6) {
 
-  /* "numpy.pxd":213
- *                 copy_shape = 0
- * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")
+      /* "/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_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
-  if (__pyx_t_1) {
+      __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_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;}
+    }
 
-    /* "numpy.pxd":214
- * 
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
- *                 raise ValueError(u"ndarray is not C contiguous")
+    /* "/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:             # <<<<<<<<<<<<<<
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1
  */
-    __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) {
+    while (1) {
+      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (!__pyx_t_6) break;
 
-    /* "numpy.pxd":215
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+      /* "/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             # <<<<<<<<<<<<<<
+ *             f += 1
+ *             offset[0] += 1
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_25), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+      (__pyx_v_f[0]) = 120;
 
-  /* "numpy.pxd":217
- *                 raise ValueError(u"ndarray is not C contiguous")
+      /* "/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             # <<<<<<<<<<<<<<
+ *             offset[0] += 1
  * 
- *             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_v_f = (__pyx_v_f + 1);
 
-    /* "numpy.pxd":218
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
- *                 raise ValueError(u"ndarray is not Fortran contiguous")
+      /* "/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_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_10 = 0;
+      (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1);
+    }
 
-    /* "numpy.pxd":219
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":818
+ *             offset[0] += 1
  * 
- *             info.buf = PyArray_DATA(self)
+ *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
+ * 
+ *         if not PyDataType_HASFIELDS(child):
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_27), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+    __pyx_t_10 = 0;
+    (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize);
 
-  /* "numpy.pxd":221
- *                 raise ValueError(u"ndarray is not Fortran contiguous")
+    /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":820
+ *         offset[0] += child.itemsize
  * 
- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
- *             info.ndim = ndim
- *             if copy_shape:
+ *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
+ *             t = child.type_num
+ *             if end - f < 5:
  */
-  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
+    __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
+    if (__pyx_t_6) {
 
-  /* "numpy.pxd":222
+      /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":821
  * 
- *             info.buf = PyArray_DATA(self)
- *             info.ndim = ndim             # <<<<<<<<<<<<<<
- *             if copy_shape:
- *                 # Allocate new buffer for strides and shape info.
+ *         if not PyDataType_HASFIELDS(child):
+ *             t = child.type_num             # <<<<<<<<<<<<<<
+ *             if end - f < 5:
+ *                 raise RuntimeError(u"Format string allocated too short.")
  */
-  __pyx_v_info->ndim = __pyx_v_ndim;
+      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
+      __pyx_t_4 = 0;
 
-  /* "numpy.pxd":223
- *             info.buf = PyArray_DATA(self)
- *             info.ndim = ndim
- *             if copy_shape:             # <<<<<<<<<<<<<<
- *                 # Allocate new buffer for strides and shape info.
- *                 # This is allocated as one block, strides first.
+      /* "/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:             # <<<<<<<<<<<<<<
+ *                 raise RuntimeError(u"Format string allocated too short.")
+ * 
  */
-  __pyx_t_2 = (__pyx_v_copy_shape != 0);
-  if (__pyx_t_2) {
+      __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
+      if (__pyx_t_6) {
 
-    /* "numpy.pxd":226
- *                 # Allocate new buffer for strides and shape info.
- *                 # This is allocated as one block, strides first.
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):
+        /* "/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_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
+        __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_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;}
+      }
 
-    /* "numpy.pxd":227
- *                 # This is allocated as one block, strides first.
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
  */
-    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
+      __pyx_t_4 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 98;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":228
- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
- *                     info.shape[i] = PyArray_DIMS(self)[i]
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
  */
-    __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_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 66;
+        goto __pyx_L11;
+      }
 
-      /* "numpy.pxd":229
- *                 info.shape = info.strides + ndim
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
- *                     info.shape[i] = PyArray_DIMS(self)[i]
- *             else:
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
  */
-      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
+      __pyx_t_4 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 104;
+        goto __pyx_L11;
+      }
 
-      /* "numpy.pxd":230
- *                 for i in range(ndim):
- *                     info.strides[i] = PyArray_STRIDES(self)[i]
- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
- *             else:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
  */
-      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
-    }
-    goto __pyx_L7;
-  }
-  /*else*/ {
+      __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 72;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":232
- *                     info.shape[i] = PyArray_DIMS(self)[i]
- *             else:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
  */
-    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
+      __pyx_t_4 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 105;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":233
- *             else:
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
  */
-    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
-  }
-  __pyx_L7:;
+      __pyx_t_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 73;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":234
- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
- *             info.itemsize = PyArray_ITEMSIZE(self)
- *             info.readonly = not PyArray_ISWRITEABLE(self)
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
  */
-  __pyx_v_info->suboffsets = NULL;
+      __pyx_t_4 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 108;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":235
- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
- *             info.readonly = not PyArray_ISWRITEABLE(self)
- * 
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
  */
-  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
+      __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 76;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":236
- *             info.suboffsets = NULL
- *             info.itemsize = PyArray_ITEMSIZE(self)
- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
- * 
- *             cdef int t
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
  */
-  __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
+      __pyx_t_4 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 113;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":239
- * 
- *             cdef int t
- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
- *             cdef dtype descr = self.descr
- *             cdef list stack
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
  */
-  __pyx_v_f = NULL;
+      __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 81;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":240
- *             cdef int t
- *             cdef char* f = NULL
- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
- *             cdef list stack
- *             cdef int offset
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
  */
-  __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_4 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 102;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":244
- *             cdef int offset
- * 
- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
- * 
- *             if not hasfields and not copy_shape:
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
  */
-  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
+      __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 100;
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":246
- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
- * 
- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
- *                 # do not call releasebuffer
- *                 info.obj = None
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
  */
-  __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0);
-    __pyx_t_1 = __pyx_t_3;
-  } else {
-    __pyx_t_1 = __pyx_t_2;
-  }
-  if (__pyx_t_1) {
+      __pyx_t_4 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 103;
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":248
- *             if not hasfields and not copy_shape:
- *                 # do not call releasebuffer
- *                 info.obj = None             # <<<<<<<<<<<<<<
- *             else:
- *                 # need to call releasebuffer
- */
-    __Pyx_INCREF(Py_None);
-    __Pyx_GIVEREF(Py_None);
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj);
-    __pyx_v_info->obj = Py_None;
-    goto __pyx_L10;
-  }
-  /*else*/ {
-
-    /* "numpy.pxd":251
- *             else:
- *                 # need to call releasebuffer
- *                 info.obj = self             # <<<<<<<<<<<<<<
- * 
- *             if not hasfields:
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
  */
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj);
-    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
-  }
-  __pyx_L10:;
+      __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 102;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
 
-  /* "numpy.pxd":253
- *                 info.obj = self
- * 
- *             if not hasfields:             # <<<<<<<<<<<<<<
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
  */
-  __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
-  if (__pyx_t_1) {
+      __pyx_t_4 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 100;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":254
- * 
- *             if not hasfields:
- *                 t = descr.type_num             # <<<<<<<<<<<<<<
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
+      /* "/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             # <<<<<<<<<<<<<<
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *             else:
  */
-    __pyx_t_5 = __pyx_v_descr->type_num;
-    __pyx_v_t = __pyx_t_5;
+      __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 103;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L11;
+      }
 
-    /* "numpy.pxd":255
- *             if not hasfields:
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")
+      /* "/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"             # <<<<<<<<<<<<<<
+ *             else:
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
  */
-    __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0);
-    if (__pyx_t_1) {
-      __pyx_t_2 = (__pyx_v_little_endian != 0);
-    } else {
-      __pyx_t_2 = __pyx_t_1;
-    }
-    if (!__pyx_t_2) {
+      __pyx_t_4 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_6) {
+        (__pyx_v_f[0]) = 79;
+        goto __pyx_L11;
+      }
+      /*else*/ {
 
-      /* "numpy.pxd":256
- *                 t = descr.type_num
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"
+        /* "/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)             # <<<<<<<<<<<<<<
+ *             f += 1
+ *         else:
  */
-      __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_3 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_4);
+        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_3);
+        __pyx_t_3 = 0;
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+        __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_t_1 = __pyx_t_7;
-    } else {
-      __pyx_t_1 = __pyx_t_2;
-    }
-    if (__pyx_t_1) {
+      __pyx_L11:;
 
-      /* "numpy.pxd":257
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
+      /* "/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             # <<<<<<<<<<<<<<
+ *         else:
+ *             # Cython ignores struct boundary information ("T{...}"),
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L12;
+      __pyx_v_f = (__pyx_v_f + 1);
+      goto __pyx_L9;
     }
-    __pyx_L12:;
+    /*else*/ {
 
-    /* "numpy.pxd":274
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+      /* "/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
+ * 
  */
-    switch (__pyx_v_t) {
+      __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_L9:;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "numpy.pxd":258
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"
+  /* "/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             # <<<<<<<<<<<<<<
+ * 
+ * 
  */
-      case NPY_BYTE:
-      __pyx_v_f = __pyx_k__b;
-      break;
+  __pyx_r = __pyx_v_f;
+  goto __pyx_L0;
 
-      /* "numpy.pxd":259
- *                     raise ValueError(u"Non-native byte order not supported")
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"
+  /* "/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:             # <<<<<<<<<<<<<<
+ *     # Recursive utility function used in __getbuffer__ to get format
+ *     # string. The new location in the format string is returned.
  */
-      case NPY_UBYTE:
-      __pyx_v_f = __pyx_k__B;
-      break;
 
-      /* "numpy.pxd":260
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"
- */
-      case NPY_SHORT:
-      __pyx_v_f = __pyx_k__h;
-      break;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_child);
+  __Pyx_XDECREF(__pyx_v_fields);
+  __Pyx_XDECREF(__pyx_v_childname);
+  __Pyx_XDECREF(__pyx_v_new_offset);
+  __Pyx_XDECREF(__pyx_v_t);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-      /* "numpy.pxd":261
- *                 elif t == NPY_UBYTE:       f = "B"
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"
+/* "/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):             # <<<<<<<<<<<<<<
+ *      cdef PyObject* baseptr
+ *      if base is None:
  */
-      case NPY_USHORT:
-      __pyx_v_f = __pyx_k__H;
-      break;
 
-      /* "numpy.pxd":262
- *                 elif t == NPY_SHORT:       f = "h"
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"
- */
-      case NPY_INT:
-      __pyx_v_f = __pyx_k__i;
-      break;
+static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
+  PyObject *__pyx_v_baseptr;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("set_array_base", 0);
 
-      /* "numpy.pxd":263
- *                 elif t == NPY_USHORT:      f = "H"
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"
+  /* "/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:             # <<<<<<<<<<<<<<
+ *          baseptr = NULL
+ *      else:
  */
-      case NPY_UINT:
-      __pyx_v_f = __pyx_k__I;
-      break;
+  __pyx_t_1 = (__pyx_v_base == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
 
-      /* "numpy.pxd":264
- *                 elif t == NPY_INT:         f = "i"
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"
+    /* "/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             # <<<<<<<<<<<<<<
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!
  */
-      case NPY_LONG:
-      __pyx_v_f = __pyx_k__l;
-      break;
+    __pyx_v_baseptr = NULL;
+    goto __pyx_L3;
+  }
+  /*else*/ {
 
-      /* "numpy.pxd":265
- *                 elif t == NPY_UINT:        f = "I"
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- */
-      case NPY_ULONG:
-      __pyx_v_f = __pyx_k__L;
-      break;
-
-      /* "numpy.pxd":266
- *                 elif t == NPY_LONG:        f = "l"
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"
- */
-      case NPY_LONGLONG:
-      __pyx_v_f = __pyx_k__q;
-      break;
-
-      /* "numpy.pxd":267
- *                 elif t == NPY_ULONG:       f = "L"
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"
- */
-      case NPY_ULONGLONG:
-      __pyx_v_f = __pyx_k__Q;
-      break;
-
-      /* "numpy.pxd":268
- *                 elif t == NPY_LONGLONG:    f = "q"
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
+    /* "/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!             # <<<<<<<<<<<<<<
+ *          baseptr = <PyObject*>base
+ *      Py_XDECREF(arr.base)
  */
-      case NPY_FLOAT:
-      __pyx_v_f = __pyx_k__f;
-      break;
+    Py_INCREF(__pyx_v_base);
 
-      /* "numpy.pxd":269
- *                 elif t == NPY_ULONGLONG:   f = "Q"
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"
+    /* "/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             # <<<<<<<<<<<<<<
+ *      Py_XDECREF(arr.base)
+ *      arr.base = baseptr
  */
-      case NPY_DOUBLE:
-      __pyx_v_f = __pyx_k__d;
-      break;
+    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
+  }
+  __pyx_L3:;
 
-      /* "numpy.pxd":270
- *                 elif t == NPY_FLOAT:       f = "f"
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
+  /* "/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)             # <<<<<<<<<<<<<<
+ *      arr.base = baseptr
+ * 
  */
-      case NPY_LONGDOUBLE:
-      __pyx_v_f = __pyx_k__g;
-      break;
+  Py_XDECREF(__pyx_v_arr->base);
 
-      /* "numpy.pxd":271
- *                 elif t == NPY_DOUBLE:      f = "d"
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+  /* "/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             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object get_array_base(ndarray arr):
  */
-      case NPY_CFLOAT:
-      __pyx_v_f = __pyx_k__Zf;
-      break;
+  __pyx_v_arr->base = __pyx_v_baseptr;
 
-      /* "numpy.pxd":272
- *                 elif t == NPY_LONGDOUBLE:  f = "g"
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"
+  /* "/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):             # <<<<<<<<<<<<<<
+ *      cdef PyObject* baseptr
+ *      if base is None:
  */
-      case NPY_CDOUBLE:
-      __pyx_v_f = __pyx_k__Zd;
-      break;
 
-      /* "numpy.pxd":273
- *                 elif t == NPY_CFLOAT:      f = "Zf"
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
- *                 elif t == NPY_OBJECT:      f = "O"
- *                 else:
- */
-      case NPY_CLONGDOUBLE:
-      __pyx_v_f = __pyx_k__Zg;
-      break;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
 
-      /* "numpy.pxd":274
- *                 elif t == NPY_CDOUBLE:     f = "Zd"
- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+/* "/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
  */
-      case NPY_OBJECT:
-      __pyx_v_f = __pyx_k__O;
-      break;
-      default:
 
-      /* "numpy.pxd":276
- *                 elif t == NPY_OBJECT:      f = "O"
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
- *                 info.format = f
- *                 return
- */
-      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
-      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
-      __pyx_t_8 = 0;
-      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      break;
-    }
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("get_array_base", 0);
 
-    /* "numpy.pxd":277
- *                 else:
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *                 info.format = f             # <<<<<<<<<<<<<<
- *                 return
- *             else:
+  /* "/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:             # <<<<<<<<<<<<<<
+ *         return None
+ *     else:
  */
-    __pyx_v_info->format = __pyx_v_f;
+  __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
+  if (__pyx_t_1) {
 
-    /* "numpy.pxd":278
- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *                 info.format = f
- *                 return             # <<<<<<<<<<<<<<
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+    /* "/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             # <<<<<<<<<<<<<<
+ *     else:
+ *         return <object>arr.base
  */
-    __pyx_r = 0;
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
     goto __pyx_L0;
-    goto __pyx_L11;
   }
   /*else*/ {
 
-    /* "numpy.pxd":280
- *                 return
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
- *                 info.format[0] = c'^' # Native data types, manual alignment
- *                 offset = 0
- */
-    __pyx_v_info->format = ((char *)malloc(255));
-
-    /* "numpy.pxd":281
- *             else:
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
- *                 offset = 0
- *                 f = _util_dtypestring(descr, info.format + 1,
- */
-    (__pyx_v_info->format[0]) = '^';
-
-    /* "numpy.pxd":282
- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
- *                 info.format[0] = c'^' # Native data types, manual alignment
- *                 offset = 0             # <<<<<<<<<<<<<<
- *                 f = _util_dtypestring(descr, info.format + 1,
- *                                       info.format + _buffer_format_string_len,
- */
-    __pyx_v_offset = 0;
-
-    /* "numpy.pxd":285
- *                 f = _util_dtypestring(descr, info.format + 1,
- *                                       info.format + _buffer_format_string_len,
- *                                       &offset)             # <<<<<<<<<<<<<<
- *                 f[0] = c'\0' # Terminate format string
- * 
+    /* "/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             # <<<<<<<<<<<<<<
  */
-    __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_XDECREF(__pyx_r);
+    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
+    __pyx_r = ((PyObject *)__pyx_v_arr->base);
+    goto __pyx_L0;
+  }
 
-    /* "numpy.pxd":286
- *                                       info.format + _buffer_format_string_len,
- *                                       &offset)
- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
+ *      arr.base = baseptr
  * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
+ *     if arr.base is NULL:
+ *         return None
  */
-    (__pyx_v_f[0]) = '\x00';
-  }
-  __pyx_L11:;
 
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
-    __Pyx_GOTREF(__pyx_v_info->obj);
-    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
-  }
-  goto __pyx_L2;
+  /* function exit code */
   __pyx_L0:;
-  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
-    __Pyx_GOTREF(Py_None);
-    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
-  }
-  __pyx_L2:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
+static struct __pyx_vtabstruct_9adios_mpi_file __pyx_vtable_9adios_mpi_file;
 
-/* Python wrapper */
-static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
-static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
-  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
-  __Pyx_RefNannyFinishContext();
+static PyObject *__pyx_tp_new_9adios_mpi_file(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_9adios_mpi_file *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_9adios_mpi_file *)o);
+  p->__pyx_vtab = __pyx_vtabptr_9adios_mpi_file;
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->attr = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
 }
 
-/* "numpy.pxd":288
- *                 f[0] = c'\0' # Terminate format string
- * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)
- */
-
-static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
-
-  /* "numpy.pxd":289
- * 
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- */
-  __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
-  if (__pyx_t_1) {
+static void __pyx_tp_dealloc_9adios_mpi_file(PyObject *o) {
+  struct __pyx_obj_9adios_mpi_file *p = (struct __pyx_obj_9adios_mpi_file *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->var);
+  Py_CLEAR(p->attr);
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-    /* "numpy.pxd":290
- *         def __releasebuffer__(ndarray self, Py_buffer* info):
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 stdlib.free(info.strides)
- */
-    free(__pyx_v_info->format);
-    goto __pyx_L3;
+static int __pyx_tp_traverse_9adios_mpi_file(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_9adios_mpi_file *p = (struct __pyx_obj_9adios_mpi_file *)o;
+  if (p->var) {
+    e = (*v)(p->var, a); if (e) return e;
   }
-  __pyx_L3:;
+  if (p->attr) {
+    e = (*v)(p->attr, a); if (e) return e;
+  }
+  return 0;
+}
 
-  /* "numpy.pxd":291
- *             if PyArray_HASFIELDS(self):
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
- *                 stdlib.free(info.strides)
- *                 # info.shape was stored after info.strides in the same block
- */
-  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
-  if (__pyx_t_1) {
+static int __pyx_tp_clear_9adios_mpi_file(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_obj_9adios_mpi_file *p = (struct __pyx_obj_9adios_mpi_file *)o;
+  tmp = ((PyObject*)p->var);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->attr);
+  p->attr = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
 
-    /* "numpy.pxd":292
- *                 stdlib.free(info.format)
- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
- *                 # info.shape was stored after info.strides in the same block
- * 
- */
-    free(__pyx_v_info->strides);
-    goto __pyx_L4;
+static PyObject *__pyx_getprop_9adios_mpi_4file_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_4name_1__get__(o);
+}
+
+static int __pyx_setprop_9adios_mpi_4file_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_4name_3__set__(o, v);
   }
-  __pyx_L4:;
+  else {
+    return __pyx_pw_9adios_mpi_4file_4name_5__del__(o);
+  }
+}
 
-  __Pyx_RefNannyFinishContext();
+static PyObject *__pyx_getprop_9adios_mpi_4file_nvars(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_5nvars_1__get__(o);
 }
 
-/* "numpy.pxd":768
- * ctypedef npy_cdouble     complex_t
- * 
- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(1, <void*>a)
- * 
- */
+static int __pyx_setprop_9adios_mpi_4file_nvars(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_5nvars_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
+static PyObject *__pyx_getprop_9adios_mpi_4file_nattrs(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_6nattrs_1__get__(o);
+}
 
-  /* "numpy.pxd":769
- * 
- * cdef inline object PyArray_MultiIterNew1(a):
- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_9adios_mpi_4file_nattrs(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_6nattrs_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_9adios_mpi_4file_current_step(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_12current_step_1__get__(o);
 }
 
-/* "numpy.pxd":771
- *     return PyArray_MultiIterNew(1, <void*>a)
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
- * 
- */
+static int __pyx_setprop_9adios_mpi_4file_current_step(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_12current_step_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
+static PyObject *__pyx_getprop_9adios_mpi_4file_last_step(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_9last_step_1__get__(o);
+}
 
-  /* "numpy.pxd":772
- * 
- * cdef inline object PyArray_MultiIterNew2(a, b):
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_9adios_mpi_4file_last_step(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_9last_step_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_9adios_mpi_4file_endianness(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_10endianness_1__get__(o);
 }
 
-/* "numpy.pxd":774
- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
- * 
- */
+static int __pyx_setprop_9adios_mpi_4file_endianness(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_10endianness_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
+static PyObject *__pyx_getprop_9adios_mpi_4file_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_7version_1__get__(o);
+}
 
-  /* "numpy.pxd":775
- * 
- * cdef inline object PyArray_MultiIterNew3(a, b, c):
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_9adios_mpi_4file_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_7version_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_9adios_mpi_4file_file_size(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_9file_size_1__get__(o);
 }
 
-/* "numpy.pxd":777
- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
- * 
- */
+static int __pyx_setprop_9adios_mpi_4file_file_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_9file_size_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
+static PyObject *__pyx_getprop_9adios_mpi_4file_var(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_3var_1__get__(o);
+}
 
-  /* "numpy.pxd":778
- * 
- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static int __pyx_setprop_9adios_mpi_4file_var(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_3var_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_9adios_mpi_4file_3var_5__del__(o);
+  }
+}
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyObject *__pyx_getprop_9adios_mpi_4file_attr(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_4file_4attr_1__get__(o);
 }
 
-/* "numpy.pxd":780
- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
- * 
- */
+static int __pyx_setprop_9adios_mpi_4file_attr(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_4file_4attr_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_9adios_mpi_4file_4attr_5__del__(o);
+  }
+}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
+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)},
+  {0, 0, 0, 0}
+};
 
-  /* "numpy.pxd":781
- * 
- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
- * 
- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+static struct PyGetSetDef __pyx_getsets_9adios_mpi_file[] = {
+  {(char *)"name", __pyx_getprop_9adios_mpi_4file_name, __pyx_setprop_9adios_mpi_4file_name, 0, 0},
+  {(char *)"nvars", __pyx_getprop_9adios_mpi_4file_nvars, __pyx_setprop_9adios_mpi_4file_nvars, 0, 0},
+  {(char *)"nattrs", __pyx_getprop_9adios_mpi_4file_nattrs, __pyx_setprop_9adios_mpi_4file_nattrs, 0, 0},
+  {(char *)"current_step", __pyx_getprop_9adios_mpi_4file_current_step, __pyx_setprop_9adios_mpi_4file_current_step, 0, 0},
+  {(char *)"last_step", __pyx_getprop_9adios_mpi_4file_last_step, __pyx_setprop_9adios_mpi_4file_last_step, 0, 0},
+  {(char *)"endianness", __pyx_getprop_9adios_mpi_4file_endianness, __pyx_setprop_9adios_mpi_4file_endianness, 0, 0},
+  {(char *)"version", __pyx_getprop_9adios_mpi_4file_version, __pyx_setprop_9adios_mpi_4file_version, 0, 0},
+  {(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},
+  {0, 0, 0, 0, 0}
+};
 
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
+static PyTypeObject __pyx_type_9adios_mpi_file = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("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*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_9adios_mpi_file, /*tp_traverse*/
+  __pyx_tp_clear_9adios_mpi_file, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_9adios_mpi_file, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_9adios_mpi_file, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_9adios_mpi_4file_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_9adios_mpi_file, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_9adios_mpi_var __pyx_vtable_9adios_mpi_var;
+
+static PyObject *__pyx_tp_new_9adios_mpi_var(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_9adios_mpi_var *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_9adios_mpi_var *)o);
+  p->__pyx_vtab = __pyx_vtabptr_9adios_mpi_var;
+  p->file = ((struct __pyx_obj_9adios_mpi_file *)Py_None); Py_INCREF(Py_None);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
 }
 
-/* "numpy.pxd":783
- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
- * 
- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
- *     # Recursive utility function used in __getbuffer__ to get format
- *     # string. The new location in the format string is returned.
- */
+static void __pyx_tp_dealloc_9adios_mpi_var(PyObject *o) {
+  struct __pyx_obj_9adios_mpi_var *p = (struct __pyx_obj_9adios_mpi_var *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->file);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->type);
+  Py_CLEAR(p->dims);
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
-  PyArray_Descr *__pyx_v_child = 0;
-  int __pyx_v_endian_detector;
-  int __pyx_v_little_endian;
-  PyObject *__pyx_v_fields = 0;
-  PyObject *__pyx_v_childname = NULL;
-  PyObject *__pyx_v_new_offset = NULL;
-  PyObject *__pyx_v_t = NULL;
-  char *__pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *(*__pyx_t_6)(PyObject *);
-  int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
-  int __pyx_t_10;
-  long __pyx_t_11;
-  char *__pyx_t_12;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
+static int __pyx_tp_traverse_9adios_mpi_var(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_9adios_mpi_var *p = (struct __pyx_obj_9adios_mpi_var *)o;
+  if (p->file) {
+    e = (*v)(((PyObject*)p->file), a); if (e) return e;
+  }
+  if (p->type) {
+    e = (*v)(p->type, a); if (e) return e;
+  }
+  if (p->dims) {
+    e = (*v)(p->dims, a); if (e) return e;
+  }
+  return 0;
+}
 
-  /* "numpy.pxd":790
- *     cdef int delta_offset
- *     cdef tuple i
- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
- *     cdef tuple fields
- */
-  __pyx_v_endian_detector = 1;
+static int __pyx_tp_clear_9adios_mpi_var(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_obj_9adios_mpi_var *p = (struct __pyx_obj_9adios_mpi_var *)o;
+  tmp = ((PyObject*)p->file);
+  p->file = ((struct __pyx_obj_9adios_mpi_file *)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->type);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->dims);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
 
-  /* "numpy.pxd":791
- *     cdef tuple i
- *     cdef int endian_detector = 1
- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
- *     cdef tuple fields
- * 
- */
-  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+static PyObject *__pyx_getprop_9adios_mpi_3var_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_4name_1__get__(o);
+}
 
-  /* "numpy.pxd":794
- *     cdef tuple fields
- * 
- *     for childname in descr.names:             # <<<<<<<<<<<<<<
- *         fields = descr.fields[childname]
- *         child, new_offset = fields
- */
-  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static int __pyx_setprop_9adios_mpi_3var_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_4name_3__set__(o, v);
   }
-  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
-  for (;;) {
-    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    #endif
-    __Pyx_XDECREF(__pyx_v_childname);
-    __pyx_v_childname = __pyx_t_3;
-    __pyx_t_3 = 0;
+  else {
+    return __pyx_pw_9adios_mpi_3var_4name_5__del__(o);
+  }
+}
 
-    /* "numpy.pxd":795
- * 
- *     for childname in descr.names:
- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
- *         child, new_offset = fields
- * 
- */
-    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
-    __pyx_v_fields = ((PyObject*)__pyx_t_3);
-    __pyx_t_3 = 0;
+static PyObject *__pyx_getprop_9adios_mpi_3var_varid(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_5varid_1__get__(o);
+}
 
-    /* "numpy.pxd":796
- *     for childname in descr.names:
- *         fields = descr.fields[childname]
- *         child, new_offset = fields             # <<<<<<<<<<<<<<
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
- */
-    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
-      PyObject* sequence = ((PyObject *)__pyx_v_fields);
-      #if CYTHON_COMPILING_IN_CPYTHON
-      Py_ssize_t size = Py_SIZE(sequence);
-      #else
-      Py_ssize_t size = PySequence_Size(sequence);
-      #endif
-      if (unlikely(size != 2)) {
-        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
-        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
-      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(__pyx_t_4);
-      #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      #endif
-    } else if (1) {
-      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else
-    {
-      Py_ssize_t index = -1;
-      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
-      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_3);
-      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_6 = NULL;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L6_unpacking_done;
-      __pyx_L5_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_6 = NULL;
-      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_L6_unpacking_done:;
-    }
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
-    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
-    __pyx_t_3 = 0;
-    __Pyx_XDECREF(__pyx_v_new_offset);
-    __pyx_v_new_offset = __pyx_t_4;
-    __pyx_t_4 = 0;
+static int __pyx_setprop_9adios_mpi_3var_varid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_5varid_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-    /* "numpy.pxd":798
- *         child, new_offset = fields
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
- * 
- */
-    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (__pyx_t_7) {
+static PyObject *__pyx_getprop_9adios_mpi_3var_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_4type_1__get__(o);
+}
 
-      /* "numpy.pxd":799
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
- * 
- *         if ((child.byteorder == c'>' and little_endian) or
- */
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_32), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L7;
-    }
-    __pyx_L7:;
+static int __pyx_setprop_9adios_mpi_3var_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_4type_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_9adios_mpi_3var_4type_5__del__(o);
+  }
+}
 
-    /* "numpy.pxd":801
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
- * 
- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
- *             (child.byteorder == c'<' and not little_endian)):
- *             raise ValueError(u"Non-native byte order not supported")
- */
-    __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0);
-    if (__pyx_t_7) {
-      __pyx_t_8 = (__pyx_v_little_endian != 0);
-    } else {
-      __pyx_t_8 = __pyx_t_7;
-    }
-    if (!__pyx_t_8) {
+static PyObject *__pyx_getprop_9adios_mpi_3var_ndim(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_4ndim_1__get__(o);
+}
 
-      /* "numpy.pxd":802
- * 
- *         if ((child.byteorder == c'>' and little_endian) or
- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
- *             raise ValueError(u"Non-native byte order not supported")
- *             # One could encode it in the format string and have Cython
- */
-      __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
-      if (__pyx_t_7) {
-        __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0);
-        __pyx_t_10 = __pyx_t_9;
-      } else {
-        __pyx_t_10 = __pyx_t_7;
-      }
-      __pyx_t_7 = __pyx_t_10;
-    } else {
-      __pyx_t_7 = __pyx_t_8;
-    }
-    if (__pyx_t_7) {
+static int __pyx_setprop_9adios_mpi_3var_ndim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_4ndim_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-      /* "numpy.pxd":803
- *         if ((child.byteorder == c'>' and little_endian) or
- *             (child.byteorder == c'<' and not little_endian)):
- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *             # One could encode it in the format string and have Cython
- *             # complain instead, BUT: < and > in format strings also imply
- */
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_33), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L8;
-    }
-    __pyx_L8:;
+static PyObject *__pyx_getprop_9adios_mpi_3var_dims(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_4dims_1__get__(o);
+}
+
+static int __pyx_setprop_9adios_mpi_3var_dims(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_4dims_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_9adios_mpi_3var_4dims_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_9adios_mpi_3var_nsteps(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_9adios_mpi_3var_6nsteps_1__get__(o);
+}
+
+static int __pyx_setprop_9adios_mpi_3var_nsteps(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_9adios_mpi_3var_6nsteps_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+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)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_9adios_mpi_var[] = {
+  {(char *)"name", __pyx_getprop_9adios_mpi_3var_name, __pyx_setprop_9adios_mpi_3var_name, 0, 0},
+  {(char *)"varid", __pyx_getprop_9adios_mpi_3var_varid, __pyx_setprop_9adios_mpi_3var_varid, 0, 0},
+  {(char *)"type", __pyx_getprop_9adios_mpi_3var_type, __pyx_setprop_9adios_mpi_3var_type, 0, 0},
+  {(char *)"ndim", __pyx_getprop_9adios_mpi_3var_ndim, __pyx_setprop_9adios_mpi_3var_ndim, 0, 0},
+  {(char *)"dims", __pyx_getprop_9adios_mpi_3var_dims, __pyx_setprop_9adios_mpi_3var_dims, 0, 0},
+  {(char *)"nsteps", __pyx_getprop_9adios_mpi_3var_nsteps, __pyx_setprop_9adios_mpi_3var_nsteps, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_9adios_mpi_var = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("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*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_9adios_mpi_var, /*tp_traverse*/
+  __pyx_tp_clear_9adios_mpi_var, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_9adios_mpi_var, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_9adios_mpi_var, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_9adios_mpi_3var_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_9adios_mpi_var, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #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)},
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+  #else
+    PyModuleDef_HEAD_INIT,
+  #endif
+    __Pyx_NAMESTR("adios_mpi"),
+    __Pyx_DOCSTR(__pyx_k_ADIOS_is_freely_available_under), /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_15s_d, __pyx_k_15s_d, sizeof(__pyx_k_15s_d), 0, 0, 1, 0},
+  {&__pyx_kp_s_15s_lu, __pyx_k_15s_lu, sizeof(__pyx_k_15s_lu), 0, 0, 1, 0},
+  {&__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_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_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 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_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_LATER, __pyx_k_LATER, sizeof(__pyx_k_LATER), 0, 0, 1, 1},
+  {&__pyx_n_s_MPI, __pyx_k_MPI, sizeof(__pyx_k_MPI), 0, 0, 1, 1},
+  {&__pyx_n_s_NO, __pyx_k_NO, sizeof(__pyx_k_NO), 0, 0, 1, 1},
+  {&__pyx_n_s_NOW, __pyx_k_NOW, sizeof(__pyx_k_NOW), 0, 0, 1, 1},
+  {&__pyx_kp_s_No_valid_variable, __pyx_k_No_valid_variable, sizeof(__pyx_k_No_valid_variable), 0, 0, 1, 0},
+  {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0},
+  {&__pyx_kp_s_Not_a_valid_var, __pyx_k_Not_a_valid_var, sizeof(__pyx_k_Not_a_valid_var), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_file, __pyx_k_Not_an_open_file, sizeof(__pyx_k_Not_an_open_file), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_var, __pyx_k_Not_an_open_var, sizeof(__pyx_k_Not_an_open_var), 0, 0, 1, 0},
+  {&__pyx_kp_s_Not_an_open_variable, __pyx_k_Not_an_open_variable, sizeof(__pyx_k_Not_an_open_variable), 0, 0, 1, 0},
+  {&__pyx_kp_s_Offset_dimension_mismatch, __pyx_k_Offset_dimension_mismatch, sizeof(__pyx_k_Offset_dimension_mismatch), 0, 0, 1, 0},
+  {&__pyx_kp_s_Only_contiguous_arrays_are_suppo, __pyx_k_Only_contiguous_arrays_are_suppo, sizeof(__pyx_k_Only_contiguous_arrays_are_suppo), 0, 0, 1, 0},
+  {&__pyx_kp_s_Reading, __pyx_k_Reading, sizeof(__pyx_k_Reading), 0, 0, 1, 0},
+  {&__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_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_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_adios_mpi, __pyx_k_adios_mpi, sizeof(__pyx_k_adios_mpi), 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_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},
+  {&__pyx_kp_s_bytes, __pyx_k_bytes, sizeof(__pyx_k_bytes), 0, 0, 1, 0},
+  {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
+  {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1},
+  {&__pyx_n_s_complex, __pyx_k_complex, sizeof(__pyx_k_complex), 0, 0, 1, 1},
+  {&__pyx_n_s_complex128, __pyx_k_complex128, sizeof(__pyx_k_complex128), 0, 0, 1, 1},
+  {&__pyx_n_s_complex64, __pyx_k_complex64, sizeof(__pyx_k_complex64), 0, 0, 1, 1},
+  {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1},
+  {&__pyx_n_s_contiguous, __pyx_k_contiguous, sizeof(__pyx_k_contiguous), 0, 0, 1, 1},
+  {&__pyx_n_s_copy, __pyx_k_copy, sizeof(__pyx_k_copy), 0, 0, 1, 1},
+  {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
+  {&__pyx_n_s_current_step, __pyx_k_current_step, sizeof(__pyx_k_current_step), 0, 0, 1, 1},
+  {&__pyx_n_s_data_size, __pyx_k_data_size, sizeof(__pyx_k_data_size), 0, 0, 1, 1},
+  {&__pyx_n_s_dimensions, __pyx_k_dimensions, sizeof(__pyx_k_dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s_dims, __pyx_k_dims, sizeof(__pyx_k_dims), 0, 0, 1, 1},
+  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
+  {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1},
+  {&__pyx_n_s_double_complex, __pyx_k_double_complex, sizeof(__pyx_k_double_complex), 0, 0, 1, 1},
+  {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},
+  {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
+  {&__pyx_n_s_endianness, __pyx_k_endianness, sizeof(__pyx_k_endianness), 0, 0, 1, 1},
+  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
+  {&__pyx_n_s_fd_p, __pyx_k_fd_p, sizeof(__pyx_k_fd_p), 0, 0, 1, 1},
+  {&__pyx_n_s_fh, __pyx_k_fh, sizeof(__pyx_k_fh), 0, 0, 1, 1},
+  {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1},
+  {&__pyx_n_s_file_size, __pyx_k_file_size, sizeof(__pyx_k_file_size), 0, 0, 1, 1},
+  {&__pyx_n_s_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 0, 0, 1, 1},
+  {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
+  {&__pyx_n_s_float128, __pyx_k_float128, sizeof(__pyx_k_float128), 0, 0, 1, 1},
+  {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1},
+  {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1},
+  {&__pyx_n_s_fname, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1},
+  {&__pyx_n_s_fp, __pyx_k_fp, sizeof(__pyx_k_fp), 0, 0, 1, 1},
+  {&__pyx_n_s_from_steps, __pyx_k_from_steps, sizeof(__pyx_k_from_steps), 0, 0, 1, 1},
+  {&__pyx_n_s_global_dimensions, __pyx_k_global_dimensions, sizeof(__pyx_k_global_dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s_group, __pyx_k_group, sizeof(__pyx_k_group), 0, 0, 1, 1},
+  {&__pyx_n_s_group_id, __pyx_k_group_id, sizeof(__pyx_k_group_id), 0, 0, 1, 1},
+  {&__pyx_n_s_group_name, __pyx_k_group_name, sizeof(__pyx_k_group_name), 0, 0, 1, 1},
+  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+  {&__pyx_n_s_int16, __pyx_k_int16, sizeof(__pyx_k_int16), 0, 0, 1, 1},
+  {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1},
+  {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1},
+  {&__pyx_n_s_int8, __pyx_k_int8, sizeof(__pyx_k_int8), 0, 0, 1, 1},
+  {&__pyx_n_s_integer, __pyx_k_integer, sizeof(__pyx_k_integer), 0, 0, 1, 1},
+  {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
+  {&__pyx_n_s_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_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_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_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},
+  {&__pyx_n_s_mype, __pyx_k_mype, sizeof(__pyx_k_mype), 0, 0, 1, 1},
+  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+  {&__pyx_n_s_nattrs, __pyx_k_nattrs, sizeof(__pyx_k_nattrs), 0, 0, 1, 1},
+  {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0},
+  {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0},
+  {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1},
+  {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1},
+  {&__pyx_n_s_nsteps, __pyx_k_nsteps, sizeof(__pyx_k_nsteps), 0, 0, 1, 1},
+  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
+  {&__pyx_n_s_nvars, __pyx_k_nvars, sizeof(__pyx_k_nvars), 0, 0, 1, 1},
+  {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
+  {&__pyx_n_s_parameters, __pyx_k_parameters, sizeof(__pyx_k_parameters), 0, 0, 1, 1},
+  {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
+  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
+  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
+  {&__pyx_n_s_printself, __pyx_k_printself, sizeof(__pyx_k_printself), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
+  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
+  {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1},
+  {&__pyx_n_s_readvar, __pyx_k_readvar, sizeof(__pyx_k_readvar), 0, 0, 1, 1},
+  {&__pyx_n_s_real, __pyx_k_real, sizeof(__pyx_k_real), 0, 0, 1, 1},
+  {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1},
+  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
+  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
+  {&__pyx_n_s_stats, __pyx_k_stats, sizeof(__pyx_k_stats), 0, 0, 1, 1},
+  {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1},
+  {&__pyx_n_s_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_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
+  {&__pyx_n_s_uint16, __pyx_k_uint16, sizeof(__pyx_k_uint16), 0, 0, 1, 1},
+  {&__pyx_n_s_uint32, __pyx_k_uint32, sizeof(__pyx_k_uint32), 0, 0, 1, 1},
+  {&__pyx_n_s_uint64, __pyx_k_uint64, sizeof(__pyx_k_uint64), 0, 0, 1, 1},
+  {&__pyx_n_s_uint8, __pyx_k_uint8, sizeof(__pyx_k_uint8), 0, 0, 1, 1},
+  {&__pyx_n_s_unknown, __pyx_k_unknown, sizeof(__pyx_k_unknown), 0, 0, 1, 1},
+  {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0},
+  {&__pyx_n_s_unsigned_byte, __pyx_k_unsigned_byte, sizeof(__pyx_k_unsigned_byte), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_integer, __pyx_k_unsigned_integer, sizeof(__pyx_k_unsigned_integer), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_long, __pyx_k_unsigned_long, sizeof(__pyx_k_unsigned_long), 0, 0, 1, 1},
+  {&__pyx_n_s_unsigned_short, __pyx_k_unsigned_short, sizeof(__pyx_k_unsigned_short), 0, 0, 1, 1},
+  {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
+  {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1},
+  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
+  {&__pyx_n_s_var, __pyx_k_var, sizeof(__pyx_k_var), 0, 0, 1, 1},
+  {&__pyx_n_s_var_namelist, __pyx_k_var_namelist, sizeof(__pyx_k_var_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s_varid, __pyx_k_varid, sizeof(__pyx_k_varid), 0, 0, 1, 1},
+  {&__pyx_n_s_varname, __pyx_k_varname, sizeof(__pyx_k_varname), 0, 0, 1, 1},
+  {&__pyx_n_s_vars, __pyx_k_vars, sizeof(__pyx_k_vars), 0, 0, 1, 1},
+  {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1},
+  {&__pyx_n_s_vp, __pyx_k_vp, sizeof(__pyx_k_vp), 0, 0, 1, 1},
+  {&__pyx_n_s_when, __pyx_k_when, sizeof(__pyx_k_when), 0, 0, 1, 1},
+  {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_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_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-    /* "numpy.pxd":813
+  /* "adios_mpi.pyx":456
+ *         assert self.fp != NULL, 'Not an open file'
  * 
- *         # Output padding bytes
- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
- *             f[0] = 120 # "x"; pad byte
- *             f += 1
+ *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
+ *         self.nvars = self.fp.nvars
+ *         self.nattrs = self.fp.nattrs
  */
-    while (1) {
-      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (!__pyx_t_7) break;
+  __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);
 
-      /* "numpy.pxd":814
- *         # Output padding bytes
- *         while offset[0] < new_offset:
- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
- *             f += 1
- *             offset[0] += 1
+  /* "adios_mpi.pyx":528
+ *         if len(offset) == 0:
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)             # <<<<<<<<<<<<<<
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)
  */
-      (__pyx_v_f[0]) = 120;
+  __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);
 
-      /* "numpy.pxd":815
- *         while offset[0] < new_offset:
- *             f[0] = 120 # "x"; pad byte
- *             f += 1             # <<<<<<<<<<<<<<
- *             offset[0] += 1
+  /* "/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_v_f = (__pyx_v_f + 1);
+  __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);
 
-      /* "numpy.pxd":816
- *             f[0] = 120 # "x"; pad byte
- *             f += 1
- *             offset[0] += 1             # <<<<<<<<<<<<<<
+  /* "/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")             # <<<<<<<<<<<<<<
  * 
- *         offset[0] += child.itemsize
+ *             info.buf = PyArray_DATA(self)
  */
-      __pyx_t_11 = 0;
-      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
-    }
+  __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);
 
-    /* "numpy.pxd":818
- *             offset[0] += 1
- * 
- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
- * 
- *         if not PyDataType_HASFIELDS(child):
+  /* "/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_11 = 0;
-    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
+  __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);
 
-    /* "numpy.pxd":820
- *         offset[0] += child.itemsize
+  /* "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
- *             t = child.type_num
- *             if end - f < 5:
- */
-    __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
-    if (__pyx_t_7) {
-
-      /* "numpy.pxd":821
+ *         if (end - f) - <int>(new_offset - offset[0]) < 15:
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
  * 
- *         if not PyDataType_HASFIELDS(child):
- *             t = child.type_num             # <<<<<<<<<<<<<<
- *             if end - f < 5:
- *                 raise RuntimeError(u"Format string allocated too short.")
+ *         if ((child.byteorder == c'>' and little_endian) or
  */
-      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_XDECREF(__pyx_v_t);
-      __pyx_v_t = __pyx_t_3;
-      __pyx_t_3 = 0;
+  __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);
 
-      /* "numpy.pxd":822
- *         if not PyDataType_HASFIELDS(child):
- *             t = child.type_num
- *             if end - f < 5:             # <<<<<<<<<<<<<<
- *                 raise RuntimeError(u"Format string allocated too short.")
- * 
+  /* "/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_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
-      if (__pyx_t_7) {
+  __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);
 
-        /* "numpy.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_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_35), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L12;
-      }
-      __pyx_L12:;
+  __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);
 
-      /* "numpy.pxd":826
+  /* "adios_mpi.pyx":567
+ * ## ====================
  * 
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ * def readvar(fname, varname):             # <<<<<<<<<<<<<<
+ *     f = file(fname, comm=MPI.COMM_SELF)
+ *     if not f.var.has_key(varname):
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 98;
-        goto __pyx_L13;
-      }
+  __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;}
 
-      /* "numpy.pxd":827
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+  /* "adios_mpi.pyx":576
+ *     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_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 66;
-        goto __pyx_L13;
-      }
-
-      /* "numpy.pxd":828
- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"
+  __pyx_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_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_52 = PyInt_FromLong(52); if (unlikely(!__pyx_int_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_54 = PyInt_FromLong(54); if (unlikely(!__pyx_int_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initadios_mpi(void); /*proto*/
+PyMODINIT_FUNC initadios_mpi(void)
+#else
+PyMODINIT_FUNC PyInit_adios_mpi(void); /*proto*/
+PyMODINIT_FUNC PyInit_adios_mpi(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_REFNANNY
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_adios_mpi(void)", 0);
+  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #ifdef __Pyx_CyFunction_USED
+  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios_mpi"), __pyx_methods, __Pyx_DOCSTR(__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;}
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  if (__pyx_module_is_main_adios_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 PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "adios_mpi")) {
+      if (unlikely(PyDict_SetItemString(modules, "adios_mpi", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+  }
+  #endif
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Constants init code ---*/
+  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Global init code ---*/
+  /*--- Variable export code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_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_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;}
+  __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;}
+  __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;}
+  __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", 
+  #if CYTHON_COMPILING_IN_PYPY
+  sizeof(PyTypeObject),
+  #else
+  sizeof(PyHeapTypeObject),
+  #endif
+  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Status = __Pyx_ImportType("mpi4py.MPI", "Status", sizeof(struct PyMPIStatusObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Status)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Datatype = __Pyx_ImportType("mpi4py.MPI", "Datatype", sizeof(struct PyMPIDatatypeObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Datatype)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Request = __Pyx_ImportType("mpi4py.MPI", "Request", sizeof(struct PyMPIRequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Request)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Prequest = __Pyx_ImportType("mpi4py.MPI", "Prequest", sizeof(struct PyMPIPrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Prequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Grequest = __Pyx_ImportType("mpi4py.MPI", "Grequest", sizeof(struct PyMPIGrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Grequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Op = __Pyx_ImportType("mpi4py.MPI", "Op", sizeof(struct PyMPIOpObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Op)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Group = __Pyx_ImportType("mpi4py.MPI", "Group", sizeof(struct PyMPIGroupObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Group)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Info = __Pyx_ImportType("mpi4py.MPI", "Info", sizeof(struct PyMPIInfoObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Info)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Errhandler = __Pyx_ImportType("mpi4py.MPI", "Errhandler", sizeof(struct PyMPIErrhandlerObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Errhandler)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Comm = __Pyx_ImportType("mpi4py.MPI", "Comm", sizeof(struct PyMPICommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Comm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Intracomm = __Pyx_ImportType("mpi4py.MPI", "Intracomm", sizeof(struct PyMPIIntracommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intracomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Cartcomm = __Pyx_ImportType("mpi4py.MPI", "Cartcomm", sizeof(struct PyMPICartcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Cartcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Graphcomm = __Pyx_ImportType("mpi4py.MPI", "Graphcomm", sizeof(struct PyMPIGraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Graphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = __Pyx_ImportType("mpi4py.MPI", "Distgraphcomm", sizeof(struct PyMPIDistgraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Distgraphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Intercomm = __Pyx_ImportType("mpi4py.MPI", "Intercomm", sizeof(struct PyMPIIntercommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intercomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Win = __Pyx_ImportType("mpi4py.MPI", "Win", sizeof(struct PyMPIWinObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Win)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_File = __Pyx_ImportType("mpi4py.MPI", "File", sizeof(struct PyMPIFileObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_File)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Variable import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+
+  /* "adios_mpi.pyx":12
+ * """
+ * 
+ * import numpy as np             # <<<<<<<<<<<<<<
+ * cimport numpy as np
+ * 
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 104;
-        goto __pyx_L13;
-      }
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "numpy.pxd":829
- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
+  /* "adios_mpi.pyx":15
+ * cimport numpy as np
+ * 
+ * import mpi4py.MPI as MPI             # <<<<<<<<<<<<<<
+ * cimport mpi4py.MPI as MPI
+ * 
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 72;
-        goto __pyx_L13;
-      }
+  __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_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;
 
-      /* "numpy.pxd":830
- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
+  /* "adios_mpi.pyx":223
+ * ## ====================
+ * 
+ * class DATATYPE:             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 105;
-        goto __pyx_L13;
-      }
+  __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_GOTREF(__pyx_t_2);
 
-      /* "numpy.pxd":831
- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+  /* "adios_mpi.pyx":224
+ * 
+ * class DATATYPE:
+ *     unknown = -1             # <<<<<<<<<<<<<<
+ *     byte = 0
+ *     short = 1
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 73;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":832
- *             elif t == NPY_INT:         f[0] = 105 #"i"
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+  /* "adios_mpi.pyx":225
+ * class DATATYPE:
+ *     unknown = -1
+ *     byte = 0             # <<<<<<<<<<<<<<
+ *     short = 1
+ *     integer = 2
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 108;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":833
- *             elif t == NPY_UINT:        f[0] =  73 #"I"
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+  /* "adios_mpi.pyx":226
+ *     unknown = -1
+ *     byte = 0
+ *     short = 1             # <<<<<<<<<<<<<<
+ *     integer = 2
+ *     long = 4
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 76;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":834
- *             elif t == NPY_LONG:        f[0] = 108 #"l"
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+  /* "adios_mpi.pyx":227
+ *     byte = 0
+ *     short = 1
+ *     integer = 2             # <<<<<<<<<<<<<<
+ *     long = 4
+ *     unsigned_byte = 50
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 113;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":835
- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+  /* "adios_mpi.pyx":228
+ *     short = 1
+ *     integer = 2
+ *     long = 4             # <<<<<<<<<<<<<<
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 81;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":836
- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+  /* "adios_mpi.pyx":229
+ *     integer = 2
+ *     long = 4
+ *     unsigned_byte = 50             # <<<<<<<<<<<<<<
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 102;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":837
- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+  /* "adios_mpi.pyx":230
+ *     long = 4
+ *     unsigned_byte = 50
+ *     unsigned_short = 51             # <<<<<<<<<<<<<<
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 100;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":838
- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+  /* "adios_mpi.pyx":231
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
+ *     unsigned_integer = 52             # <<<<<<<<<<<<<<
+ *     unsigned_long = 54
+ *     real = 5
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 103;
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":839
- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+  /* "adios_mpi.pyx":232
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
+ *     unsigned_long = 54             # <<<<<<<<<<<<<<
+ *     real = 5
+ *     double = 6
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 102;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":840
- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+  /* "adios_mpi.pyx":233
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
+ *     real = 5             # <<<<<<<<<<<<<<
+ *     double = 6
+ *     long_double = 7
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 100;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":841
- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
- *             else:
+  /* "adios_mpi.pyx":234
+ *     unsigned_long = 54
+ *     real = 5
+ *     double = 6             # <<<<<<<<<<<<<<
+ *     long_double = 7
+ *     string = 9
  */
-      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 90;
-        (__pyx_v_f[1]) = 103;
-        __pyx_v_f = (__pyx_v_f + 1);
-        goto __pyx_L13;
-      }
+  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;}
 
-      /* "numpy.pxd":842
- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+  /* "adios_mpi.pyx":235
+ *     real = 5
+ *     double = 6
+ *     long_double = 7             # <<<<<<<<<<<<<<
+ *     string = 9
+ *     complex = 10
  */
-      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (__pyx_t_7) {
-        (__pyx_v_f[0]) = 79;
-        goto __pyx_L13;
-      }
-      /*else*/ {
+  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;}
 
-        /* "numpy.pxd":844
- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
- *             f += 1
- *         else:
+  /* "adios_mpi.pyx":236
+ *     double = 6
+ *     long_double = 7
+ *     string = 9             # <<<<<<<<<<<<<<
+ *     complex = 10
+ *     double_complex = 11
  */
-        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
-        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
-        __pyx_t_5 = 0;
-        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_5);
-        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      }
-      __pyx_L13:;
+  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;}
 
-      /* "numpy.pxd":845
- *             else:
- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
- *             f += 1             # <<<<<<<<<<<<<<
- *         else:
- *             # Cython ignores struct boundary information ("T{...}"),
+  /* "adios_mpi.pyx":237
+ *     long_double = 7
+ *     string = 9
+ *     complex = 10             # <<<<<<<<<<<<<<
+ *     double_complex = 11
+ * 
  */
-      __pyx_v_f = (__pyx_v_f + 1);
-      goto __pyx_L11;
-    }
-    /*else*/ {
+  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;}
 
-      /* "numpy.pxd":849
- *             # Cython ignores struct boundary information ("T{...}"),
- *             # so don't output it
- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
- *     return f
+  /* "adios_mpi.pyx":238
+ *     string = 9
+ *     complex = 10
+ *     double_complex = 11             # <<<<<<<<<<<<<<
  * 
+ * class FLAG:
  */
-      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_v_f = __pyx_t_12;
-    }
-    __pyx_L11:;
-  }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  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;}
 
-  /* "numpy.pxd":850
- *             # so don't output it
- *             f = _util_dtypestring(child, f, end, offset)
- *     return f             # <<<<<<<<<<<<<<
- * 
+  /* "adios_mpi.pyx":223
+ * ## ====================
  * 
+ * class DATATYPE:             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
  */
-  __pyx_r = __pyx_v_f;
-  goto __pyx_L0;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_child);
-  __Pyx_XDECREF(__pyx_v_fields);
-  __Pyx_XDECREF(__pyx_v_childname);
-  __Pyx_XDECREF(__pyx_v_new_offset);
-  __Pyx_XDECREF(__pyx_v_t);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-/* "numpy.pxd":965
- * 
+  /* "adios_mpi.pyx":240
+ *     double_complex = 11
  * 
- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
- *      cdef PyObject* baseptr
- *      if base is None:
+ * 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_GOTREF(__pyx_t_2);
 
-static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
-  PyObject *__pyx_v_baseptr;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  __Pyx_RefNannySetupContext("set_array_base", 0);
-
-  /* "numpy.pxd":967
- * cdef inline void set_array_base(ndarray arr, object base):
- *      cdef PyObject* baseptr
- *      if base is None:             # <<<<<<<<<<<<<<
- *          baseptr = NULL
- *      else:
+  /* "adios_mpi.pyx":241
+ * 
+ * class FLAG:
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     YES = 1
+ *     NO = 2
  */
-  __pyx_t_1 = (__pyx_v_base == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_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;}
 
-    /* "numpy.pxd":968
- *      cdef PyObject* baseptr
- *      if base is None:
- *          baseptr = NULL             # <<<<<<<<<<<<<<
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!
+  /* "adios_mpi.pyx":242
+ * class FLAG:
+ *     UNKNOWN = 0
+ *     YES = 1             # <<<<<<<<<<<<<<
+ *     NO = 2
+ * 
  */
-    __pyx_v_baseptr = NULL;
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  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;}
 
-    /* "numpy.pxd":970
- *          baseptr = NULL
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)
+  /* "adios_mpi.pyx":243
+ *     UNKNOWN = 0
+ *     YES = 1
+ *     NO = 2             # <<<<<<<<<<<<<<
+ * 
+ * class BUFFER_ALLOC_WHEN:
  */
-    Py_INCREF(__pyx_v_base);
+  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;}
 
-    /* "numpy.pxd":971
- *      else:
- *          Py_INCREF(base) # important to do this before decref below!
- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
- *      Py_XDECREF(arr.base)
- *      arr.base = baseptr
+  /* "adios_mpi.pyx":240
+ *     double_complex = 11
+ * 
+ * class FLAG:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     YES = 1
  */
-    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
-  }
-  __pyx_L3:;
+  __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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "numpy.pxd":972
- *          Py_INCREF(base) # important to do this before decref below!
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
- *      arr.base = baseptr
+  /* "adios_mpi.pyx":245
+ *     NO = 2
  * 
+ * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     NOW = 1
  */
-  Py_XDECREF(__pyx_v_arr->base);
+  __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_GOTREF(__pyx_t_2);
 
-  /* "numpy.pxd":973
- *          baseptr = <PyObject*>base
- *      Py_XDECREF(arr.base)
- *      arr.base = baseptr             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":246
  * 
- * cdef inline object get_array_base(ndarray arr):
+ * class BUFFER_ALLOC_WHEN:
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     NOW = 1
+ *     LATER = 2
  */
-  __pyx_v_arr->base = __pyx_v_baseptr;
-
-  __Pyx_RefNannyFinishContext();
-}
+  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;}
 
-/* "numpy.pxd":975
- *      arr.base = baseptr
+  /* "adios_mpi.pyx":247
+ * class BUFFER_ALLOC_WHEN:
+ *     UNKNOWN = 0
+ *     NOW = 1             # <<<<<<<<<<<<<<
+ *     LATER = 2
  * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
  */
+  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;}
 
-static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("get_array_base", 0);
+  /* "adios_mpi.pyx":248
+ *     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;}
 
-  /* "numpy.pxd":976
+  /* "adios_mpi.pyx":245
+ *     NO = 2
  * 
- * cdef inline object get_array_base(ndarray arr):
- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
- *         return None
- *     else:
+ * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     NOW = 1
  */
-  __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
-  if (__pyx_t_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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "numpy.pxd":977
- * cdef inline object get_array_base(ndarray arr):
- *     if arr.base is NULL:
- *         return None             # <<<<<<<<<<<<<<
- *     else:
- *         return <object>arr.base
+  /* "adios_mpi.pyx":254
+ * ## ====================
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(Py_None);
-    __pyx_r = Py_None;
-    goto __pyx_L0;
-    goto __pyx_L3;
-  }
-  /*else*/ {
+  __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_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_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;}
+  __pyx_k_ = ((struct PyMPICommObject *)__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-    /* "numpy.pxd":979
- *         return None
- *     else:
- *         return <object>arr.base             # <<<<<<<<<<<<<<
+  /* "adios_mpi.pyx":260
+ *                    char * name,
+ *                    char * mode,
+ *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     cdef int64_t fd
+ *     cdef int result
  */
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
-    __pyx_r = ((PyObject *)__pyx_v_arr->base);
-    goto __pyx_L0;
-  }
-  __pyx_L3:;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-static struct __pyx_vtabstruct_5adios_AdiosFile __pyx_vtable_5adios_AdiosFile;
-
-static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosFile *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosFile *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosFile;
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosFile(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->group);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosFile(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->group) {
-    e = (*v)(p->group, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosFile(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->group);
-  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_9AdiosFile_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_groups_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_groups_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_9AdiosFile_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  __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_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;}
+  __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;}
+  __pyx_k__2 = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(o);
-}
+  /* "adios_mpi.pyx":304
+ * ## 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_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_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;}
+  __pyx_k__3 = ((struct PyMPICommObject *)__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-static int __pyx_setprop_5adios_9AdiosFile_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "adios_mpi.pyx":420
+ * ## ====================
+ * 
+ * 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;
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_tidx_start(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(o);
-}
+  /* "adios_mpi.pyx":421
+ * 
+ * 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)
+ */
+  __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_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;}
+  __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;}
+  __pyx_k__5 = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
 
-static int __pyx_setprop_5adios_9AdiosFile_tidx_start(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "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;
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_ntimesteps(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(o);
-}
+  /* "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;
 
-static int __pyx_setprop_5adios_9AdiosFile_ntimesteps(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "adios_mpi.pyx":448
+ *     def __init__(self, char * fname,
+ *                  ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP,
+ *                  MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *         self.fp = NULL
+ *         self.var = {}
+ */
+  __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_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_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);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_version(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_7version_1__get__(o);
-}
+  /* "adios_mpi.pyx":567
+ * ## ====================
+ * 
+ * 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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-static int __pyx_setprop_5adios_9AdiosFile_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_7version_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "adios_mpi.pyx":576
+ *     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_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;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_file_size(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_9file_size_1__get__(o);
-}
+  /* "adios_mpi.pyx":1
+ * """             # <<<<<<<<<<<<<<
+ *  ADIOS is freely available under the terms of the BSD license described
+ *  in the COPYING file in the top level directory of this source distribution.
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  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;
 
-static int __pyx_setprop_5adios_9AdiosFile_file_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  /* "/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
+ */
+  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);
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init adios_mpi");
   }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
 }
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_endianness(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_10endianness_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_9AdiosFile_endianness(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+/* Runtime support code */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
 }
+#endif /* CYTHON_REFNANNY */
 
-static PyObject *__pyx_getprop_5adios_9AdiosFile_group(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_9AdiosFile_5group_1__get__(o);
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
 }
 
-static int __pyx_setprop_5adios_9AdiosFile_group(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_9AdiosFile_5group_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_9AdiosFile_5group_5__del__(o);
-  }
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
 }
 
-static PyMethodDef __pyx_methods_5adios_AdiosFile[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosFile[] = {
-  {(char *)"name", __pyx_getprop_5adios_9AdiosFile_name, __pyx_setprop_5adios_9AdiosFile_name, 0, 0},
-  {(char *)"groups_count", __pyx_getprop_5adios_9AdiosFile_groups_count, __pyx_setprop_5adios_9AdiosFile_groups_count, 0, 0},
-  {(char *)"vars_count", __pyx_getprop_5adios_9AdiosFile_vars_count, __pyx_setprop_5adios_9AdiosFile_vars_count, 0, 0},
-  {(char *)"attrs_count", __pyx_getprop_5adios_9AdiosFile_attrs_count, __pyx_setprop_5adios_9AdiosFile_attrs_count, 0, 0},
-  {(char *)"tidx_start", __pyx_getprop_5adios_9AdiosFile_tidx_start, __pyx_setprop_5adios_9AdiosFile_tidx_start, 0, 0},
-  {(char *)"ntimesteps", __pyx_getprop_5adios_9AdiosFile_ntimesteps, __pyx_setprop_5adios_9AdiosFile_ntimesteps, 0, 0},
-  {(char *)"version", __pyx_getprop_5adios_9AdiosFile_version, __pyx_setprop_5adios_9AdiosFile_version, 0, 0},
-  {(char *)"file_size", __pyx_getprop_5adios_9AdiosFile_file_size, __pyx_setprop_5adios_9AdiosFile_file_size, 0, 0},
-  {(char *)"endianness", __pyx_getprop_5adios_9AdiosFile_endianness, __pyx_setprop_5adios_9AdiosFile_endianness, 0, 0},
-  {(char *)"group", __pyx_getprop_5adios_9AdiosFile_group, __pyx_setprop_5adios_9AdiosFile_group, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosFile = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosFile"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosFile), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosFile, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosFile, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosFile, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosFile, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosFile, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_9AdiosFile_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosFile, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-static struct __pyx_vtabstruct_5adios_AdiosGroup __pyx_vtable_5adios_AdiosGroup;
-
-static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosGroup *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosGroup *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosGroup;
-  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosGroup(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->file);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->var);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosGroup(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  if (p->file) {
-    e = (*v)(((PyObject*)p->file), a); if (e) return e;
-  }
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->var) {
-    e = (*v)(p->var, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosGroup(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->file);
-  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->var);
-  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_10AdiosGroup_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_grpid(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_grpid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_timestep(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_timestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_10AdiosGroup_var(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_10AdiosGroup_3var_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_10AdiosGroup_var(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_10AdiosGroup_3var_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_10AdiosGroup_3var_5__del__(o);
-  }
-}
-
-static PyMethodDef __pyx_methods_5adios_AdiosGroup[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosGroup[] = {
-  {(char *)"name", __pyx_getprop_5adios_10AdiosGroup_name, __pyx_setprop_5adios_10AdiosGroup_name, 0, 0},
-  {(char *)"grpid", __pyx_getprop_5adios_10AdiosGroup_grpid, __pyx_setprop_5adios_10AdiosGroup_grpid, 0, 0},
-  {(char *)"vars_count", __pyx_getprop_5adios_10AdiosGroup_vars_count, __pyx_setprop_5adios_10AdiosGroup_vars_count, 0, 0},
-  {(char *)"attrs_count", __pyx_getprop_5adios_10AdiosGroup_attrs_count, __pyx_setprop_5adios_10AdiosGroup_attrs_count, 0, 0},
-  {(char *)"timestep", __pyx_getprop_5adios_10AdiosGroup_timestep, __pyx_setprop_5adios_10AdiosGroup_timestep, 0, 0},
-  {(char *)"lasttimestep", __pyx_getprop_5adios_10AdiosGroup_lasttimestep, __pyx_setprop_5adios_10AdiosGroup_lasttimestep, 0, 0},
-  {(char *)"var", __pyx_getprop_5adios_10AdiosGroup_var, __pyx_setprop_5adios_10AdiosGroup_var, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosGroup = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosGroup"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosGroup), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosGroup, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosGroup, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosGroup, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosGroup, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosGroup, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_10AdiosGroup_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosGroup, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-static struct __pyx_vtabstruct_5adios_AdiosVariable __pyx_vtable_5adios_AdiosVariable;
-
-static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_5adios_AdiosVariable *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_5adios_AdiosVariable *)o);
-  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosVariable;
-  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_5adios_AdiosVariable(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->group);
-  Py_CLEAR(p->name);
-  Py_CLEAR(p->type);
-  Py_CLEAR(p->dims);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_5adios_AdiosVariable(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  if (p->group) {
-    e = (*v)(((PyObject*)p->group), a); if (e) return e;
-  }
-  if (p->name) {
-    e = (*v)(p->name, a); if (e) return e;
-  }
-  if (p->type) {
-    e = (*v)(p->type, a); if (e) return e;
-  }
-  if (p->dims) {
-    e = (*v)(p->dims, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_5adios_AdiosVariable(PyObject *o) {
-  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->group);
-  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->name);
-  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->type);
-  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->dims);
-  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4name_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4name_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4name_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_varid(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_5varid_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_varid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4type_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4type_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4type_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_ndim(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_ndim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_dims(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_4dims_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_dims(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(o, v);
-  }
-  else {
-    return __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(o);
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_timedim(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_timedim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyObject *__pyx_getprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(o);
-}
-
-static int __pyx_setprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
-
-static PyMethodDef __pyx_methods_5adios_AdiosVariable[] = {
-  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_5adios_AdiosVariable[] = {
-  {(char *)"name", __pyx_getprop_5adios_13AdiosVariable_name, __pyx_setprop_5adios_13AdiosVariable_name, 0, 0},
-  {(char *)"varid", __pyx_getprop_5adios_13AdiosVariable_varid, __pyx_setprop_5adios_13AdiosVariable_varid, 0, 0},
-  {(char *)"type", __pyx_getprop_5adios_13AdiosVariable_type, __pyx_setprop_5adios_13AdiosVariable_type, 0, 0},
-  {(char *)"ndim", __pyx_getprop_5adios_13AdiosVariable_ndim, __pyx_setprop_5adios_13AdiosVariable_ndim, 0, 0},
-  {(char *)"dims", __pyx_getprop_5adios_13AdiosVariable_dims, __pyx_setprop_5adios_13AdiosVariable_dims, 0, 0},
-  {(char *)"timedim", __pyx_getprop_5adios_13AdiosVariable_timedim, __pyx_setprop_5adios_13AdiosVariable_timedim, 0, 0},
-  {(char *)"characteristics_count", __pyx_getprop_5adios_13AdiosVariable_characteristics_count, __pyx_setprop_5adios_13AdiosVariable_characteristics_count, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_5adios_AdiosVariable = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("adios.AdiosVariable"), /*tp_name*/
-  sizeof(struct __pyx_obj_5adios_AdiosVariable), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5adios_AdiosVariable, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
-  __pyx_tp_traverse_5adios_AdiosVariable, /*tp_traverse*/
-  __pyx_tp_clear_5adios_AdiosVariable, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_5adios_AdiosVariable, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_5adios_AdiosVariable, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_5adios_13AdiosVariable_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_5adios_AdiosVariable, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-};
-
-static PyMethodDef __pyx_methods[] = {
-  {__Pyx_NAMESTR("init"), (PyCFunction)__pyx_pw_5adios_1init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("open"), (PyCFunction)__pyx_pw_5adios_3open, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("set_group_size"), (PyCFunction)__pyx_pw_5adios_5set_group_size, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_5adios_7write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_int"), (PyCFunction)__pyx_pw_5adios_9write_int, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_long"), (PyCFunction)__pyx_pw_5adios_11write_long, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write_float"), (PyCFunction)__pyx_pw_5adios_13write_float, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_15read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_17close, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("finalize"), (PyCFunction)__pyx_pw_5adios_19finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("init_noxml"), (PyCFunction)__pyx_pw_5adios_21init_noxml, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("allocate_buffer"), (PyCFunction)__pyx_pw_5adios_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("declare_group"), (PyCFunction)__pyx_pw_5adios_25declare_group, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_var"), (PyCFunction)__pyx_pw_5adios_27define_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("define_attribute"), (PyCFunction)__pyx_pw_5adios_29define_attribute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("select_method"), (PyCFunction)__pyx_pw_5adios_31select_method, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("adios2nptype"), (PyCFunction)__pyx_pw_5adios_33adios2nptype, METH_O, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-#if PY_MAJOR_VERSION >= 3
-static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
-  #else
-    PyModuleDef_HEAD_INIT,
-  #endif
-    __Pyx_NAMESTR("adios"),
-    __Pyx_DOCSTR(__pyx_k_36), /* m_doc */
-    -1, /* m_size */
-    __pyx_methods /* m_methods */,
-    NULL, /* m_reload */
-    NULL, /* m_traverse */
-    NULL, /* m_clear */
-    NULL /* m_free */
-};
-#endif
-
-static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
-  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
-  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
-  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
-  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
-  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
-  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
-  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
-  {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
-  {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0},
-  {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0},
-  {&__pyx_kp_u_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 1, 0, 0},
-  {&__pyx_kp_u_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 1, 0, 0},
-  {&__pyx_kp_u_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 1, 0, 0},
-  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
-  {&__pyx_kp_u_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0, 0},
-  {&__pyx_kp_u_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 1, 0, 0},
-  {&__pyx_kp_u_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 1, 0, 0},
-  {&__pyx_n_s_37, __pyx_k_37, sizeof(__pyx_k_37), 0, 0, 1, 1},
-  {&__pyx_n_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 1},
-  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
-  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
-  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
-  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
-  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
-  {&__pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_k__BUFFER_ALLOC_WHEN, sizeof(__pyx_k__BUFFER_ALLOC_WHEN), 0, 0, 1, 1},
-  {&__pyx_n_s__COMM_WORLD, __pyx_k__COMM_WORLD, sizeof(__pyx_k__COMM_WORLD), 0, 0, 1, 1},
-  {&__pyx_n_s__DATATYPE, __pyx_k__DATATYPE, sizeof(__pyx_k__DATATYPE), 0, 0, 1, 1},
-  {&__pyx_n_s__FLAG, __pyx_k__FLAG, sizeof(__pyx_k__FLAG), 0, 0, 1, 1},
-  {&__pyx_n_s__LATER, __pyx_k__LATER, sizeof(__pyx_k__LATER), 0, 0, 1, 1},
-  {&__pyx_n_s__MPI, __pyx_k__MPI, sizeof(__pyx_k__MPI), 0, 0, 1, 1},
-  {&__pyx_n_s__NO, __pyx_k__NO, sizeof(__pyx_k__NO), 0, 0, 1, 1},
-  {&__pyx_n_s__NOW, __pyx_k__NOW, sizeof(__pyx_k__NOW), 0, 0, 1, 1},
-  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
-  {&__pyx_n_s__UNKNOWN, __pyx_k__UNKNOWN, sizeof(__pyx_k__UNKNOWN), 0, 0, 1, 1},
-  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
-  {&__pyx_n_s__YES, __pyx_k__YES, sizeof(__pyx_k__YES), 0, 0, 1, 1},
-  {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1},
-  {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1},
-  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
-  {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1},
-  {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1},
-  {&__pyx_n_s____pyx_vtable__, __pyx_k____pyx_vtable__, sizeof(__pyx_k____pyx_vtable__), 0, 0, 1, 1},
-  {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1},
-  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
-  {&__pyx_n_s__adios, __pyx_k__adios, sizeof(__pyx_k__adios), 0, 0, 1, 1},
-  {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1},
-  {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1},
-  {&__pyx_n_s__attr_namelist, __pyx_k__attr_namelist, sizeof(__pyx_k__attr_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__attrs_count, __pyx_k__attrs_count, sizeof(__pyx_k__attrs_count), 0, 0, 1, 1},
-  {&__pyx_n_s__base_path, __pyx_k__base_path, sizeof(__pyx_k__base_path), 0, 0, 1, 1},
-  {&__pyx_n_s__buffer_size, __pyx_k__buffer_size, sizeof(__pyx_k__buffer_size), 0, 0, 1, 1},
-  {&__pyx_n_s__byte, __pyx_k__byte, sizeof(__pyx_k__byte), 0, 0, 1, 1},
-  {&__pyx_n_s__close, __pyx_k__close, sizeof(__pyx_k__close), 0, 0, 1, 1},
-  {&__pyx_n_s__comm, __pyx_k__comm, sizeof(__pyx_k__comm), 0, 0, 1, 1},
-  {&__pyx_n_s__complex, __pyx_k__complex, sizeof(__pyx_k__complex), 0, 0, 1, 1},
-  {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1},
-  {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1},
-  {&__pyx_n_s__config, __pyx_k__config, sizeof(__pyx_k__config), 0, 0, 1, 1},
-  {&__pyx_n_s__contiguous, __pyx_k__contiguous, sizeof(__pyx_k__contiguous), 0, 0, 1, 1},
-  {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1},
-  {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1},
-  {&__pyx_n_s__data_size, __pyx_k__data_size, sizeof(__pyx_k__data_size), 0, 0, 1, 1},
-  {&__pyx_n_s__dimensions, __pyx_k__dimensions, sizeof(__pyx_k__dimensions), 0, 0, 1, 1},
-  {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1},
-  {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1},
-  {&__pyx_n_s__double_complex, __pyx_k__double_complex, sizeof(__pyx_k__double_complex), 0, 0, 1, 1},
-  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
-  {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1},
-  {&__pyx_n_s__endianness, __pyx_k__endianness, sizeof(__pyx_k__endianness), 0, 0, 1, 1},
-  {&__pyx_n_s__fd_p, __pyx_k__fd_p, sizeof(__pyx_k__fd_p), 0, 0, 1, 1},
-  {&__pyx_n_s__fh, __pyx_k__fh, sizeof(__pyx_k__fh), 0, 0, 1, 1},
-  {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1},
-  {&__pyx_n_s__file_size, __pyx_k__file_size, sizeof(__pyx_k__file_size), 0, 0, 1, 1},
-  {&__pyx_n_s__fill, __pyx_k__fill, sizeof(__pyx_k__fill), 0, 0, 1, 1},
-  {&__pyx_n_s__flags, __pyx_k__flags, sizeof(__pyx_k__flags), 0, 0, 1, 1},
-  {&__pyx_n_s__float128, __pyx_k__float128, sizeof(__pyx_k__float128), 0, 0, 1, 1},
-  {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1},
-  {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1},
-  {&__pyx_n_s__fname, __pyx_k__fname, sizeof(__pyx_k__fname), 0, 0, 1, 1},
-  {&__pyx_n_s__fp, __pyx_k__fp, sizeof(__pyx_k__fp), 0, 0, 1, 1},
-  {&__pyx_n_s__gh, __pyx_k__gh, sizeof(__pyx_k__gh), 0, 0, 1, 1},
-  {&__pyx_n_s__global_dimensions, __pyx_k__global_dimensions, sizeof(__pyx_k__global_dimensions), 0, 0, 1, 1},
-  {&__pyx_n_s__gp, __pyx_k__gp, sizeof(__pyx_k__gp), 0, 0, 1, 1},
-  {&__pyx_n_s__group, __pyx_k__group, sizeof(__pyx_k__group), 0, 0, 1, 1},
-  {&__pyx_n_s__group_id, __pyx_k__group_id, sizeof(__pyx_k__group_id), 0, 0, 1, 1},
-  {&__pyx_n_s__group_name, __pyx_k__group_name, sizeof(__pyx_k__group_name), 0, 0, 1, 1},
-  {&__pyx_n_s__group_namelist, __pyx_k__group_namelist, sizeof(__pyx_k__group_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__groups_count, __pyx_k__groups_count, sizeof(__pyx_k__groups_count), 0, 0, 1, 1},
-  {&__pyx_n_s__grpid, __pyx_k__grpid, sizeof(__pyx_k__grpid), 0, 0, 1, 1},
-  {&__pyx_n_s__int16, __pyx_k__int16, sizeof(__pyx_k__int16), 0, 0, 1, 1},
-  {&__pyx_n_s__int32, __pyx_k__int32, sizeof(__pyx_k__int32), 0, 0, 1, 1},
-  {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1},
-  {&__pyx_n_s__int8, __pyx_k__int8, sizeof(__pyx_k__int8), 0, 0, 1, 1},
-  {&__pyx_n_s__integer, __pyx_k__integer, sizeof(__pyx_k__integer), 0, 0, 1, 1},
-  {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1},
-  {&__pyx_n_s__local_offsets, __pyx_k__local_offsets, sizeof(__pyx_k__local_offsets), 0, 0, 1, 1},
-  {&__pyx_n_s__long, __pyx_k__long, sizeof(__pyx_k__long), 0, 0, 1, 1},
-  {&__pyx_n_s__long_double, __pyx_k__long_double, sizeof(__pyx_k__long_double), 0, 0, 1, 1},
-  {&__pyx_n_s__method, __pyx_k__method, sizeof(__pyx_k__method), 0, 0, 1, 1},
-  {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1},
-  {&__pyx_n_s__mype, __pyx_k__mype, sizeof(__pyx_k__mype), 0, 0, 1, 1},
-  {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1},
-  {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1},
-  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
-  {&__pyx_n_s__ntimesteps, __pyx_k__ntimesteps, sizeof(__pyx_k__ntimesteps), 0, 0, 1, 1},
-  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
-  {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1},
-  {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1},
-  {&__pyx_n_s__parameters, __pyx_k__parameters, sizeof(__pyx_k__parameters), 0, 0, 1, 1},
-  {&__pyx_n_s__path, __pyx_k__path, sizeof(__pyx_k__path), 0, 0, 1, 1},
-  {&__pyx_n_s__print, __pyx_k__print, sizeof(__pyx_k__print), 0, 0, 1, 1},
-  {&__pyx_n_s__printself, __pyx_k__printself, sizeof(__pyx_k__printself), 0, 0, 1, 1},
-  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
-  {&__pyx_n_s__read, __pyx_k__read, sizeof(__pyx_k__read), 0, 0, 1, 1},
-  {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1},
-  {&__pyx_n_s__short, __pyx_k__short, sizeof(__pyx_k__short), 0, 0, 1, 1},
-  {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1},
-  {&__pyx_n_s__split, __pyx_k__split, sizeof(__pyx_k__split), 0, 0, 1, 1},
-  {&__pyx_n_s__stats, __pyx_k__stats, sizeof(__pyx_k__stats), 0, 0, 1, 1},
-  {&__pyx_n_s__string, __pyx_k__string, sizeof(__pyx_k__string), 0, 0, 1, 1},
-  {&__pyx_n_s__tidx_start, __pyx_k__tidx_start, sizeof(__pyx_k__tidx_start), 0, 0, 1, 1},
-  {&__pyx_n_s__time_index, __pyx_k__time_index, sizeof(__pyx_k__time_index), 0, 0, 1, 1},
-  {&__pyx_n_s__timedim, __pyx_k__timedim, sizeof(__pyx_k__timedim), 0, 0, 1, 1},
-  {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1},
-  {&__pyx_n_s__uint16, __pyx_k__uint16, sizeof(__pyx_k__uint16), 0, 0, 1, 1},
-  {&__pyx_n_s__uint32, __pyx_k__uint32, sizeof(__pyx_k__uint32), 0, 0, 1, 1},
-  {&__pyx_n_s__uint64, __pyx_k__uint64, sizeof(__pyx_k__uint64), 0, 0, 1, 1},
-  {&__pyx_n_s__uint8, __pyx_k__uint8, sizeof(__pyx_k__uint8), 0, 0, 1, 1},
-  {&__pyx_n_s__unknown, __pyx_k__unknown, sizeof(__pyx_k__unknown), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_byte, __pyx_k__unsigned_byte, sizeof(__pyx_k__unsigned_byte), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_integer, __pyx_k__unsigned_integer, sizeof(__pyx_k__unsigned_integer), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_long, __pyx_k__unsigned_long, sizeof(__pyx_k__unsigned_long), 0, 0, 1, 1},
-  {&__pyx_n_s__unsigned_short, __pyx_k__unsigned_short, sizeof(__pyx_k__unsigned_short), 0, 0, 1, 1},
-  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
-  {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1},
-  {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1},
-  {&__pyx_n_s__var, __pyx_k__var, sizeof(__pyx_k__var), 0, 0, 1, 1},
-  {&__pyx_n_s__var_namelist, __pyx_k__var_namelist, sizeof(__pyx_k__var_namelist), 0, 0, 1, 1},
-  {&__pyx_n_s__varid, __pyx_k__varid, sizeof(__pyx_k__varid), 0, 0, 1, 1},
-  {&__pyx_n_s__vars_count, __pyx_k__vars_count, sizeof(__pyx_k__vars_count), 0, 0, 1, 1},
-  {&__pyx_n_s__version, __pyx_k__version, sizeof(__pyx_k__version), 0, 0, 1, 1},
-  {&__pyx_n_s__vp, __pyx_k__vp, sizeof(__pyx_k__vp), 0, 0, 1, 1},
-  {&__pyx_n_s__when, __pyx_k__when, sizeof(__pyx_k__when), 0, 0, 1, 1},
-  {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
-  {0, 0, 0, 0, 0, 0, 0}
-};
-static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  return 0;
-  __pyx_L1_error:;
-  return -1;
-}
-
-static int __Pyx_InitCachedConstants(void) {
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
-
-  /* "adios.pyx":447
- *         assert self.fp != NULL, 'Not an open file'
- * 
- *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
- *         self.groups_count = self.fp.groups_count
- *         self.vars_count   = self.fp.vars_count
- */
-  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_13);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
-
-  /* "adios.pyx":577
- *         if len(offset) == 0:
- *             npoffset = npshape.copy()
- *             npoffset.fill(0)             # <<<<<<<<<<<<<<
- *         else:
- *             npoffset = np.array(offset, dtype=np.int64)
- */
-  __pyx_k_tuple_18 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_k_tuple_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_18);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_18));
-
-  /* "numpy.pxd":215
- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
- * 
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- */
-  __pyx_k_tuple_25 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_24)); if (unlikely(!__pyx_k_tuple_25)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_25);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-
-  /* "numpy.pxd":219
- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
- * 
- *             info.buf = PyArray_DATA(self)
- */
-  __pyx_k_tuple_27 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_26)); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_27);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_27));
-
-  /* "numpy.pxd":257
- *                 if ((descr.byteorder == c'>' and little_endian) or
- *                     (descr.byteorder == c'<' and not little_endian)):
- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *                 if   t == NPY_BYTE:        f = "b"
- *                 elif t == NPY_UBYTE:       f = "B"
- */
-  __pyx_k_tuple_29 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_29);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29));
-
-  /* "numpy.pxd":799
- * 
- *         if (end - f) - (new_offset - offset[0]) < 15:
- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
- * 
- *         if ((child.byteorder == c'>' and little_endian) or
- */
-  __pyx_k_tuple_32 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_31)); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_32);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_32));
-
-  /* "numpy.pxd":803
- *         if ((child.byteorder == c'>' and little_endian) or
- *             (child.byteorder == c'<' and not little_endian)):
- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
- *             # One could encode it in the format string and have Cython
- *             # complain instead, BUT: < and > in format strings also imply
- */
-  __pyx_k_tuple_33 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_33);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33));
-
-  /* "numpy.pxd":823
- *             t = child.type_num
- *             if end - f < 5:
- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
- * 
- *             # Until ticket #99 is fixed, use integers to avoid warnings
- */
-  __pyx_k_tuple_35 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_34)); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_35);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));
-  __Pyx_RefNannyFinishContext();
-  return 0;
-  __pyx_L1_error:;
-  __Pyx_RefNannyFinishContext();
-  return -1;
-}
-
-static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_52 = PyInt_FromLong(52); if (unlikely(!__pyx_int_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_54 = PyInt_FromLong(54); if (unlikely(!__pyx_int_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  return 0;
-  __pyx_L1_error:;
-  return -1;
-}
-
-#if PY_MAJOR_VERSION < 3
-PyMODINIT_FUNC initadios(void); /*proto*/
-PyMODINIT_FUNC initadios(void)
-#else
-PyMODINIT_FUNC PyInit_adios(void); /*proto*/
-PyMODINIT_FUNC PyInit_adios(void)
-#endif
-{
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannyDeclarations
-  #if CYTHON_REFNANNY
-  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
-  if (!__Pyx_RefNanny) {
-      PyErr_Clear();
-      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
-      if (!__Pyx_RefNanny)
-          Py_FatalError("failed to import 'refnanny' module");
-  }
-  #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_adios(void)", 0);
-  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  /*--- Library function declarations ---*/
-  /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
-  PyEval_InitThreads();
-  #endif
-  #endif
-  /*--- Module creation code ---*/
-  #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_36), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
-  #else
-  __pyx_m = PyModule_Create(&__pyx_moduledef);
-  #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_d);
-  #if PY_MAJOR_VERSION >= 3
-  {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "adios")) {
-      if (unlikely(PyDict_SetItemString(modules, "adios", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_INCREF(__pyx_b);
-  #endif
-  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  /*--- Initialize various global constants etc. ---*/
-  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
-  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  if (__pyx_module_is_main_adios) {
-    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  }
-  /*--- Builtin init code ---*/
-  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Constants init code ---*/
-  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Global init code ---*/
-  /*--- Variable export code ---*/
-  /*--- Function export code ---*/
-  /*--- Type init code ---*/
-  __pyx_vtabptr_5adios_AdiosFile = &__pyx_vtable_5adios_AdiosFile;
-  __pyx_vtable_5adios_AdiosFile.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_close;
-  __pyx_vtable_5adios_AdiosFile.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosFile.tp_dict, __pyx_vtabptr_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosFile", (PyObject *)&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosFile = &__pyx_type_5adios_AdiosFile;
-  __pyx_vtabptr_5adios_AdiosGroup = &__pyx_vtable_5adios_AdiosGroup;
-  __pyx_vtable_5adios_AdiosGroup.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_close;
-  __pyx_vtable_5adios_AdiosGroup.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosGroup.tp_dict, __pyx_vtabptr_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosGroup", (PyObject *)&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosGroup = &__pyx_type_5adios_AdiosGroup;
-  __pyx_vtabptr_5adios_AdiosVariable = &__pyx_vtable_5adios_AdiosVariable;
-  __pyx_vtable_5adios_AdiosVariable.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_close;
-  __pyx_vtable_5adios_AdiosVariable.read = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args))__pyx_f_5adios_13AdiosVariable_read;
-  __pyx_vtable_5adios_AdiosVariable.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_printself;
-  if (PyType_Ready(&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosVariable.tp_dict, __pyx_vtabptr_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AdiosVariable", (PyObject *)&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5adios_AdiosVariable = &__pyx_type_5adios_AdiosVariable;
-  /*--- Type import code ---*/
-  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
-  #if CYTHON_COMPILING_IN_PYPY
-  sizeof(PyTypeObject),
-  #else
-  sizeof(PyHeapTypeObject),
-  #endif
-  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Status = __Pyx_ImportType("mpi4py.MPI", "Status", sizeof(struct PyMPIStatusObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Status)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Datatype = __Pyx_ImportType("mpi4py.MPI", "Datatype", sizeof(struct PyMPIDatatypeObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Datatype)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Request = __Pyx_ImportType("mpi4py.MPI", "Request", sizeof(struct PyMPIRequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Request)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Prequest = __Pyx_ImportType("mpi4py.MPI", "Prequest", sizeof(struct PyMPIPrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Prequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Grequest = __Pyx_ImportType("mpi4py.MPI", "Grequest", sizeof(struct PyMPIGrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Grequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Op = __Pyx_ImportType("mpi4py.MPI", "Op", sizeof(struct PyMPIOpObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Op)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Group = __Pyx_ImportType("mpi4py.MPI", "Group", sizeof(struct PyMPIGroupObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Group)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Info = __Pyx_ImportType("mpi4py.MPI", "Info", sizeof(struct PyMPIInfoObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Info)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Errhandler = __Pyx_ImportType("mpi4py.MPI", "Errhandler", sizeof(struct PyMPIErrhandlerObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Errhandler)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Comm = __Pyx_ImportType("mpi4py.MPI", "Comm", sizeof(struct PyMPICommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Comm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Intracomm = __Pyx_ImportType("mpi4py.MPI", "Intracomm", sizeof(struct PyMPIIntracommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intracomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Cartcomm = __Pyx_ImportType("mpi4py.MPI", "Cartcomm", sizeof(struct PyMPICartcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Cartcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Graphcomm = __Pyx_ImportType("mpi4py.MPI", "Graphcomm", sizeof(struct PyMPIGraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Graphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = __Pyx_ImportType("mpi4py.MPI", "Distgraphcomm", sizeof(struct PyMPIDistgraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Distgraphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Intercomm = __Pyx_ImportType("mpi4py.MPI", "Intercomm", sizeof(struct PyMPIIntercommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intercomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_Win = __Pyx_ImportType("mpi4py.MPI", "Win", sizeof(struct PyMPIWinObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Win)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_6mpi4py_3MPI_File = __Pyx_ImportType("mpi4py.MPI", "File", sizeof(struct PyMPIFileObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_File)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Variable import code ---*/
-  /*--- Function import code ---*/
-  /*--- Execution code ---*/
-
-  /* "adios.pyx":8
- * """
- * 
- * import numpy as np             # <<<<<<<<<<<<<<
- * cimport numpy as np
- * 
- */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "adios.pyx":11
- * cimport numpy as np
- * 
- * import mpi4py.MPI as MPI             # <<<<<<<<<<<<<<
- * cimport mpi4py.MPI as MPI
- * 
- */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s_38));
-  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_38));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s_38));
-  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_37), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__MPI, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "adios.pyx":180
- * ## ==========
- * 
- * class DATATYPE(object):             # <<<<<<<<<<<<<<
- *     unknown = -1
- *     byte = 0
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":181
- * 
- * class DATATYPE(object):
- *     unknown = -1             # <<<<<<<<<<<<<<
- *     byte = 0
- *     short = 1
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":182
- * class DATATYPE(object):
- *     unknown = -1
- *     byte = 0             # <<<<<<<<<<<<<<
- *     short = 1
- *     integer = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":183
- *     unknown = -1
- *     byte = 0
- *     short = 1             # <<<<<<<<<<<<<<
- *     integer = 2
- *     long = 4
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":184
- *     byte = 0
- *     short = 1
- *     integer = 2             # <<<<<<<<<<<<<<
- *     long = 4
- *     unsigned_byte = 50
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":185
- *     short = 1
- *     integer = 2
- *     long = 4             # <<<<<<<<<<<<<<
- *     unsigned_byte = 50
- *     unsigned_short = 51
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":186
- *     integer = 2
- *     long = 4
- *     unsigned_byte = 50             # <<<<<<<<<<<<<<
- *     unsigned_short = 51
- *     unsigned_integer = 52
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":187
- *     long = 4
- *     unsigned_byte = 50
- *     unsigned_short = 51             # <<<<<<<<<<<<<<
- *     unsigned_integer = 52
- *     unsigned_long = 54
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":188
- *     unsigned_byte = 50
- *     unsigned_short = 51
- *     unsigned_integer = 52             # <<<<<<<<<<<<<<
- *     unsigned_long = 54
- *     real = 5
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":189
- *     unsigned_short = 51
- *     unsigned_integer = 52
- *     unsigned_long = 54             # <<<<<<<<<<<<<<
- *     real = 5
- *     double = 6
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":190
- *     unsigned_integer = 52
- *     unsigned_long = 54
- *     real = 5             # <<<<<<<<<<<<<<
- *     double = 6
- *     long_double = 7
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":191
- *     unsigned_long = 54
- *     real = 5
- *     double = 6             # <<<<<<<<<<<<<<
- *     long_double = 7
- *     string = 9
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":192
- *     real = 5
- *     double = 6
- *     long_double = 7             # <<<<<<<<<<<<<<
- *     string = 9
- *     complex = 10
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":193
- *     double = 6
- *     long_double = 7
- *     string = 9             # <<<<<<<<<<<<<<
- *     complex = 10
- *     double_complex = 11
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":194
- *     long_double = 7
- *     string = 9
- *     complex = 10             # <<<<<<<<<<<<<<
- *     double_complex = 11
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__complex, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":195
- *     string = 9
- *     complex = 10
- *     double_complex = 11             # <<<<<<<<<<<<<<
- * 
- * class FLAG(object):
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":180
- * ## ==========
- * 
- * class DATATYPE(object):             # <<<<<<<<<<<<<<
- *     unknown = -1
- *     byte = 0
- */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__DATATYPE, __pyx_n_s__DATATYPE, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__DATATYPE, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":197
- *     double_complex = 11
- * 
- * class FLAG(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     YES = 1
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":198
- * 
- * class FLAG(object):
- *     UNKNOWN = 0             # <<<<<<<<<<<<<<
- *     YES = 1
- *     NO = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":199
- * class FLAG(object):
- *     UNKNOWN = 0
- *     YES = 1             # <<<<<<<<<<<<<<
- *     NO = 2
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":200
- *     UNKNOWN = 0
- *     YES = 1
- *     NO = 2             # <<<<<<<<<<<<<<
- * 
- * class BUFFER_ALLOC_WHEN(object):
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":197
- *     double_complex = 11
- * 
- * class FLAG(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     YES = 1
- */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__FLAG, __pyx_n_s__FLAG, __pyx_n_s__adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":202
- *     NO = 2
- * 
- * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     NOW = 1
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-
-  /* "adios.pyx":203
- * 
- * class BUFFER_ALLOC_WHEN(object):
- *     UNKNOWN = 0             # <<<<<<<<<<<<<<
- *     NOW = 1
- *     LATER = 2
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":204
- * class BUFFER_ALLOC_WHEN(object):
- *     UNKNOWN = 0
- *     NOW = 1             # <<<<<<<<<<<<<<
- *     LATER = 2
- * 
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":205
- *     UNKNOWN = 0
- *     NOW = 1
- *     LATER = 2             # <<<<<<<<<<<<<<
- * 
- * ## ==========
- */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "adios.pyx":202
- *     NO = 2
- * 
- * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
- *     UNKNOWN = 0
- *     NOW = 1
- */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "adios.pyx":211
- * ## ==========
- * 
- * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init(config, comm.ob_mpi)
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_1 = ((struct PyMPICommObject *)__pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "adios.pyx":217
- *                    char * name,
- *                    char * mode,
- *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     cdef int64_t fd
- *     cdef int result
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_2 = ((struct PyMPICommObject *)__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "adios.pyx":261
- * ## ADIOS No-XML API
- * ## ==========
- * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *     return adios_init_noxml(comm.ob_mpi)
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_6 = ((struct PyMPICommObject *)__pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "adios.pyx":440
- *     cpdef public dict group
- * 
- *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.fp = NULL
- *         self.group = {}
- */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_k_10 = ((struct PyMPICommObject *)__pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-
-  /* "adios.pyx":1
- * """             # <<<<<<<<<<<<<<
- *  ADIOS is freely available under the terms of the BSD license described
- *  in the COPYING file in the top level directory of this source distribution.
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-
-  /* "numpy.pxd":975
- *      arr.base = baseptr
- * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
- */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  if (__pyx_m) {
-    __Pyx_AddTraceback("init adios", __pyx_clineno, __pyx_lineno, __pyx_filename);
-    Py_DECREF(__pyx_m); __pyx_m = 0;
-  } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init adios");
-  }
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
-  return __pyx_m;
-  #endif
-}
-
-/* Runtime support code */
-#if CYTHON_REFNANNY
-static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
-    PyObject *m = NULL, *p = NULL;
-    void *r = NULL;
-    m = PyImport_ImportModule((char *)modname);
-    if (!m) goto end;
-    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
-    if (!p) goto end;
-    r = PyLong_AsVoidPtr(p);
-end:
-    Py_XDECREF(p);
-    Py_XDECREF(m);
-    return (__Pyx_RefNannyAPIStruct *)r;
-}
-#endif /* CYTHON_REFNANNY */
-
-static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
-    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
-    if (unlikely(!result)) {
-        PyErr_Format(PyExc_NameError,
-#if PY_MAJOR_VERSION >= 3
-            "name '%U' is not defined", name);
-#else
-            "name '%s' is not defined", PyString_AS_STRING(name));
-#endif
-    }
-    return result;
-}
-
-static void __Pyx_RaiseDoubleKeywordsError(
-    const char* func_name,
-    PyObject* kw_name)
-{
-    PyErr_Format(PyExc_TypeError,
-        #if PY_MAJOR_VERSION >= 3
-        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
-        #else
-        "%s() got multiple values for keyword argument '%s'", func_name,
-        PyString_AsString(kw_name));
-        #endif
-}
-
-static int __Pyx_ParseOptionalKeywords(
-    PyObject *kwds,
-    PyObject **argnames[],
-    PyObject *kwds2,
-    PyObject *values[],
-    Py_ssize_t num_pos_args,
-    const char* function_name)
-{
-    PyObject *key = 0, *value = 0;
-    Py_ssize_t pos = 0;
-    PyObject*** name;
-    PyObject*** first_kw_arg = argnames + num_pos_args;
-    while (PyDict_Next(kwds, &pos, &key, &value)) {
-        name = first_kw_arg;
-        while (*name && (**name != key)) name++;
-        if (*name) {
-            values[name-argnames] = value;
-            continue;
-        }
-        name = first_kw_arg;
-        #if PY_MAJOR_VERSION < 3
-        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
-            while (*name) {
-                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
-                        && _PyString_Eq(**name, key)) {
-                    values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    if ((**argname == key) || (
-                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
-                             && _PyString_Eq(**argname, key))) {
-                        goto arg_passed_twice;
-                    }
-                    argname++;
-                }
-            }
-        } else
-        #endif
-        if (likely(PyUnicode_Check(key))) {
-            while (*name) {
-                int cmp = (**name == key) ? 0 :
-                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
-                #endif
-                    PyUnicode_Compare(**name, key);
-                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                if (cmp == 0) {
-                    values[name-argnames] = value;
-                    break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    int cmp = (**argname == key) ? 0 :
-                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
-                    #endif
-                        PyUnicode_Compare(**argname, key);
-                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                    if (cmp == 0) goto arg_passed_twice;
-                    argname++;
-                }
-            }
-        } else
-            goto invalid_keyword_type;
-        if (kwds2) {
-            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
-        } else {
-            goto invalid_keyword;
-        }
-    }
-    return 0;
-arg_passed_twice:
-    __Pyx_RaiseDoubleKeywordsError(function_name, key);
-    goto bad;
-invalid_keyword_type:
-    PyErr_Format(PyExc_TypeError,
-        "%s() keywords must be strings", function_name);
-    goto bad;
-invalid_keyword:
-    PyErr_Format(PyExc_TypeError,
-    #if PY_MAJOR_VERSION < 3
-        "%s() got an unexpected keyword argument '%s'",
-        function_name, PyString_AsString(key));
-    #else
-        "%s() got an unexpected keyword argument '%U'",
-        function_name, key);
-    #endif
-bad:
-    return -1;
-}
-
-static void __Pyx_RaiseArgtupleInvalid(
-    const char* func_name,
-    int exact,
-    Py_ssize_t num_min,
-    Py_ssize_t num_max,
-    Py_ssize_t num_found)
-{
-    Py_ssize_t num_expected;
-    const char *more_or_less;
-    if (num_found < num_min) {
-        num_expected = num_min;
-        more_or_less = "at least";
-    } else {
-        num_expected = num_max;
-        more_or_less = "at most";
-    }
-    if (exact) {
-        more_or_less = "exactly";
-    }
-    PyErr_Format(PyExc_TypeError,
-                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                 func_name, more_or_less, num_expected,
-                 (num_expected == 1) ? "" : "s", num_found);
-}
-
-static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact)
-{
-    if (!type) {
-        PyErr_Format(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (none_allowed && obj == Py_None) return 1;
-    else if (exact) {
-        if (Py_TYPE(obj) == type) return 1;
-    }
-    else {
-        if (PyObject_TypeCheck(obj, type)) return 1;
-    }
-    PyErr_Format(PyExc_TypeError,
-        "Argument '%s' has incorrect type (expected %s, got %s)",
-        name, type->tp_name, Py_TYPE(obj)->tp_name);
-    return 0;
-}
-
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
-    PyObject *result;
-#if CYTHON_COMPILING_IN_CPYTHON
-    result = PyDict_GetItem(__pyx_d, name);
-    if (result) {
-        Py_INCREF(result);
-    } else {
-#else
-    result = PyObject_GetItem(__pyx_d, name);
-    if (!result) {
-        PyErr_Clear();
-#endif
-        result = __Pyx_GetBuiltinName(name);
-    }
-    return result;
-}
-
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
-    if (unlikely(!type)) {
-        PyErr_Format(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (likely(PyObject_TypeCheck(obj, type)))
-        return 1;
-    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
-                 Py_TYPE(obj)->tp_name, type->tp_name);
-    return 0;
-}
-
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    tmp_type = tstate->curexc_type;
-    tmp_value = tstate->curexc_value;
-    tmp_tb = tstate->curexc_traceback;
-    tstate->curexc_type = type;
-    tstate->curexc_value = value;
-    tstate->curexc_traceback = tb;
-    Py_XDECREF(tmp_type);
-    Py_XDECREF(tmp_value);
-    Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
-#endif
-}
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->curexc_type;
-    *value = tstate->curexc_value;
-    *tb = tstate->curexc_traceback;
-    tstate->curexc_type = 0;
-    tstate->curexc_value = 0;
-    tstate->curexc_traceback = 0;
-#else
-    PyErr_Fetch(type, value, tb);
-#endif
-}
-
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
-    } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
-    }
-}
-
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
-    PyObject *r;
-    if (!j) return NULL;
-    r = PyObject_GetItem(o, j);
-    Py_DECREF(j);
-    return r;
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
-                                                              int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
-        PyObject *r = PyList_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
-                                                              int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
-        PyObject *r = PyTuple_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
-#endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
-                                                     int is_list, int wraparound, int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (is_list || PyList_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
-        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
-            PyObject *r = PyList_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    }
-    else if (PyTuple_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
-        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
-            PyObject *r = PyTuple_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    } else {
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_item)) {
-            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (likely(l >= 0)) {
-                    i += l;
-                } else {
-                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                        PyErr_Clear();
-                    else
-                        return NULL;
-                }
-            }
-            return m->sq_item(o, i);
-        }
-    }
-#else
-    if (is_list || PySequence_Check(o)) {
-        return PySequence_GetItem(o, i);
-    }
-#endif
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-}
-
-#if PY_MAJOR_VERSION >= 3
-static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
-    return PyObject_CallMethodObjArgs(d, __pyx_n_s__values, NULL);
-}
-#endif
-
-#if PY_MAJOR_VERSION < 3
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
-                        CYTHON_UNUSED PyObject *cause) {
-    Py_XINCREF(type);
-    if (!value || value == Py_None)
-        value = NULL;
-    else
-        Py_INCREF(value);
-    if (!tb || tb == Py_None)
-        tb = NULL;
-    else {
-        Py_INCREF(tb);
-        if (!PyTraceBack_Check(tb)) {
-            PyErr_SetString(PyExc_TypeError,
-                "raise: arg 3 must be a traceback or None");
-            goto raise_error;
-        }
-    }
-    #if PY_VERSION_HEX < 0x02050000
-    if (PyClass_Check(type)) {
-    #else
-    if (PyType_Check(type)) {
-    #endif
-#if CYTHON_COMPILING_IN_PYPY
-        if (!value) {
-            Py_INCREF(Py_None);
-            value = Py_None;
-        }
-#endif
-        PyErr_NormalizeException(&type, &value, &tb);
-    } else {
-        if (value) {
-            PyErr_SetString(PyExc_TypeError,
-                "instance exception may not have a separate value");
-            goto raise_error;
-        }
-        value = type;
-        #if PY_VERSION_HEX < 0x02050000
-        if (PyInstance_Check(type)) {
-            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
-            Py_INCREF(type);
-        } else {
-            type = 0;
-            PyErr_SetString(PyExc_TypeError,
-                "raise: exception must be an old-style class or instance");
-            goto raise_error;
-        }
-        #else
-        type = (PyObject*) Py_TYPE(type);
-        Py_INCREF(type);
-        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
-            PyErr_SetString(PyExc_TypeError,
-                "raise: exception class must be a subclass of BaseException");
-            goto raise_error;
-        }
-        #endif
-    }
-    __Pyx_ErrRestore(type, value, tb);
-    return;
-raise_error:
-    Py_XDECREF(value);
-    Py_XDECREF(type);
-    Py_XDECREF(tb);
-    return;
-}
-#else /* Python 3+ */
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
-    PyObject* owned_instance = NULL;
-    if (tb == Py_None) {
-        tb = 0;
-    } else if (tb && !PyTraceBack_Check(tb)) {
-        PyErr_SetString(PyExc_TypeError,
-            "raise: arg 3 must be a traceback or None");
-        goto bad;
-    }
-    if (value == Py_None)
-        value = 0;
-    if (PyExceptionInstance_Check(type)) {
-        if (value) {
-            PyErr_SetString(PyExc_TypeError,
-                "instance exception may not have a separate value");
-            goto bad;
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
         }
-        value = type;
-        type = (PyObject*) Py_TYPE(value);
-    } else if (PyExceptionClass_Check(type)) {
-        PyObject *args;
-        if (!value)
-            args = PyTuple_New(0);
-        else if (PyTuple_Check(value)) {
-            Py_INCREF(value);
-            args = value;
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
         } else
-            args = PyTuple_Pack(1, value);
-        if (!args)
-            goto bad;
-        owned_instance = PyEval_CallObject(type, args);
-        Py_DECREF(args);
-        if (!owned_instance)
-            goto bad;
-        value = owned_instance;
-        if (!PyExceptionInstance_Check(value)) {
-            PyErr_Format(PyExc_TypeError,
-                         "calling %R should have returned an instance of "
-                         "BaseException, not %R",
-                         type, Py_TYPE(value));
-            goto bad;
-        }
-    } else {
-        PyErr_SetString(PyExc_TypeError,
-            "raise: exception class must be a subclass of BaseException");
-        goto bad;
-    }
-#if PY_VERSION_HEX >= 0x03030000
-    if (cause) {
-#else
-    if (cause && cause != Py_None) {
-#endif
-        PyObject *fixed_cause;
-        if (cause == Py_None) {
-            fixed_cause = NULL;
-        } else if (PyExceptionClass_Check(cause)) {
-            fixed_cause = PyObject_CallObject(cause, NULL);
-            if (fixed_cause == NULL)
-                goto bad;
-        } else if (PyExceptionInstance_Check(cause)) {
-            fixed_cause = cause;
-            Py_INCREF(fixed_cause);
-        } else {
-            PyErr_SetString(PyExc_TypeError,
-                            "exception causes must derive from "
-                            "BaseException");
-            goto bad;
-        }
-        PyException_SetCause(value, fixed_cause);
-    }
-    PyErr_SetObject(type, value);
-    if (tb) {
-        PyThreadState *tstate = PyThreadState_GET();
-        PyObject* tmp_tb = tstate->curexc_traceback;
-        if (tb != tmp_tb) {
-            Py_INCREF(tb);
-            tstate->curexc_traceback = tb;
-            Py_XDECREF(tmp_tb);
-        }
-    }
-bad:
-    Py_XDECREF(owned_instance);
-    return;
-}
-#endif
-
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
-    PyErr_Format(PyExc_ValueError,
-                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
-    PyErr_Format(PyExc_ValueError,
-                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
-                 index, (index == 1) ? "" : "s");
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-}
-
-static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    PyObject* exc_type = tstate->curexc_type;
-    if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
-            PyObject *exc_value, *exc_tb;
-            exc_value = tstate->curexc_value;
-            exc_tb = tstate->curexc_traceback;
-            tstate->curexc_type = 0;
-            tstate->curexc_value = 0;
-            tstate->curexc_traceback = 0;
-            Py_DECREF(exc_type);
-            Py_XDECREF(exc_value);
-            Py_XDECREF(exc_tb);
-            return 0;
-        } else {
-            return -1;
-        }
-    }
-    return 0;
-#else
-    if (unlikely(PyErr_Occurred())) {
-        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
-            PyErr_Clear();
-            return 0;
-        } else {
-            return -1;
-        }
-    }
-    return 0;
-#endif
-}
-
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
-    if (unlikely(retval)) {
-        Py_DECREF(retval);
-        __Pyx_RaiseTooManyValuesError(expected);
-        return -1;
-    } else {
-        return __Pyx_IterFinish();
-    }
-    return 0;
-}
-
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
-    PyObject *ob = PyCapsule_New(vtable, 0, 0);
-#else
-    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
-#endif
-    if (!ob)
-        goto bad;
-    if (PyDict_SetItem(dict, __pyx_n_s____pyx_vtable__, ob) < 0)
-        goto bad;
-    Py_DECREF(ob);
-    return 0;
-bad:
-    Py_XDECREF(ob);
-    return -1;
-}
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    #if PY_VERSION_HEX >= 0x02050000
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                 #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
                 }
             }
-            level = 0; /* try absolute import on failure */
-        }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
         }
     }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
     #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);
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
     #endif
 bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
-}
-
-static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) {
-    PyObject *metaclass;
-#if PY_MAJOR_VERSION < 3
-    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
-        PyObject *base = PyTuple_GET_ITEM(bases, 0);
-        metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__);
-        if (!metaclass) {
-            PyErr_Clear();
-            metaclass = (PyObject*) Py_TYPE(base);
-        }
-    } else {
-        metaclass = (PyObject *) &PyClass_Type;
-    }
-#else
-    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
-        PyObject *base = PyTuple_GET_ITEM(bases, 0);
-        metaclass = (PyObject*) Py_TYPE(base);
-    } else {
-        metaclass = (PyObject *) &PyType_Type;
-    }
-#endif
-    Py_INCREF(metaclass);
-    return metaclass;
+    return -1;
 }
 
-static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
-                                   PyObject *qualname, PyObject *modname) {
-    PyObject *result;
-    PyObject *metaclass;
-    if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0)
-        return NULL;
-    if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0)
-        return NULL;
-    metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__);
-    if (metaclass) {
-        Py_INCREF(metaclass);
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
     } else {
-        metaclass = __Pyx_FindPy2Metaclass(bases);
+        num_expected = num_max;
+        more_or_less = "at most";
     }
-    result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
-    Py_DECREF(metaclass);
-    return result;
-}
-
-static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject* x) {
-    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if (sizeof(int64_t) == sizeof(char)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedChar(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedChar(x);
-    } else if (sizeof(int64_t) == sizeof(short)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedShort(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedShort(x);
-    } else if (sizeof(int64_t) == sizeof(int)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedInt(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedInt(x);
-    } else if (sizeof(int64_t) == sizeof(long)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedLong(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedLong(x);
-    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return (int64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
-        else
-            return (int64_t)__Pyx_PyInt_AsSignedLongLong(x);
-    }  else {
-        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-        PyErr_SetString(PyExc_RuntimeError,
-                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-        #else
-        int64_t val;
-        PyObject *v = __Pyx_PyNumber_Int(x);
-        #if PY_MAJOR_VERSION < 3
-        if (likely(v) && !PyLong_Check(v)) {
-            PyObject *tmp = v;
-            v = PyNumber_Long(tmp);
-            Py_DECREF(tmp);
-        }
-        #endif
-        if (likely(v)) {
-            int one = 1; int is_little = (int)*(unsigned char *)&one;
-            unsigned char *bytes = (unsigned char *)&val;
-            int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                          bytes, sizeof(val),
-                                          is_little, !is_unsigned);
-            Py_DECREF(v);
-            if (likely(!ret))
-                return val;
-        }
-        #endif
-        return (int64_t)-1;
-    }
-}
-
-static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject* x) {
-    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if (sizeof(uint64_t) == sizeof(char)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedChar(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedChar(x);
-    } else if (sizeof(uint64_t) == sizeof(short)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedShort(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedShort(x);
-    } else if (sizeof(uint64_t) == sizeof(int)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedInt(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedInt(x);
-    } else if (sizeof(uint64_t) == sizeof(long)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedLong(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedLong(x);
-    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return (uint64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
-        else
-            return (uint64_t)__Pyx_PyInt_AsSignedLongLong(x);
-    }  else {
-        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-        PyErr_SetString(PyExc_RuntimeError,
-                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-        #else
-        uint64_t val;
-        PyObject *v = __Pyx_PyNumber_Int(x);
-        #if PY_MAJOR_VERSION < 3
-        if (likely(v) && !PyLong_Check(v)) {
-            PyObject *tmp = v;
-            v = PyNumber_Long(tmp);
-            Py_DECREF(tmp);
-        }
-        #endif
-        if (likely(v)) {
-            int one = 1; int is_little = (int)*(unsigned char *)&one;
-            unsigned char *bytes = (unsigned char *)&val;
-            int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                          bytes, sizeof(val),
-                                          is_little, !is_unsigned);
-            Py_DECREF(v);
-            if (likely(!ret))
-                return val;
-        }
-        #endif
-        return (uint64_t)-1;
-    }
-}
-
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t val) {
-    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if ((sizeof(int64_t) == sizeof(char))  ||
-        (sizeof(int64_t) == sizeof(short))) {
-        return PyInt_FromLong((long)val);
-    } else if ((sizeof(int64_t) == sizeof(int)) ||
-               (sizeof(int64_t) == sizeof(long))) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLong((unsigned long)val);
-        else
-            return PyInt_FromLong((long)val);
-    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
-        else
-            return PyLong_FromLongLong((PY_LONG_LONG)val);
-    } else {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&val;
-        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
-                                     little, !is_unsigned);
+    if (exact) {
+        more_or_less = "exactly";
     }
+    PyErr_Format(PyExc_TypeError,
+                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
 }
 
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
-static PyObject *__Pyx_GetStdout(void) {
-    PyObject *f = PySys_GetObject((char *)"stdout");
-    if (!f) {
-        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
-    }
-    return f;
+static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
 }
-static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
-    int i;
-    if (!f) {
-        if (!(f = __Pyx_GetStdout()))
-            return -1;
-    }
-    Py_INCREF(f);
-    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
-        PyObject* v;
-        if (PyFile_SoftSpace(f, 1)) {
-            if (PyFile_WriteString(" ", f) < 0)
-                goto error;
-        }
-        v = PyTuple_GET_ITEM(arg_tuple, i);
-        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
-            goto error;
-        if (PyString_Check(v)) {
-            char *s = PyString_AsString(v);
-            Py_ssize_t len = PyString_Size(v);
-            if (len > 0 &&
-                isspace(Py_CHARMASK(s[len-1])) &&
-                s[len-1] != ' ')
-                    PyFile_SoftSpace(f, 0);
-        }
-    }
-    if (newline) {
-        if (PyFile_WriteString("\n", f) < 0)
-            goto error;
-        PyFile_SoftSpace(f, 0);
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
     }
-    Py_DECREF(f);
-    return 0;
-error:
-    Py_DECREF(f);
-    return -1;
-}
-#else /* Python 3 has a print function */
-static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
-    PyObject* kwargs = 0;
-    PyObject* result = 0;
-    PyObject* end_string;
-    if (unlikely(!__pyx_print)) {
-        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s__print);
-        if (!__pyx_print)
-            return -1;
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (likely(Py_TYPE(obj) == type)) return 1;
+        #if PY_MAJOR_VERSION == 2
+        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+        #endif
     }
-    if (stream) {
-        kwargs = PyDict_New();
-        if (unlikely(!kwargs))
-            return -1;
-        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s__file, stream) < 0))
-            goto bad;
-        if (!newline) {
-            end_string = PyUnicode_FromStringAndSize(" ", 1);
-            if (unlikely(!end_string))
-                goto bad;
-            if (PyDict_SetItem(kwargs, __pyx_n_s__end, end_string) < 0) {
-                Py_DECREF(end_string);
-                goto bad;
-            }
-            Py_DECREF(end_string);
-        }
-    } else if (!newline) {
-        if (unlikely(!__pyx_print_kwargs)) {
-            __pyx_print_kwargs = PyDict_New();
-            if (unlikely(!__pyx_print_kwargs))
-                return -1;
-            end_string = PyUnicode_FromStringAndSize(" ", 1);
-            if (unlikely(!end_string))
-                return -1;
-            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s__end, end_string) < 0) {
-                Py_DECREF(end_string);
-                return -1;
-            }
-            Py_DECREF(end_string);
-        }
-        kwargs = __pyx_print_kwargs;
+    else {
+        if (likely(PyObject_TypeCheck(obj, type))) return 1;
     }
-    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
-    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
-        Py_DECREF(kwargs);
-    if (!result)
-        return -1;
-    Py_DECREF(result);
+    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
     return 0;
-bad:
-    if (kwargs != __pyx_print_kwargs)
-        Py_XDECREF(kwargs);
-    return -1;
 }
-#endif
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t val) {
-    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
-    const int is_unsigned = const_zero < neg_one;
-    if ((sizeof(uint64_t) == sizeof(char))  ||
-        (sizeof(uint64_t) == sizeof(short))) {
-        return PyInt_FromLong((long)val);
-    } else if ((sizeof(uint64_t) == sizeof(int)) ||
-               (sizeof(uint64_t) == sizeof(long))) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLong((unsigned long)val);
-        else
-            return PyInt_FromLong((long)val);
-    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
-        if (is_unsigned)
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
-        else
-            return PyLong_FromLongLong((PY_LONG_LONG)val);
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+    PyObject *result;
+#if CYTHON_COMPILING_IN_CPYTHON
+    result = PyDict_GetItem(__pyx_d, name);
+    if (result) {
+        Py_INCREF(result);
     } else {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&val;
-        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
-                                     little, !is_unsigned);
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    if (!result) {
+        PyErr_Clear();
+#endif
+        result = __Pyx_GetBuiltinName(name);
     }
+    return result;
 }
 
-#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
-static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
-    if (!f) {
-        if (!(f = __Pyx_GetStdout()))
-            return -1;
-    }
-    Py_INCREF(f);
-    if (PyFile_SoftSpace(f, 0)) {
-        if (PyFile_WriteString(" ", f) < 0)
-            goto error;
-    }
-    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
-        goto error;
-    if (PyFile_WriteString("\n", f) < 0)
-        goto error;
-    Py_DECREF(f);
-    return 0;
-error:
-    Py_DECREF(f);
-    return -1;
-    /* the line below is just to avoid C compiler
-     * warnings about unused functions */
-    return __Pyx_Print(f, NULL, 0);
-}
-#else /* Python 3 has a print function */
-static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
-    int res;
-    PyObject* arg_tuple = PyTuple_Pack(1, o);
-    if (unlikely(!arg_tuple))
-        return -1;
-    res = __Pyx_Print(stream, arg_tuple, 1);
-    Py_DECREF(arg_tuple);
-    return res;
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    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,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
 }
 #endif
 
-#if CYTHON_CCOMPLEX
-  #ifdef __cplusplus
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      return ::std::complex< float >(x, y);
-    }
-  #else
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      return x + y*(__pyx_t_float_complex)_Complex_I;
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
     }
-  #endif
+    if (likely(PyObject_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
+    return 0;
+}
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
 #else
-    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
-      __pyx_t_float_complex z;
-      z.real = x;
-      z.imag = y;
-      return z;
-    }
+    PyErr_Restore(type, value, tb);
 #endif
-
-#if CYTHON_CCOMPLEX
+}
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
 #else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-       return (a.real == b.real) && (a.imag == b.imag);
-    }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real + b.real;
-        z.imag = a.imag + b.imag;
-        return z;
-    }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real - b.real;
-        z.imag = a.imag - b.imag;
-        return z;
-    }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        z.real = a.real * b.real - a.imag * b.imag;
-        z.imag = a.real * b.imag + a.imag * b.real;
-        return z;
+    PyErr_Fetch(type, value, tb);
+#endif
+}
+
+static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
+                                  int full_traceback) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    if (full_traceback) {
+        Py_XINCREF(old_exc);
+        Py_XINCREF(old_val);
+        Py_XINCREF(old_tb);
+        __Pyx_ErrRestore(old_exc, old_val, old_tb);
+        PyErr_PrintEx(1);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        float denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
-        __pyx_t_float_complex z;
-        z.real = -a.real;
-        z.imag = -a.imag;
-        return z;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
-       return (a.real == 0) && (a.imag == 0);
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
-        __pyx_t_float_complex z;
-        z.real =  a.real;
-        z.imag = -a.imag;
-        return z;
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
     }
-    #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
-          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
-            return sqrtf(z.real*z.real + z.imag*z.imag);
-          #else
-            return hypotf(z.real, z.imag);
-          #endif
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
         }
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-            __pyx_t_float_complex z;
-            float r, lnr, theta, z_r, z_theta;
-            if (b.imag == 0 && b.real == (int)b.real) {
-                if (b.real < 0) {
-                    float denom = a.real * a.real + a.imag * a.imag;
-                    a.real = a.real / denom;
-                    a.imag = -a.imag / denom;
-                    b.real = -b.real;
-                }
-                switch ((int)b.real) {
-                    case 0:
-                        z.real = 1;
-                        z.imag = 0;
-                        return z;
-                    case 1:
-                        return a;
-                    case 2:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(a, a);
-                    case 3:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, a);
-                    case 4:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, z);
-                }
-            }
-            if (a.imag == 0) {
-                if (a.real == 0) {
-                    return a;
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
+                        PyErr_Clear();
+                    else
+                        return NULL;
                 }
-                r = a.real;
-                theta = 0;
-            } else {
-                r = __Pyx_c_absf(a);
-                theta = atan2f(a.imag, a.real);
             }
-            lnr = logf(r);
-            z_r = expf(lnr * b.real - theta * b.imag);
-            z_theta = theta * b.real + lnr * b.imag;
-            z.real = z_r * cosf(z_theta);
-            z.imag = z_r * sinf(z_theta);
-            return z;
+            return m->sq_item(o, i);
         }
-    #endif
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
 #endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
 
-#if CYTHON_CCOMPLEX
-  #ifdef __cplusplus
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      return ::std::complex< double >(x, y);
-    }
-  #else
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      return x + y*(__pyx_t_double_complex)_Complex_I;
+static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject* exc_type = tstate->curexc_type;
+    if (unlikely(exc_type)) {
+        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+            PyObject *exc_value, *exc_tb;
+            exc_value = tstate->curexc_value;
+            exc_tb = tstate->curexc_traceback;
+            tstate->curexc_type = 0;
+            tstate->curexc_value = 0;
+            tstate->curexc_traceback = 0;
+            Py_DECREF(exc_type);
+            Py_XDECREF(exc_value);
+            Py_XDECREF(exc_tb);
+            return 0;
+        } else {
+            return -1;
+        }
     }
-  #endif
+    return 0;
 #else
-    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
-      __pyx_t_double_complex z;
-      z.real = x;
-      z.imag = y;
-      return z;
+    if (unlikely(PyErr_Occurred())) {
+        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
+            PyErr_Clear();
+            return 0;
+        } else {
+            return -1;
+        }
     }
+    return 0;
 #endif
+}
 
-#if CYTHON_CCOMPLEX
-#else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-       return (a.real == b.real) && (a.imag == b.imag);
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+    PyErr_Format(PyExc_ValueError,
+                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
+                 index, (index == 1) ? "" : "s");
+}
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    PyErr_Format(PyExc_ValueError,
+                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else {
+        return __Pyx_IterFinish();
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real + b.real;
-        z.imag = a.imag + b.imag;
-        return z;
+    return 0;
+}
+
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+}
+
+static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
+    if (t == Py_None) {
+      __Pyx_RaiseNoneNotIterableError();
+    } else if (PyTuple_GET_SIZE(t) < index) {
+      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
+    } else {
+      __Pyx_RaiseTooManyValuesError(index);
+    }
+}
+
+static CYTHON_INLINE int __Pyx_unpack_tuple2(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
+                                             int is_tuple, int has_known_size, int decref_tuple) {
+    Py_ssize_t index;
+    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
+    if (!is_tuple && unlikely(!PyTuple_Check(tuple))) {
+        iternextfunc iternext;
+        iter = PyObject_GetIter(tuple);
+        if (unlikely(!iter)) goto bad;
+        if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
+        iternext = Py_TYPE(iter)->tp_iternext;
+        value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
+        value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
+        if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
+        Py_DECREF(iter);
+    } else {
+        if (!has_known_size && unlikely(PyTuple_GET_SIZE(tuple) != 2)) {
+            __Pyx_UnpackTupleError(tuple, 2);
+            goto bad;
+        }
+#if CYTHON_COMPILING_IN_PYPY
+        value1 = PySequence_ITEM(tuple, 0);
+        if (unlikely(!value1)) goto bad;
+        value2 = PySequence_ITEM(tuple, 1);
+        if (unlikely(!value2)) goto bad;
+#else
+        value1 = PyTuple_GET_ITEM(tuple, 0);
+        value2 = PyTuple_GET_ITEM(tuple, 1);
+        Py_INCREF(value1);
+        Py_INCREF(value2);
+#endif
+        if (decref_tuple) { Py_DECREF(tuple); }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real - b.real;
-        z.imag = a.imag - b.imag;
-        return z;
+    *pvalue1 = value1;
+    *pvalue2 = value2;
+    return 0;
+unpacking_failed:
+    if (!has_known_size && __Pyx_IterFinish() == 0)
+        __Pyx_RaiseNeedMoreValuesError(index);
+bad:
+    Py_XDECREF(iter);
+    Py_XDECREF(value1);
+    Py_XDECREF(value2);
+    if (decref_tuple) { Py_XDECREF(tuple); }
+    return -1;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
+    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
+    *p_source_is_dict = is_dict;
+#if !CYTHON_COMPILING_IN_PYPY
+    if (is_dict) {
+        *p_orig_length = PyDict_Size(iterable);
+        Py_INCREF(iterable);
+        return iterable;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        z.real = a.real * b.real - a.imag * b.imag;
-        z.imag = a.real * b.imag + a.imag * b.real;
-        return z;
+#endif
+    *p_orig_length = 0;
+    if (method_name) {
+        PyObject* iter;
+        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
+        if (!iterable)
+            return NULL;
+#if !CYTHON_COMPILING_IN_PYPY
+        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
+            return iterable;
+#endif
+        iter = PyObject_GetIter(iterable);
+        Py_DECREF(iterable);
+        return iter;
+    }
+    return PyObject_GetIter(iterable);
+}
+static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* iter_obj, Py_ssize_t orig_length, Py_ssize_t* ppos,
+                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
+    PyObject* next_item;
+#if !CYTHON_COMPILING_IN_PYPY
+    if (source_is_dict) {
+        PyObject *key, *value;
+        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
+            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
+            return -1;
+        }
+        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
+            return 0;
+        }
+        if (pitem) {
+            PyObject* tuple = PyTuple_New(2);
+            if (unlikely(!tuple)) {
+                return -1;
+            }
+            Py_INCREF(key);
+            Py_INCREF(value);
+            PyTuple_SET_ITEM(tuple, 0, key);
+            PyTuple_SET_ITEM(tuple, 1, value);
+            *pitem = tuple;
+        } else {
+            if (pkey) {
+                Py_INCREF(key);
+                *pkey = key;
+            }
+            if (pvalue) {
+                Py_INCREF(value);
+                *pvalue = value;
+            }
+        }
+        return 1;
+    } else if (PyTuple_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyTuple_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else if (PyList_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyList_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else
+#endif
+    {
+        next_item = PyIter_Next(iter_obj);
+        if (unlikely(!next_item)) {
+            return __Pyx_IterFinish();
+        }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        double denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    if (pitem) {
+        *pitem = next_item;
+    } else if (pkey && pvalue) {
+        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
+            return -1;
+    } else if (pkey) {
+        *pkey = next_item;
+    } else {
+        *pvalue = next_item;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
-        __pyx_t_double_complex z;
-        z.real = -a.real;
-        z.imag = -a.imag;
-        return z;
+    return 1;
+}
+
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
     }
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
-       return (a.real == 0) && (a.imag == 0);
+    #if PY_VERSION_HEX < 0x02050000
+    if (PyClass_Check(type)) {
+    #else
+    if (PyType_Check(type)) {
+    #endif
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        #if PY_VERSION_HEX < 0x02050000
+        if (PyInstance_Check(type)) {
+            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+            Py_INCREF(type);
+        } else {
+            type = 0;
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception must be an old-style class or instance");
+            goto raise_error;
+        }
+        #else
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+        #endif
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
-        __pyx_t_double_complex z;
-        z.real =  a.real;
-        z.imag = -a.imag;
-        return z;
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else /* Python 3+ */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
     }
-    #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
-          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
-            return sqrt(z.real*z.real + z.imag*z.imag);
-          #else
-            return hypot(z.real, z.imag);
-          #endif
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
         }
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-            __pyx_t_double_complex z;
-            double r, lnr, theta, z_r, z_theta;
-            if (b.imag == 0 && b.real == (int)b.real) {
-                if (b.real < 0) {
-                    double denom = a.real * a.real + a.imag * a.imag;
-                    a.real = a.real / denom;
-                    a.imag = -a.imag / denom;
-                    b.real = -b.real;
-                }
-                switch ((int)b.real) {
-                    case 0:
-                        z.real = 1;
-                        z.imag = 0;
-                        return z;
-                    case 1:
-                        return a;
-                    case 2:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(a, a);
-                    case 3:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, a);
-                    case 4:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, z);
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *instance_class = NULL;
+        if (value && PyExceptionInstance_Check(value)) {
+            instance_class = (PyObject*) Py_TYPE(value);
+            if (instance_class != type) {
+                if (PyObject_IsSubclass(instance_class, type)) {
+                    type = instance_class;
+                } else {
+                    instance_class = NULL;
                 }
             }
-            if (a.imag == 0) {
-                if (a.real == 0) {
-                    return a;
-                }
-                r = a.real;
-                theta = 0;
-            } else {
-                r = __Pyx_c_abs(a);
-                theta = atan2(a.imag, a.real);
+        }
+        if (!instance_class) {
+            PyObject *args;
+            if (!value)
+                args = PyTuple_New(0);
+            else if (PyTuple_Check(value)) {
+                Py_INCREF(value);
+                args = value;
+            } else
+                args = PyTuple_Pack(1, value);
+            if (!args)
+                goto bad;
+            owned_instance = PyObject_Call(type, args, NULL);
+            Py_DECREF(args);
+            if (!owned_instance)
+                goto bad;
+            value = owned_instance;
+            if (!PyExceptionInstance_Check(value)) {
+                PyErr_Format(PyExc_TypeError,
+                             "calling %R should have returned an instance of "
+                             "BaseException, not %R",
+                             type, Py_TYPE(value));
+                goto bad;
             }
-            lnr = log(r);
-            z_r = exp(lnr * b.real - theta * b.imag);
-            z_theta = theta * b.real + lnr * b.imag;
-            z.real = z_r * cos(z_theta);
-            z.imag = z_r * sin(z_theta);
-            return z;
         }
-    #endif
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+#if PY_VERSION_HEX >= 0x03030000
+    if (cause) {
+#else
+    if (cause && cause != Py_None) {
 #endif
-
-static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
-    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned char" :
-                    "value too large to convert to unsigned char");
-            }
-            return (unsigned char)-1;
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
         }
-        return (unsigned char)val;
+        PyException_SetCause(value, fixed_cause);
     }
-    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
-}
-
-static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
-    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned short" :
-                    "value too large to convert to unsigned short");
-            }
-            return (unsigned short)-1;
+    PyErr_SetObject(type, value);
+    if (tb) {
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
         }
-        return (unsigned short)val;
     }
-    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
+bad:
+    Py_XDECREF(owned_instance);
+    return;
 }
+#endif
 
-static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
-    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(unsigned int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(unsigned int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to unsigned int" :
-                    "value too large to convert to unsigned int");
-            }
-            return (unsigned int)-1;
-        }
-        return (unsigned int)val;
-    }
-    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
 }
 
-static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
-    const char neg_one = (char)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to char" :
-                    "value too large to convert to char");
-            }
-            return (char)-1;
+static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
+    for (i=0; i < nbases; i++) {
+        PyTypeObject *tmptype;
+        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
+        tmptype = Py_TYPE(tmp);
+#if PY_MAJOR_VERSION < 3
+        if (tmptype == &PyClass_Type)
+            continue;
+#endif
+        if (!metaclass) {
+            metaclass = tmptype;
+            continue;
+        }
+        if (PyType_IsSubtype(metaclass, tmptype))
+            continue;
+        if (PyType_IsSubtype(tmptype, metaclass)) {
+            metaclass = tmptype;
+            continue;
         }
-        return (char)val;
+        PyErr_SetString(PyExc_TypeError,
+                        "metaclass conflict: "
+                        "the metaclass of a derived class "
+                        "must be a (non-strict) subclass "
+                        "of the metaclasses of all its bases");
+        return NULL;
+    }
+    if (!metaclass) {
+#if PY_MAJOR_VERSION < 3
+        metaclass = &PyClass_Type;
+#else
+        metaclass = &PyType_Type;
+#endif
     }
-    return (char)__Pyx_PyInt_AsLong(x);
+    Py_INCREF((PyObject*) metaclass);
+    return (PyObject*) metaclass;
 }
 
-static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
-    const short neg_one = (short)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to short" :
-                    "value too large to convert to short");
+static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
+    PyObject *ns;
+    if (metaclass) {
+        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
+        if (prep) {
+            PyObject *pargs = PyTuple_Pack(2, name, bases);
+            if (unlikely(!pargs)) {
+                Py_DECREF(prep);
+                return NULL;
             }
-            return (short)-1;
+            ns = PyObject_Call(prep, pargs, mkw);
+            Py_DECREF(prep);
+            Py_DECREF(pargs);
+        } else {
+            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
+                return NULL;
+            PyErr_Clear();
+            ns = PyDict_New();
         }
-        return (short)val;
+    } else {
+        ns = PyDict_New();
     }
-    return (short)__Pyx_PyInt_AsLong(x);
+    if (unlikely(!ns))
+        return NULL;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
+    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
+    return ns;
+bad:
+    Py_DECREF(ns);
+    return NULL;
 }
-
-static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
-    const int neg_one = (int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to int" :
-                    "value too large to convert to int");
-            }
-            return (int)-1;
+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;
         }
-        return (int)val;
     }
-    return (int)__Pyx_PyInt_AsLong(x);
+    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 CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
-    const signed char neg_one = (signed char)-1, const_zero = 0;
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
-    if (sizeof(signed char) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed char)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed char" :
-                    "value too large to convert to signed char");
-            }
-            return (signed char)-1;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
         }
-        return (signed char)val;
     }
-    return (signed char)__Pyx_PyInt_AsSignedLong(x);
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
 }
 
-static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
-    const signed short neg_one = (signed short)-1, const_zero = 0;
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func)             \
+    {                                                                     \
+        func_type value = func(x);                                        \
+        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;                                  \
+            }                                                             \
+        }                                                                 \
+        return (target_type) value;                                       \
+    }
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #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 (sizeof(signed short) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed short)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG)
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed short" :
-                    "value too large to convert to signed short");
+                                "can't convert negative value to int");
+                return (int) -1;
             }
-            return (signed short)-1;
+            return (int) val;
         }
-        return (signed short)val;
-    }
-    return (signed short)__Pyx_PyInt_AsSignedLong(x);
-}
-
-static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
-    const signed int neg_one = (signed int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(signed int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(signed int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (int) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+ #endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to signed int" :
-                    "value too large to convert to signed int");
+                                "can't convert negative value to int");
+                return (int) -1;
             }
-            return (signed int)-1;
+            if (sizeof(int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(int) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong)
+            }
+        } 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];
+                }
+            }
+ #endif
+#endif
+            if (sizeof(int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong)
+            } else if (sizeof(int) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (int) -1;
         }
-        return (signed int)val;
+    } else {
+        int val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (int) -1;
+        val = __Pyx_PyInt_As_int(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return (signed int)__Pyx_PyInt_AsSignedLong(x);
 }
 
-static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
-    const int neg_one = (int)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (sizeof(int) < sizeof(long)) {
-        long val = __Pyx_PyInt_AsLong(x);
-        if (unlikely(val != (long)(int)val)) {
-            if (!unlikely(val == -1 && PyErr_Occurred())) {
-                PyErr_SetString(PyExc_OverflowError,
-                    (is_unsigned && unlikely(val < 0)) ?
-                    "can't convert negative value to int" :
-                    "value too large to convert to int");
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    #if PY_VERSION_HEX >= 0x02050000
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
             }
-            return (int)-1;
+            level = 0; /* try absolute import on failure */
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
         }
-        return (int)val;
     }
-    return (int)__Pyx_PyInt_AsLong(x);
+    #else
+    if (level>0) {
+        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
+        goto bad;
+    }
+    module = PyObject_CallFunctionObjArgs(py_import,
+        name, global_dict, empty_dict, list, NULL);
+    #endif
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
-    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
+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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to unsigned long");
-            return (unsigned long)-1;
+        if (sizeof(int64_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (int64_t) val;
         }
-        return (unsigned long)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned long)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return (int64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to unsigned long");
-                return (unsigned long)-1;
+                                "can't convert negative value to int64_t");
+                return (int64_t) -1;
+            }
+            if (sizeof(int64_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (unsigned long)PyLong_AsUnsignedLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned long)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(int64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return +(int64_t) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(int64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
 #endif
+            if (sizeof(int64_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, long, PyLong_AsLong)
+            } else if (sizeof(int64_t) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(int64_t, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int64_t val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-            return (unsigned long)PyLong_AsLong(x);
+            return (int64_t) -1;
         }
     } else {
-        unsigned long val;
+        int64_t val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (unsigned long)-1;
-        val = __Pyx_PyInt_AsUnsignedLong(tmp);
+        if (!tmp) return (int64_t) -1;
+        val = __Pyx_PyInt_As_int64_t(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
-    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
+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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to unsigned PY_LONG_LONG");
-            return (unsigned PY_LONG_LONG)-1;
+        if (sizeof(uint64_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (uint64_t) val;
         }
-        return (unsigned PY_LONG_LONG)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(uint64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return (uint64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to unsigned PY_LONG_LONG");
-                return (unsigned PY_LONG_LONG)-1;
+                                "can't convert negative value to uint64_t");
+                return (uint64_t) -1;
+            }
+            if (sizeof(uint64_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(uint64_t)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
-                    case  1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case  1: return +(uint64_t) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(uint64_t) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
+#endif
+            if (sizeof(uint64_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, long, PyLong_AsLong)
+            } else if (sizeof(uint64_t) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(uint64_t, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            uint64_t val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-#endif
-            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
+            return (uint64_t) -1;
         }
     } else {
-        unsigned PY_LONG_LONG val;
+        uint64_t val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (unsigned PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
+        if (!tmp) return (uint64_t) -1;
+        val = __Pyx_PyInt_As_uint64_t(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+ #endif
 #endif
-static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
-    const long neg_one = (long)-1, const_zero = 0;
+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))) {
-        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;
+        if (sizeof(long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG)
+        } 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;
+            }
+            return (long) val;
         }
-        return (long)val;
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
+ #if CYTHON_USE_PYLONG_INTERNALS
             if (sizeof(digit) <= sizeof(long)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
                     case  1: return (long) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
-#endif
+ #endif
 #endif
             if (unlikely(Py_SIZE(x) < 0)) {
                 PyErr_SetString(PyExc_OverflowError,
                                 "can't convert negative value to long");
-                return (long)-1;
+                return (long) -1;
+            }
+            if (sizeof(long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong)
+            } else if (sizeof(long) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong)
             }
-            return (long)PyLong_AsUnsignedLong(x);
         } else {
 #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
+ #if CYTHON_USE_PYLONG_INTERNALS
             if (sizeof(digit) <= sizeof(long)) {
                 switch (Py_SIZE(x)) {
                     case  0: return 0;
@@ -15649,202 +14473,535 @@ static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
                     case -1: return -(long) ((PyLongObject*)x)->ob_digit[0];
                 }
             }
+ #endif
 #endif
+            if (sizeof(long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong)
+            } else if (sizeof(long) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong)
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            long val;
+            PyObject *v = __Pyx_PyNumber_Int(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-            return (long)PyLong_AsLong(x);
+            return (long) -1;
         }
     } else {
         long val;
         PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (long)-1;
-        val = __Pyx_PyInt_AsLong(tmp);
+        if (!tmp) return (long) -1;
+        val = __Pyx_PyInt_As_long(tmp);
         Py_DECREF(tmp);
         return val;
     }
 }
 
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
-#endif
-static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
-    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
+    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))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to PY_LONG_LONG");
-            return (PY_LONG_LONG)-1;
+    if (is_unsigned) {
+        if (sizeof(int64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
-        return (PY_LONG_LONG)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+    } else {
+        if (sizeof(int64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static PyObject *__Pyx_GetStdout(void) {
+    PyObject *f = PySys_GetObject((char *)"stdout");
+    if (!f) {
+        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+    }
+    return f;
+}
+static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
+    int i;
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
+        PyObject* v;
+        if (PyFile_SoftSpace(f, 1)) {
+            if (PyFile_WriteString(" ", f) < 0)
+                goto error;
+        }
+        v = PyTuple_GET_ITEM(arg_tuple, i);
+        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
+            goto error;
+        if (PyString_Check(v)) {
+            char *s = PyString_AsString(v);
+            Py_ssize_t len = PyString_Size(v);
+            if (len > 0) {
+                switch (s[len-1]) {
+                    case ' ': break;
+                    case '\f': case '\r': case '\n': case '\t': case '\v':
+                        PyFile_SoftSpace(f, 0);
+                        break;
+                    default:  break;
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to PY_LONG_LONG");
-                return (PY_LONG_LONG)-1;
+        }
+    }
+    if (newline) {
+        if (PyFile_WriteString("\n", f) < 0)
+            goto error;
+        PyFile_SoftSpace(f, 0);
+    }
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+}
+#else /* Python 3 has a print function */
+static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
+    PyObject* kwargs = 0;
+    PyObject* result = 0;
+    PyObject* end_string;
+    if (unlikely(!__pyx_print)) {
+        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print);
+        if (!__pyx_print)
+            return -1;
+    }
+    if (stream) {
+        kwargs = PyDict_New();
+        if (unlikely(!kwargs))
+            return -1;
+        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0))
+            goto bad;
+        if (!newline) {
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                goto bad;
+            if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) {
+                Py_DECREF(end_string);
+                goto bad;
             }
-            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                }
+            Py_DECREF(end_string);
+        }
+    } else if (!newline) {
+        if (unlikely(!__pyx_print_kwargs)) {
+            __pyx_print_kwargs = PyDict_New();
+            if (unlikely(!__pyx_print_kwargs))
+                return -1;
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                return -1;
+            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) {
+                Py_DECREF(end_string);
+                return -1;
             }
+            Py_DECREF(end_string);
+        }
+        kwargs = __pyx_print_kwargs;
+    }
+    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
+    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
+        Py_DECREF(kwargs);
+    if (!result)
+        return -1;
+    Py_DECREF(result);
+    return 0;
+bad:
+    if (kwargs != __pyx_print_kwargs)
+        Py_XDECREF(kwargs);
+    return -1;
+}
 #endif
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
+    const uint64_t neg_one = (uint64_t) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(uint64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(uint64_t) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
+        }
+    } else {
+        if (sizeof(uint64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint64_t) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    if (PyFile_SoftSpace(f, 0)) {
+        if (PyFile_WriteString(" ", f) < 0)
+            goto error;
+    }
+    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString("\n", f) < 0)
+        goto error;
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+    /* the line below is just to avoid C compiler
+     * warnings about unused functions */
+    return __Pyx_Print(f, NULL, 0);
+}
+#else /* Python 3 has a print function */
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
+    int res;
+    PyObject* arg_tuple = PyTuple_Pack(1, o);
+    if (unlikely(!arg_tuple))
+        return -1;
+    res = __Pyx_Print(stream, arg_tuple, 1);
+    Py_DECREF(arg_tuple);
+    return res;
+}
 #endif
-            return (PY_LONG_LONG)PyLong_AsLongLong(x);
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    const long neg_one = (long) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
     } else {
-        PY_LONG_LONG val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsLongLong(tmp);
-        Py_DECREF(tmp);
-        return val;
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+    const unsigned long neg_one = (unsigned long) -1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
+        }
+    } else {
+        if (sizeof(unsigned long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
+                                     little, !is_unsigned);
+    }
+}
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return ::std::complex< float >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return x + y*(__pyx_t_float_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      __pyx_t_float_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
+#endif
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        float denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
     }
-}
-
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
-#endif
-#endif
-static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
-    const signed long neg_one = (signed long)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-#if PY_MAJOR_VERSION < 3
-    if (likely(PyInt_Check(x))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to signed long");
-            return (signed long)-1;
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrtf(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypotf(z.real, z.imag);
+          #endif
         }
-        return (signed long)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed long)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (signed long) ((PyLongObject*)x)->ob_digit[0];
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+            __pyx_t_float_complex z;
+            float r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    float denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(a, a);
+                    case 3:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, a);
+                    case 4:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, z);
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to signed long");
-                return (signed long)-1;
-            }
-            return (signed long)PyLong_AsUnsignedLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed long)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(signed long) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0];
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
                 }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_absf(a);
+                theta = atan2f(a.imag, a.real);
             }
-#endif
-#endif
-            return (signed long)PyLong_AsLong(x);
+            lnr = logf(r);
+            z_r = expf(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cosf(z_theta);
+            z.imag = z_r * sinf(z_theta);
+            return z;
         }
-    } else {
-        signed long val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (signed long)-1;
-        val = __Pyx_PyInt_AsSignedLong(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-}
-
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-#include "longintrepr.h"
+    #endif
 #endif
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return ::std::complex< double >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return x + y*(__pyx_t_double_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      __pyx_t_double_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
 #endif
-static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
-    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-#if PY_MAJOR_VERSION < 3
-    if (likely(PyInt_Check(x))) {
-        long val = PyInt_AS_LONG(x);
-        if (is_unsigned && unlikely(val < 0)) {
-            PyErr_SetString(PyExc_OverflowError,
-                            "can't convert negative value to signed PY_LONG_LONG");
-            return (signed PY_LONG_LONG)-1;
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        double denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrt(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypot(z.real, z.imag);
+          #endif
         }
-        return (signed PY_LONG_LONG)val;
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+            __pyx_t_double_complex z;
+            double r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    double denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(a, a);
+                    case 3:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, a);
+                    case 4:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, z);
                 }
             }
-#endif
-#endif
-            if (unlikely(Py_SIZE(x) < 0)) {
-                PyErr_SetString(PyExc_OverflowError,
-                                "can't convert negative value to signed PY_LONG_LONG");
-                return (signed PY_LONG_LONG)-1;
-            }
-            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
-        } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-#if CYTHON_USE_PYLONG_INTERNALS
-            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
-                switch (Py_SIZE(x)) {
-                    case  0: return 0;
-                    case  1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
-                    case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
                 }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_abs(a);
+                theta = atan2(a.imag, a.real);
             }
-#endif
-#endif
-            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
+            lnr = log(r);
+            z_r = exp(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cos(z_theta);
+            z.imag = z_r * sin(z_theta);
+            return z;
         }
-    } else {
-        signed PY_LONG_LONG val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (signed PY_LONG_LONG)-1;
-        val = __Pyx_PyInt_AsSignedLongLong(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-}
+    #endif
+#endif
 
 static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
@@ -15910,7 +15067,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
         goto bad;
     if (!PyType_Check(result)) {
         PyErr_Format(PyExc_TypeError,
-            "%s.%s is not a type object",
+            "%.200s.%.200s is not a type object",
             module_name, class_name);
         goto bad;
     }
@@ -15938,7 +15095,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
     }
     else if ((size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
-            "%s.%s has the wrong size, try recompiling",
+            "%.200s.%.200s has the wrong size, try recompiling",
             module_name, class_name);
         goto bad;
     }
@@ -16191,10 +15348,18 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif /* PY_VERSION_HEX < 0x03030000 */
     } else
 #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#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);
-        if (r < 0) {
+        if (unlikely(r < 0)) {
             return NULL;
         } else {
             return result;
@@ -16239,7 +15404,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
     if (!PyLong_Check(res)) {
 #endif
       PyErr_Format(PyExc_TypeError,
-                   "__%s__ returned non-%s (type %.200s)",
+                   "__%.4s__ returned non-%.4s (type %.200s)",
                    name, name, Py_TYPE(res)->tp_name);
       Py_DECREF(res);
       return NULL;
@@ -16251,9 +15416,35 @@ 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 = PyNumber_Index(b);
+  PyObject *x;
+#if PY_MAJOR_VERSION < 3
+  if (likely(PyInt_CheckExact(b)))
+      return PyInt_AS_LONG(b);
+#endif
+  if (likely(PyLong_CheckExact(b))) {
+    #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+     #if CYTHON_USE_PYLONG_INTERNALS
+       switch (Py_SIZE(b)) {
+       case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0];
+       case  0: return 0;
+       case  1: return ((PyLongObject*)b)->ob_digit[0];
+       }
+     #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;
   ival = PyInt_AsSsize_t(x);
   Py_DECREF(x);
@@ -16272,16 +15463,6 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
 #endif
 }
-static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
-   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
-   if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
-       if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred())
-           PyErr_SetString(PyExc_OverflowError,
-                           "value too large to convert to size_t");
-       return (size_t)-1;
-   }
-   return (size_t)val;
-}
 
 
 #endif /* Py_PYTHON_H */
diff --git a/wrappers/numpy/adios.pyx b/wrappers/numpy/adios_mpi.pyx
similarity index 53%
copy from wrappers/numpy/adios.pyx
copy to wrappers/numpy/adios_mpi.pyx
index 7e6b2e9..7a12240 100644
--- a/wrappers/numpy/adios.pyx
+++ b/wrappers/numpy/adios_mpi.pyx
@@ -4,6 +4,10 @@
 
  Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
 """
+"""
+ This is a cython file. To generate a CPP file, use the following command:
+ $ cython --cplus adios.pyx
+"""
 
 import numpy as np
 cimport numpy as np
@@ -14,9 +18,9 @@ cimport mpi4py.MPI as MPI
 import cython
 cimport cython
 
-## ==========
+## ====================
 ## ADIOS Exported Functions
-## ==========
+## ====================
 
 from libc.stdint cimport uint32_t, int64_t, uint64_t
 from libc.stdlib cimport malloc, free
@@ -61,7 +65,7 @@ cdef extern from "adios.h":
                          char * group_name,
                          char * name, 
                          char * mode,
-                         void * comm)
+                         MPI_Comm comm)
     
     cdef int adios_group_size (int64_t fd_p,
                                uint64_t data_size,
@@ -108,76 +112,115 @@ cdef extern from "adios.h":
                                   char * parameters,
                                   char * base_path)
 
+cdef extern from "adios_selection.h":
+    ctypedef enum ADIOS_SELECTION_TYPE:
+        ADIOS_SELECTION_BOUNDINGBOX
+        ADIOS_SELECTION_POINTS
+        ADIOS_SELECTION_WRITEBLOCK
+        ADIOS_SELECTION_AUTO
+
+    ctypedef struct ADIOS_SELECTION_BOUNDINGBOX_STRUCT:
+        int       ndim
+        uint64_t *start
+        uint64_t *count
+
+    ctypedef struct ADIOS_SELECTION_POINTS_STRUCT:
+        pass
+
+    ctypedef struct ADIOS_SELECTION_WRITEBLOCK_STRUCT:
+        pass
+    
+    ctypedef struct ADIOS_SELECTION_AUTO_STRUCT:
+        pass
+
+    cdef union ADIOS_SELECTION_UNION:
+        ADIOS_SELECTION_BOUNDINGBOX_STRUCT bb
+        ADIOS_SELECTION_POINTS_STRUCT points
+        ADIOS_SELECTION_WRITEBLOCK_STRUCT block
+        ADIOS_SELECTION_AUTO_STRUCT autosel
+
+    ctypedef struct ADIOS_SELECTION:
+        ADIOS_SELECTION_TYPE    type
+        ADIOS_SELECTION_UNION   u
+
+    cdef ADIOS_SELECTION * adios_selection_boundingbox (int ndim,
+                                                        const uint64_t *start,
+                                                        const uint64_t *count)
+
 cdef extern from "adios_read.h":
-    ctypedef struct MPI_Comm:
+    ctypedef enum ADIOS_READ_METHOD:
+        ADIOS_READ_METHOD_BP
+        ADIOS_READ_METHOD_BP_AGGREGATE
         pass
 
+    ctypedef enum ADIOS_LOCKMODE:
+        ADIOS_LOCKMODE_NONE
+        ADIOS_LOCKMODE_CURRENT
+        ADIOS_LOCKMODE_ALL
+
     ctypedef struct ADIOS_FILE:
-        uint64_t fh
-        int      groups_count
-        int      vars_count
-        int      attrs_count
-        int      tidx_start
-        int      ntimesteps
-        int      version
+        uint64_t fh               
+        int      nvars            
+        char     ** var_namelist  
+        int      nattrs           
+        char     ** attr_namelist 
+        int      nmeshes          
+        char     ** mesh_namelist 
+        int      current_step     
+        int      last_step        
+        char     *path            
+        int      endianness       
+        int      version          
         uint64_t file_size
-        int      endianness
-        char     ** group_namelist
-        void     * internal_data
-
-    ctypedef struct ADIOS_GROUP:
-        uint64_t gh
-        int      grpid
-        int      vars_count
-        char     ** var_namelist
-        int      attrs_count
-        char     ** attr_namelist
-        ADIOS_FILE * fp
-        int      timestep
-        int      lasttimestep
 
     ctypedef struct ADIOS_VARINFO:
-        int        grpid
         int        varid
-        ADIOS_DATATYPES   type
-        int        ndim
-        uint64_t * dims
-        int        timedim
-        int        characteristics_count
-        void     * value
-        void     * gmin
-        void     * gmax
-        double   * gavg
-        double   * gstd_dev
-        void     ** mins
-        void     ** maxs
-        double   ** avgs
-        double   ** std_devs
-
-
-    cdef ADIOS_FILE * adios_fopen (char *, MPI_Comm)
-    cdef int adios_fclose (ADIOS_FILE *)
-
-    cdef ADIOS_GROUP * adios_gopen (ADIOS_FILE *, char *)
-    cdef ADIOS_GROUP * adios_gopen_byid (ADIOS_FILE *, int)
-    cdef int adios_gclose (ADIOS_GROUP *)
-
-    cdef ADIOS_VARINFO * adios_inq_var (ADIOS_GROUP *, char *)
-    cdef ADIOS_VARINFO * adios_inq_var_byid (ADIOS_GROUP *, int)
-    cdef void adios_free_varinfo(ADIOS_VARINFO *)
-    cdef int64_t adios_read_var_byid (ADIOS_GROUP *, int,
-                             uint64_t *, uint64_t *,
-                             void *)
-
-    cdef char * adios_errmsg()
-    cdef int adios_errno
-
-
-## ==========
-## ADIOS Enum
-## ==========
-
-class DATATYPE(object):
+        ADIOS_DATATYPES type  
+        int        ndim       
+        uint64_t * dims       
+        int        nsteps     
+        void     * value      
+        int      * nblocks    
+        int        sum_nblocks
+
+    cdef int adios_read_init_method (ADIOS_READ_METHOD method, 
+                                     MPI_Comm comm, 
+                                     char * parameters)
+    cdef int adios_read_finalize_method(ADIOS_READ_METHOD method)
+    cdef ADIOS_FILE * adios_read_open (const char * fname, 
+                                       ADIOS_READ_METHOD method, 
+                                       MPI_Comm comm, 
+                                       ADIOS_LOCKMODE lock_mode,
+                                       float timeout_sec)
+    cdef ADIOS_FILE * adios_read_open_file (const char * fname, 
+                                            ADIOS_READ_METHOD method, 
+                                            MPI_Comm comm)
+    cdef int adios_read_close (ADIOS_FILE *fp)
+    cdef int adios_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
+    cdef void adios_release_step (ADIOS_FILE *fp)
+    cdef ADIOS_VARINFO * adios_inq_var (ADIOS_FILE *fp, const char * varname)
+    cdef ADIOS_VARINFO * adios_inq_var_byid (ADIOS_FILE *fp, int varid)
+    cdef void adios_free_varinfo (ADIOS_VARINFO *cp)
+    cdef int adios_schedule_read (const ADIOS_FILE * fp,
+                                  const ADIOS_SELECTION * sel,
+                                  const char * varname,
+                                  int from_steps,
+                                  int nsteps,
+                                  void * data)
+    cdef int adios_schedule_read_byid (const ADIOS_FILE * fp, 
+                                       const ADIOS_SELECTION * sel,
+                                       int varid,
+                                       int from_steps,
+                                       int nsteps,
+                                       void * data)
+    cdef int adios_perform_reads (const ADIOS_FILE *fp, int blocking)
+
+
+## ====================
+## ADIOS Enum (public)
+## ====================
+
+class DATATYPE:
     unknown = -1
     byte = 0
     short = 1
@@ -194,19 +237,19 @@ class DATATYPE(object):
     complex = 10
     double_complex = 11
 
-class FLAG(object):
+class FLAG:
     UNKNOWN = 0
     YES = 1
     NO = 2
     
-class BUFFER_ALLOC_WHEN(object):
+class BUFFER_ALLOC_WHEN:
     UNKNOWN = 0
     NOW = 1
     LATER = 2
     
-## ==========
+## ====================
 ## ADIOS Write API
-## ==========
+## ====================
 
 cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
     return adios_init(config, comm.ob_mpi)
@@ -255,9 +298,9 @@ cpdef int close(int64_t fd_p):
 cpdef finalize(int mype = 0):
     return adios_finalize(mype)
 
-## ==========
+## ====================
 ## ADIOS No-XML API
-## ==========
+## ====================
 cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
     return adios_init_noxml(comm.ob_mpi)
 
@@ -313,11 +356,11 @@ cpdef int select_method (int64_t group,
                                 base_path)
 
 
-## ==========
-## ADIOS Read API
-## ==========
+## ====================
+## ADIOS Read API (V2)
+## ====================
 
-cpdef type adios2nptype(ADIOS_DATATYPES t):
+cdef type adios2nptype(ADIOS_DATATYPES t):
     cdef type ntype = None
     if t == adios_byte:
         ntype = np.int8
@@ -350,185 +393,102 @@ cpdef type adios2nptype(ADIOS_DATATYPES t):
 
     return ntype
 
-"""
-cpdef int np2adiostype(np.dtype t):
-    cdef int atype = -1
-    if t.type == np.float64:
-        atype = DATATYPE.double
-    else:
-        atype = -1
-
-    return atype
-"""
-
-cdef printAdiosFile(ADIOS_FILE * f):
+cdef printfile(ADIOS_FILE * f):
     print '%15s : %lu' % ('fh', f.fh)
-    print '%15s : %d' % ('groups_count', f.groups_count)
-    print '%15s : %d' % ('vars_count', f.vars_count)
-    print '%15s : %d' % ('attrs_count', f.attrs_count)      
-    print '%15s : %d' % ('tidx_start', f.tidx_start)       
-    print '%15s : %d' % ('ntimesteps', f.ntimesteps)       
-    print '%15s : %d' % ('version', f.version)          
+    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)       
+    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)
-    print '%15s : %d' % ('endianness', f.endianness)
-    print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
-
-cdef printAdiosGroup(ADIOS_GROUP * g):
-    print '%15s : %lu' % ('gh', g.gh)
-    print '%15s : %d' % ('grpid', g.grpid)
-    print '%15s : %d' % ('vars_count', g.vars_count)
-    print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
-    print '%15s : %d' % ('attrs_count', g.attrs_count)      
-    print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
-    print '%15s : %lu' % ('fp', <unsigned long> g.fp)
-
-cdef printAdiosVariable(ADIOS_VARINFO * v):
-    print '%15s : %d' % ('grpid', v.grpid)
+
+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)])
-    print '%15s : %d' % ('timedim', v.timedim)
+    print '%15s : %d' % ('nsteps', v.nsteps)
 
-cdef adios2scalar(ADIOS_DATATYPES t, void * val):
-    if t == adios_byte :
-        return (<char *> val)[0]
-    elif t == adios_short:
-        return (<short *> val)[0]
-    elif t == adios_integer:
-        return (<int *> val)[0]
-    elif t == adios_long:
-        return (<long *> val)[0]
-    elif t == adios_unsigned_byte:
-        return (<unsigned char *> val)[0]
-    elif t == adios_unsigned_short:
-        return (<unsigned short *> val)[0]
-    elif t == adios_unsigned_integer:
-        return (<unsigned int *> val)[0]
-    elif t == adios_unsigned_long:
-        return (<unsigned long *> val)[0]
-    elif t == adios_real:
-        return (<float *> val)[0]
-    elif t == adios_double:
-        return (<double *> val)[0]
-    elif t == adios_long_double:
-        return (<long double *> val)[0]
-    else:
-        return None
+## ====================
+## ADIOS Class Definitions for Read
+## ====================
 
-## ==========
-## ADIOS Class Definition
-## ==========
-    
-cdef class AdiosFile:
+""" Call adios_read_init_method """
+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_finalize_method """
+cpdef read_finalize(ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP):
+    return adios_read_finalize_method (method)
+
+""" Python class for ADIOS_FILE structure """
+cdef class file:
     """ Private Memeber """
     cpdef ADIOS_FILE * fp
 
     """ Public Memeber """
     cpdef public bytes name
-    cpdef public int groups_count
-    cpdef public int vars_count
-    cpdef public int attrs_count
-    cpdef public int tidx_start
-    cpdef public int ntimesteps
+    cpdef public int nvars
+    cpdef public int nattrs
+    cpdef public int current_step
+    cpdef public int last_step
+    cpdef public int endianness
     cpdef public int version
     cpdef public int file_size
-    cpdef public int endianness
-    
-    cpdef public dict group
     
-    def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+    cpdef public dict var
+    cpdef public dict attr
+
+    """ 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):
         self.fp = NULL
-        self.group = {}
-        
-        self.fp = adios_fopen(fname, comm.ob_mpi)
+        self.var = {}
+        self.attr = {}
+
+        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
-        self.groups_count = self.fp.groups_count
-        self.vars_count   = self.fp.vars_count  
-        self.attrs_count  = self.fp.attrs_count 
-        self.tidx_start   = self.fp.tidx_start  
-        self.ntimesteps   = self.fp.ntimesteps  
-        self.version      = self.fp.version     
-        self.file_size    = self.fp.file_size   
-        self.endianness   = self.fp.endianness  
+        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
+        self.endianness = self.fp.endianness  
+        self.version = self.fp.version     
+        self.file_size = self.fp.file_size   
     
-        cdef AdiosGroup g
-        for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
-            g = AdiosGroup(self, grpname)
-            self.group[grpname] = g
+        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()
-            
+            self.close()
+
+    """ Call adios_read_close """
     cpdef close(self):
         assert self.fp != NULL, 'Not an open file'
-        for g in self.group.values():
-            g.close()
-        adios_fclose(self.fp)
+        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)
-        printAdiosFile(self.fp)
-
-
-cdef class AdiosGroup:
-    """ Private Memeber """
-    cdef AdiosFile file
-    cdef ADIOS_GROUP * gp
-
-    """ Public Memeber """
-    cpdef public bytes name
-    cpdef public int grpid
-    cpdef public int vars_count
-    cpdef public int attrs_count
-    cpdef public int timestep
-    cpdef public int lasttimestep
-    
-    cpdef public dict var
-    
-    def __init__(self, AdiosFile file, char * name):
-        self.file = file
-        self.var = {}
-        
-        self.gp = adios_gopen(self.file.fp, name)
-        assert self.gp != NULL, 'Not an open group'
-
-        self.name         = name
-        self.grpid        = self.gp.grpid        
-        self.vars_count   = self.gp.vars_count   
-        self.attrs_count  = self.gp.attrs_count  
-        self.timestep     = self.gp.timestep     
-        self.lasttimestep = self.gp.lasttimestep 
-        
-        cdef AdiosVariable v
-        for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
-            v = AdiosVariable(self, varname)
-            self.var[varname] = v
-
-    def __del__(self):
-        self.close()
+        printfile(self.fp)
 
-    cpdef close(self):
-        assert self.gp != NULL, 'Not an open file'
-        for v in self.var.values():
-            v.close()
-        adios_gclose(self.gp)
-        self.gp = NULL
-        
-    cpdef printself(self):
-        assert self.gp != NULL, 'Not an open file'
-        print '=== AdiosGroup ==='
-        print '%15s : %lu' % ('gp', <unsigned long> self.gp)
-        printAdiosGroup(self.gp)
-        
-cdef class AdiosVariable:
+""" Python class for ADIOS_VARINFO structure """
+cdef class var:
     """ Private Memeber """
-    cdef AdiosGroup group
+    cdef file file
     cdef ADIOS_VARINFO * vp
 
     """ Public Memeber """
@@ -537,36 +497,37 @@ cdef class AdiosVariable:
     cpdef public type type
     cpdef public int ndim
     cpdef public tuple dims
-    cpdef public int timedim
-    cpdef public int characteristics_count
-    
-    def __init__(self, AdiosGroup group, char * name):
-        self.group = group
+    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
 
-        self.vp = adios_inq_var(self.group.gp, name)
-        assert self.group.gp != NULL, 'Not an open group'
+        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'
 
-        self.name                  = name
-        self.varid                 = self.vp.varid                
-        self.type                  = adios2nptype(self.vp.type)
-        self.ndim                  = self.vp.ndim                 
-        self.timedim               = self.vp.timedim              
-        self.characteristics_count = self.vp.characteristics_count
-        
+        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)])
+        self.nsteps = self.vp.nsteps
         
     def __del__(self):
         self.close()
 
+    """ Call adios_free_varinfo """
     cpdef close(self):
-        assert self.vp != NULL, 'Not an open file'
+        assert self.vp != NULL, 'Not an open var'
         adios_free_varinfo(self.vp)
         self.vp = NULL
-        
-    cpdef read(self, tuple offset = (), tuple count = ()):
-        cdef type ntype = adios2nptype(self.vp.type)
-        assert ntype is not None, 'Data type is not supported yet'
+
+    """ 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'
         
         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
@@ -586,25 +547,50 @@ cdef class AdiosVariable:
 
         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.'
+        assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
 
-        cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
-        cdef int64_t nbytes = adios_read_var_byid(
-            self.group.gp, 
-            self.vp.varid, 
-            <uint64_t *> npoffset.data, 
-            <uint64_t *> npcount.data, 
-            <void *> var.data
-            )
+        shape = list(npcount)
+        if (nsteps > 1):
+            shape.insert(0, nsteps)
+        cdef np.ndarray var = np.zeros(shape, dtype=self.type)
 
-        if nbytes < 0:
-            print "[WARNING] bytes read :", nbytes
+        cdef ADIOS_SELECTION * sel
+        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)
 
         return var
 
     """ Print self """
     cpdef printself(self):
-        assert self.vp != NULL, 'Not an open file'
+        assert self.vp != NULL, 'Not an open variable'
         print '=== AdiosVariable ==='
         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
-        printAdiosVariable(self.vp)
+        print '%15s : %lu' % ('fp', <unsigned long> self.file.fp)
+        printvar(self.vp)
+
+## ====================
+## 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):
+        print "No valid variable"
+        return
+
+    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,
+            '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/conf/CMakeLists.txt b/wrappers/numpy/conf/CMakeLists.txt
new file mode 100644
index 0000000..0982134
--- /dev/null
+++ b/wrappers/numpy/conf/CMakeLists.txt
@@ -0,0 +1,205 @@
+# 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
new file mode 100644
index 0000000..c38e815
--- /dev/null
+++ b/wrappers/numpy/conf/MANIFEST.in
@@ -0,0 +1,15 @@
+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
new file mode 100644
index 0000000..e69de29
diff --git a/wrappers/numpy/conf/__init__.pyc b/wrappers/numpy/conf/__init__.pyc
new file mode 100644
index 0000000..62bdbd6
Binary files /dev/null and b/wrappers/numpy/conf/__init__.pyc differ
diff --git a/wrappers/numpy/conf/cythonize.bat b/wrappers/numpy/conf/cythonize.bat
new file mode 100644
index 0000000..55a02ce
--- /dev/null
+++ b/wrappers/numpy/conf/cythonize.bat
@@ -0,0 +1,4 @@
+ 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
new file mode 100644
index 0000000..44e5118
--- /dev/null
+++ b/wrappers/numpy/conf/cythonize.py
@@ -0,0 +1,72 @@
+#!/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
new file mode 100755
index 0000000..2cdcedd
--- /dev/null
+++ b/wrappers/numpy/conf/cythonize.sh
@@ -0,0 +1,4 @@
+#!/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
new file mode 100644
index 0000000..41398a9
--- /dev/null
+++ b/wrappers/numpy/conf/epydoc.cfg
@@ -0,0 +1,149 @@
+[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
new file mode 100755
index 0000000..61836e9
--- /dev/null
+++ b/wrappers/numpy/conf/epydocify.py
@@ -0,0 +1,110 @@
+#!/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
new file mode 100644
index 0000000..146d2c2
--- /dev/null
+++ b/wrappers/numpy/conf/mpiconfig.py
@@ -0,0 +1,363 @@
+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
new file mode 100644
index 0000000..c26b84d
Binary files /dev/null and b/wrappers/numpy/conf/mpiconfig.pyc differ
diff --git a/wrappers/numpy/conf/mpidistutils.py b/wrappers/numpy/conf/mpidistutils.py
new file mode 100644
index 0000000..6fe9b80
--- /dev/null
+++ b/wrappers/numpy/conf/mpidistutils.py
@@ -0,0 +1,1534 @@
+# 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
new file mode 100644
index 0000000..c0477ec
Binary files /dev/null and b/wrappers/numpy/conf/mpidistutils.pyc differ
diff --git a/wrappers/numpy/conf/mpiregexes.py b/wrappers/numpy/conf/mpiregexes.py
new file mode 100644
index 0000000..eb00df8
--- /dev/null
+++ b/wrappers/numpy/conf/mpiregexes.py
@@ -0,0 +1,75 @@
+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
new file mode 100644
index 0000000..c20947f
Binary files /dev/null and b/wrappers/numpy/conf/mpiregexes.pyc differ
diff --git a/wrappers/numpy/conf/mpiscanner.py b/wrappers/numpy/conf/mpiscanner.py
new file mode 100644
index 0000000..0f80e99
--- /dev/null
+++ b/wrappers/numpy/conf/mpiscanner.py
@@ -0,0 +1,342 @@
+# 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
new file mode 100644
index 0000000..722d1c7
Binary files /dev/null and b/wrappers/numpy/conf/mpiscanner.pyc differ
diff --git a/wrappers/numpy/example/ncdf2bp.py b/wrappers/numpy/example/ncdf2bp.py
index 4fa4f7b..9034224 100755
--- a/wrappers/numpy/example/ncdf2bp.py
+++ b/wrappers/numpy/example/ncdf2bp.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-from adios import *
+from adios_mpi import *
 from scipy.io import netcdf
 import numpy as np
 import sys
@@ -112,10 +112,13 @@ for it in range(tdim):
         write_int(fd, name, val)
         
     for name, var in tdepvar.items():
-        arr = np.array(var.data.take([it], axis=tdx),
-                       dtype=np.float64)
-        print "Variable writing : %s %s" % (name, arr.shape)
-        write(fd, name, arr)
+        try:
+            arr = np.array(var.data.take([it], axis=tdx),
+                           dtype=np.float64)
+            print "Variable writing : %s %s" % (name, arr.shape)
+            write(fd, name, arr)
+        except ValueError:
+            print "Skip:", name
 
     close(fd)
     
diff --git a/wrappers/numpy/mpi.cfg b/wrappers/numpy/mpi.cfg
new file mode 100644
index 0000000..6c4618a
--- /dev/null
+++ b/wrappers/numpy/mpi.cfg
@@ -0,0 +1,184 @@
+# Some Linux distributions have RPM's for some MPI implementations.
+# In such a case, headers and libraries usually are in default system
+# locations, and you should not need any special configuration.
+
+# If you do not have MPI distribution in a default location, please
+# uncomment and fill-in appropriately the following lines. Yo can use
+# as examples the [mpich2], [openmpi],  and [deinompi] sections
+# below the [mpi] section (wich is the one used by default).
+
+# If you specify multiple locations for includes and libraries,
+# please separate them with the path separator for your platform,
+# i.e., ':' on Unix-like systems and ';' on Windows
+
+
+# Default configuration
+# ---------------------
+[mpi]
+
+## mpi_dir              = /usr
+## mpi_dir              = /usr/local
+## mpi_dir              = /usr/local/mpi
+## mpi_dir              = /opt
+## mpi_dir              = /opt/mpi
+## mpi_dir =            = $ProgramFiles\MPI
+
+## mpicc                = %(mpi_dir)s/bin/mpicc
+## mpicxx               = %(mpi_dir)s/bin/mpicxx
+
+## define_macros        =
+## undef_macros         =
+## include_dirs         = %(mpi_dir)s/include
+## libraries            = mpi
+## library_dirs         = %(mpi_dir)s/lib
+## runtime_library_dirs = %(mpi_dir)s/lib
+
+## extra_compile_args   =
+## extra_link_args      =
+## extra_objects        =
+
+
+
+# MPICH2 example
+# --------------
+[mpich2]
+mpi_dir              = /home/devel/mpi/mpich2-1.4.1
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpicxx
+#include_dirs         = %(mpi_dir)s/include
+#libraries            = mpich opa mpl
+#library_dirs         = %(mpi_dir)s/lib
+#runtime_library_dirs = %(library_dirs)s
+
+
+# Open MPI example
+# ----------------
+[openmpi]
+mpi_dir              = /home/devel/mpi/openmpi-1.5.4
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpicxx
+#include_dirs         = %(mpi_dir)s/include
+#libraries            = mpi
+library_dirs         = %(mpi_dir)s/lib
+runtime_library_dirs = %(library_dirs)s
+
+
+# Sun MPI example
+# ---------------
+[sunmpi]
+#mpi_dir              = /opt/SUNWhpc/HPC8.2.1/gnu
+mpi_dir              = /opt/SUNWhpc/HPC8.1/sun
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpicxx
+#include_dirs         = %(mpi_dir)s/include
+#libraries            = mpi open-rte open-pal
+library_dirs         = %(mpi_dir)s/lib
+runtime_library_dirs = %(library_dirs)s
+
+
+# HP MPI example
+# --------------
+[hpmpi]
+mpi_dir              = /opt/hpmpi
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpiCC
+#include_dirs         = %(mpi_dir)s/include
+#libraries            = hpmpio hpmpi dl
+#library_dirs         = %(mpi_dir)s/lib
+#runtime_library_dirs = %(library_dirs)s
+
+
+# SGI MPI example
+# ---------------
+[sgimpi]
+define_macros = SGI_MPI=1
+mpi_dir       = /usr
+mpicc         = icc
+mpicxx        = icpc
+include_dirs  = %(mpi_dir)s/include
+libraries     = mpi
+library_dirs  = %(mpi_dir)s/lib
+runtime_library_dirs = %(library_dirs)s
+
+
+# IBM POE/MPI example
+# -------------------
+[poempi]
+mpicc  = mpcc_r
+mpicxx = mpCC_r
+
+
+# MPICH2 example (Windows)
+# ------------------------
+[mpich2-win32]
+mpi_dir = $ProgramFiles\MPICH2
+include_dirs = %(mpi_dir)s\include
+libraries = mpi
+library_dirs = %(mpi_dir)s\lib
+
+
+# Open MPI example (Windows)
+# -------------------------
+[openmpi-win32]
+mpi_dir = $ProgramFiles\OpenMPI_v1.5.4-win32
+define_macros = OMPI_IMPORTS
+include_dirs = %(mpi_dir)s\include
+libraries = libmpi
+library_dirs = %(mpi_dir)s\lib
+
+
+# DeinoMPI example
+# ----------------
+[deinompi]
+mpi_dir = $ProgramFiles\DeinoMPI
+include_dirs = %(mpi_dir)s\include
+libraries = mpi
+library_dirs = %(mpi_dir)s\lib
+
+
+# Microsoft MPI example
+# ---------------------
+[msmpi]
+mpi_dir = $ProgramFiles\Microsoft HPC Pack 2008 SDK
+include_dirs = %(mpi_dir)s\include
+libraries = msmpi
+library_dirs = %(mpi_dir)s\lib\i386
+#library_dirs = %(mpi_dir)s\lib\amd64
+
+
+# SiCortex MPI example
+# --------------------
+[sicortex]
+mpicc = mpicc --gnu
+mpicxx = mpicxx --gnu
+
+
+# LAM/MPI example
+# ---------------
+[lammpi]
+mpi_dir              = /home/devel/mpi/lam-7.1.4
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpic++
+include_dirs         = %(mpi_dir)s/include
+libraries            = lammpio mpi lam
+library_dirs         = %(mpi_dir)s/lib
+runtime_library_dirs = %(library_dirs)s
+
+# MPICH1 example
+# --------------
+[mpich1]
+mpi_dir              = /home/devel/mpi/mpich-1.2.7p1
+mpicc                = %(mpi_dir)s/bin/mpicc
+mpicxx               = %(mpi_dir)s/bin/mpicxx
+include_dirs         = %(mpi_dir)s/include
+libraries            = mpich
+library_dirs         = %(mpi_dir)s/lib/shared:%(mpi_dir)s/lib
+runtime_library_dirs = %(mpi_dir)s/lib/shared
+
+
+# Fake MPI, just for testing
+# --------------------------
+[fakempi]
+mpicc         = cc
+mpicxx        = c++
+include_dirs  = misc/fakempi
diff --git a/wrappers/numpy/mpiconfig.py b/wrappers/numpy/mpiconfig.py
new file mode 100644
index 0000000..146d2c2
--- /dev/null
+++ b/wrappers/numpy/mpiconfig.py
@@ -0,0 +1,363 @@
+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/mpidistutils.py b/wrappers/numpy/mpidistutils.py
new file mode 100644
index 0000000..6fe9b80
--- /dev/null
+++ b/wrappers/numpy/mpidistutils.py
@@ -0,0 +1,1534 @@
+# 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/setup.py b/wrappers/numpy/setup.py
index 838c3b2..79bf097 100644
--- a/wrappers/numpy/setup.py
+++ b/wrappers/numpy/setup.py
@@ -6,24 +6,25 @@ from distutils.extension import Extension
 import numpy as np
 
 # Use mpi4py dist utils: https://bitbucket.org/mpi4py/mpi4py
-from mpidistutils import setup
+#from mpidistutils import setup
+from distutils.core import setup
 
 import subprocess
 
 m1 = Extension('adios', 
                sources=['adios.cpp'], 
-               define_macros=[('ADIOS_USE_READ_API_1', None)],
+               define_macros=[('_NOMPI', None)],
                include_dirs = [np.get_include()],
                library_dirs = [],
                libraries = [],
                extra_objects = [])
 
-p = subprocess.Popen(["adios_config", "-c"], stdout=subprocess.PIPE)
+p = subprocess.Popen(["adios_config", "-c", "-s"], stdout=subprocess.PIPE)
 for path in p.communicate()[0].strip().split(" "):
     if path.startswith('-I'):
         m1.include_dirs.append(path.replace('-I', '', 1))
 
-p = subprocess.Popen(["adios_config", "-l"], stdout=subprocess.PIPE)
+p = subprocess.Popen(["adios_config", "-l", "-s"], stdout=subprocess.PIPE)
 for path in p.communicate()[0].strip().split(" "):
     if path.startswith('-L'):
         m1.library_dirs.append(path.replace('-L', '', 1))
diff --git a/wrappers/numpy/setup.py b/wrappers/numpy/setup_mpi.py
similarity index 82%
copy from wrappers/numpy/setup.py
copy to wrappers/numpy/setup_mpi.py
index 838c3b2..e47bd63 100644
--- a/wrappers/numpy/setup.py
+++ b/wrappers/numpy/setup_mpi.py
@@ -7,12 +7,13 @@ import numpy as np
 
 # Use mpi4py dist utils: https://bitbucket.org/mpi4py/mpi4py
 from mpidistutils import setup
+#from distutils.core import setup
 
 import subprocess
 
-m1 = Extension('adios', 
-               sources=['adios.cpp'], 
-               define_macros=[('ADIOS_USE_READ_API_1', None)],
+m1 = Extension('adios_mpi', 
+               sources=['adios_mpi.cpp'], 
+               define_macros=[],
                include_dirs = [np.get_include()],
                library_dirs = [],
                libraries = [],
@@ -30,8 +31,8 @@ for path in p.communicate()[0].strip().split(" "):
     if path.startswith('-l'):
         m1.libraries.append(path.replace('-l', '', 1))
 
-setup(name = 'Adios',
+setup(name = 'Adios_MPI',
       version = '1.0',
-      description = 'Python Module for Adios',
+      description = 'Python Module for Adios MPI',
       url = 'http://www.olcf.ornl.gov/center-projects/adios/',
       ext_modules = [m1])
diff --git a/wrappers/numpy/test/adios_noxml_test.py b/wrappers/numpy/test/adios_noxml_test.py
deleted file mode 100644
index c769db7..0000000
--- a/wrappers/numpy/test/adios_noxml_test.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-from adios import *
-import numpy as np
-
-init_noxml()
-allocate_buffer(BUFFER_ALLOC_WHEN.NOW, 10)
-gid = declare_group ("temperature", "", FLAG.YES)
-select_method (gid, "MPI", "", "")
-define_var (gid, "NX", "", DATATYPE.integer, "", "", "")
-define_var (gid, "size", "", DATATYPE.integer, "", "", "")
-define_var (gid, "rank", "", DATATYPE.integer, "", "", "")
-define_var (gid, "temperature", "", DATATYPE.double, "1,NX", "size,NX", "")
-
-fd = open("temperature", "adios_noxml.bp", "w")
-
-NX = 10
-size = 1
-rank = 0
-groupsize =  4 + 4 + 4 + 8 * 1 * NX
-t = np.array(range(NX), dtype=np.float64)
-set_group_size(fd, groupsize)
-write_int(fd, "NX", NX)
-write_int(fd, "size", size)
-write_int(fd, "rank", rank)
-write(fd, "temperature", t)
-close(fd)
-
-finalize()
-
diff --git a/wrappers/numpy/test/adios_read_test.py b/wrappers/numpy/test/adios_read_test.py
deleted file mode 100644
index 8be4c68..0000000
--- a/wrappers/numpy/test/adios_read_test.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-from adios import *
-import numpy as np
-
-f = AdiosFile("adios_test.bp")
-f.printself()
-g = f.group["temperature"]
-g.printself()
-v = g.var["/temperature"]
-v.printself()
-
-print v.read()
-
-f.close()
diff --git a/wrappers/numpy/test/adios_write_test.py b/wrappers/numpy/test/adios_write_test.py
deleted file mode 100644
index 15997ee..0000000
--- a/wrappers/numpy/test/adios_write_test.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-import adios
-import numpy as np
-
-adios.init("config.xml")
-fd = adios.open("temperature", "adios_test.bp", "w")
-
-NX = 10
-size = 1
-rank = 0
-groupsize =  4 + 4 + 4 + 8 * 1 * NX
-t = np.array(range(NX), dtype=np.float64)
-adios.set_group_size(fd, groupsize)
-adios.write_int(fd, "NX", NX)
-adios.write_int(fd, "size", size)
-adios.write_int(fd, "rank", rank)
-adios.write(fd, "temperature", t)
-adios.close(fd)
-
-adios.finalize()
-
diff --git a/wrappers/numpy/test/test_adios_noxml.sh b/wrappers/numpy/test/test_adios_noxml.sh
deleted file mode 100755
index 2c62462..0000000
--- a/wrappers/numpy/test/test_adios_noxml.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-function usage {
-    echo "USAGE : `basename $0`"
-}
-
-if [ $# -lt 1 ]  ; then
-    usage
-    exit 1
-fi
-
-SRCDIR=$1
-
-PYTHONPATH=.:$PYTHONPATH python $SRCDIR/adios_noxml_test.py
-exit $?
diff --git a/wrappers/numpy/test/test_adios_read.sh b/wrappers/numpy/tests/config.xml
old mode 100755
new mode 100644
similarity index 59%
rename from wrappers/numpy/test/test_adios_read.sh
rename to wrappers/numpy/tests/config.xml
index 323e962..ac64f8b
--- a/wrappers/numpy/test/test_adios_read.sh
+++ b/wrappers/numpy/tests/config.xml
@@ -1,25 +1,10 @@
-#!/bin/bash
-
-function usage {
-    echo "USAGE : `basename $0`"
-}
-
-if [ $# -lt 1 ]  ; then
-    usage
-    exit 1
-fi
-
-SRCDIR=$1
-
-cat << EOF > config.xml
 <?xml version="1.0"?>
 <adios-config host-language="C">
     <adios-group name="temperature">
     <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 dimensions="size,NX" offsets="0,0">
+       <var name="temperature" gwrite="t" type="double" dimensions="size,NX"/>
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
@@ -29,7 +14,3 @@ cat << EOF > config.xml
 <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
-EOF
-
-PYTHONPATH=.:$PYTHONPATH python $SRCDIR/adios_read_test.py
-exit $?
diff --git a/wrappers/numpy/test/test_adios_write.sh b/wrappers/numpy/tests/config_mpi.xml
old mode 100755
new mode 100644
similarity index 72%
rename from wrappers/numpy/test/test_adios_write.sh
rename to wrappers/numpy/tests/config_mpi.xml
index 2bedb5b..46120d4
--- a/wrappers/numpy/test/test_adios_write.sh
+++ b/wrappers/numpy/tests/config_mpi.xml
@@ -1,17 +1,3 @@
-#!/bin/bash
-
-function usage {
-    echo "USAGE : `basename $0`"
-}
-
-if [ $# -lt 1 ]  ; then
-    usage
-    exit 1
-fi
-
-SRCDIR=$1
-
-cat << EOF > config.xml
 <?xml version="1.0"?>
 <adios-config host-language="C">
     <adios-group name="temperature">
@@ -29,7 +15,3 @@ cat << EOF > config.xml
 <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
-EOF
-
-PYTHONPATH=.:$PYTHONPATH python $SRCDIR/adios_write_test.py
-exit $?
diff --git a/wrappers/numpy/tests/test_adios.py b/wrappers/numpy/tests/test_adios.py
new file mode 100644
index 0000000..22aa589
--- /dev/null
+++ b/wrappers/numpy/tests/test_adios.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ python ./test_adios.py
+"""
+
+import adios as ad
+import numpy as np
+
+## Writing
+print "\n>>> Writing ...\n"
+
+ad.init("config.xml")
+fd = ad.open("temperature", "adios_test.bp", "w")
+
+NX = 10
+size = 2
+groupsize =  4 + 4 + 8 * size * NX
+t = np.array(range(NX*size), dtype=np.float64)
+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()
+
+## Reading
+print "\n>>> Reading ...\n"
+
+f = ad.file("adios_test.bp")
+f.printself()
+
+v = f.var['temperature']
+v.printself()
+
+val = v.read()
+print val
+assert ((tt == val).all())
+f.close()
+
+## Testing
+print "\n>>> Test utility functions ...\n"
+
+print "bpls:\n", ad.bpls('adios_test.bp')
+print "readvar:\n", ad.readvar("adios_test.bp", "temperature")
+
+print "\n>>> Done.\n"
+
diff --git a/wrappers/numpy/tests/test_adios_mpi.py b/wrappers/numpy/tests/test_adios_mpi.py
new file mode 100644
index 0000000..767c497
--- /dev/null
+++ b/wrappers/numpy/tests/test_adios_mpi.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ mpiexec -n 4 python ./test_adios_mpi.py
+"""
+
+import adios_mpi as ad
+import numpy as np
+from mpi4py import MPI
+
+## Init
+comm = MPI.COMM_WORLD
+rank = comm.Get_rank()
+size = comm.Get_size()
+
+## Writing
+print "\n>>> Writing ... (rank = %d)\n" % rank
+
+ad.init("config_mpi.xml", comm)
+fd = ad.open("temperature", "adios_test_mpi.bp", "w", comm)
+
+NX = 10
+groupsize =  4 + 4 + 4 + 8 * 1 * NX
+t = np.array(range(NX), dtype=np.float64) + rank*NX
+ad.set_group_size(fd, groupsize)
+ad.write_int(fd, "NX", NX)
+ad.write_int(fd, "rank", rank)
+ad.write_int(fd, "size", size)
+ad.write(fd, "temperature", t)
+ad.close(fd)
+
+ad.finalize()
+
+## Reading
+if rank == 0:
+    print "\n>>> Reading ...\n"
+
+    f = ad.file("adios_test_mpi.bp", comm=MPI.COMM_SELF)
+    f.printself()
+
+    v = f.var['temperature']
+    v.printself()
+
+    val = v.read()
+    print val
+    assert (int(sum(sum(val))) == (size*NX-1)*(size*NX)/2)
+    f.close()
+
+print "\n>>> Done.\n"
+
+## Testing
+if rank == 0:
+    print "\n>>> Test utility functions ...\n"
+
+    print "bpls:\n", ad.bpls('adios_test_mpi.bp')
+    print "readvar:\n", ad.readvar("adios_test_mpi.bp", "temperature")
+
+    print "\n>>> Done.\n"
diff --git a/wrappers/numpy/tests/test_adios_timestep.py b/wrappers/numpy/tests/test_adios_timestep.py
new file mode 100644
index 0000000..5e2fe47
--- /dev/null
+++ b/wrappers/numpy/tests/test_adios_timestep.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+"""
+Example:
+
+$ python ./test_adios.py
+"""
+
+import adios as ad
+import numpy as np
+
+## Writing
+print "\n>>> Writing ...\n"
+
+ad.init("config.xml")
+
+for i in range(10):
+    if i == 0:
+        fd = ad.open("temperature", "adios_test.bp", "w")
+    else:
+        fd = ad.open("temperature", "adios_test.bp", "a")
+
+    NX = 10
+    size = 2
+    groupsize =  4 + 4 + 8 * size * NX
+    t = np.array(range(NX*size), dtype=np.float64) + i*NX*size
+    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()
+
+## Reading
+print "\n>>> Reading step-by-step ...\n"
+
+f = ad.file("adios_test.bp")
+f.printself()
+
+v = f.var['temperature']
+v.printself()
+
+for i in range(10):
+    val = v.read(from_steps=i)
+    print "step =", i
+    print val
+    
+assert ((tt == val).all())
+    
+## Testing
+print "\n>>> Test utility functions ...\n"
+
+print "bpls:\n", ad.bpls('adios_test.bp')
+print "readvar:\n", ad.readvar("adios_test.bp", "temperature")
+
+print "\n>>> Done.\n"
+

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